2017-02-11 7 views
0

Ich teste MongoDb und MySQL mit ihren Python-Konnektor pymongo und pymysql, vor allem die Insert-Funktion. pymongo Version ist 3.4, pymysql ist 0.7.9, Python ist 3,5pymongo einfügen vs pymysql einfügen

Mein Code wie für Mongo aussieht:

client = MongoClient('localhost', 27017) 
    db = client['local'] 
    collection = db['cqt']    

    for i in range (0,10): 
     datas = [ {'a' : 1, 'b':2" }, {'a' : 3, 'b':4" }, ...] # 2000 dicts 
     data = [ bson.son.SON(d) for d in datas] 
     deltaT = time.clock() 
     collection.insert_many(data) 
     deltaT = time.clock() - deltaT 

Und für mysql:

connection = pymysql.connect(host='127.0.0.1', 
        user='admin', 
        password='toto', 
        db='cqt', 
        charset='utf8mb4', 
        cursorclass=pymysql.cursors.DictCursor) 

    cursor = connection.cursor() 
    sqlRequest = """INSERT INTO `cqt`.`myTable` (`a`,`b`) VALUES """ 


    for data in datas : sql += data.getSQL() + "," # 2000 rows 
    deltaT = time.clock() 
    cursor.execute(sql) 
    deltaT = time.clock() - deltaT 

Daten sind einfache Wörterbücher, 6 Spalten mit einem String-Schlüssel und einem int-Wert.

Wenn die deltaT Variable Plotten (die erforderliche Zeit 2000 Einträge eingefügt werden), ich bin überrascht, dass Mongo ist viel langsamer als mysql zu finden, um den Faktor 10. insert duration results

Ich will nicht Führen Sie hier einen Benchmark durch, aber nur um eine Schätzung der Datenbankleistung in dem Anwendungsfall zu erhalten, den ich benötige. Aus anderen Tests, die in Java gemacht wurden, oder wenn man sich den Benchmark zwischen MySQL und MongoDB ansieht, sind meine Ergebnisse mit Python jedoch nicht das, was ich überhaupt erwartet habe. Ich sollte ziemlich ähnliche Leistungen für das Einfügen mit MySQL und Mongo und noch bessere Leistung für Mongo haben.

Also, ist der Pymongo-Anschluss langsam? Wissen Sie, ob es einige Parameter gibt, die ich in meinem Code oder in MongoDB ändern sollte, um die Perf zu verbessern? Irgendwelche Vorschläge, um bessere Leistung mit MongoDB zu haben?

Antwort

0

Eigentlich denke ich, dass Sie einige Statistiken sammeln müssen, indem Sie ein Tool wie MongoDB Management-Dienst verwenden und dann stellen Sie sicher, welcher Ihr Flaschenhals ist.

Und hier sind meine Ratschläge:

  • Try multiprocessing zu verwenden und parallel Python-Skript ausführen document.You einfügen wird eine bessere Leistung haben, absolut.

    Werfen Sie einen Blick auf diese example.

  • Um die Schreibleistung zu maximieren, ist Sharding ein guter Weg.

  • Überprüfen Sie Ihre Festplatte I/O-Geschwindigkeit, vielleicht können Sie versuchen, SSD.

Weitere Details ab write Operation performance.

Hoffe, das hilft.

+0

Danke für Ihre Antwort. Multiprozessing hat den Trick gemacht. – Setoh

Verwandte Themen