2017-02-11 8 views
0

私は、Pythonコネクターpymongoとpymysql、特に挿入機能を使ってMongoDbとMySQLをテストしています。シンプルdictionnaries、6列pymongo insert vs pymysql insert

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 

データは以下のとおりです。

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 

とMySQLのために:pymongoのバージョンは3.4で、pymysqlは0.7.9で、Pythonは私のコードは、モンゴのためのように見え3.5

です文字列キーとint値を使用します。

デルタT変数(2000のエントリを挿入するために必要な時間)をプロットすると、私はそのモンゴを見つけるために驚いたが、要因10 insert duration results

により、MySQLのよりもはるかに遅いです私はしたくありませんここではベンチマークを行いますが、私が必要とするユースケースではデータベースの性能を評価するだけです。しかし、Javaで作られた他のテストや、MySQLとMongoDBの間のWeb上のベンチマークを見ると、Pythonの私の結果は私がまったく期待していたものではありません。 MySQLとMongoでの挿入にはかなり似たパフォーマンスが必要で、Mongoのパフォーマンスも向上するはずです。

したがって、pymongoコネクタは低速ですか? perfを改善するために私のコードやMongoDBで変更すべきいくつかのパラメータがあるかどうか知っていますか? MongoDBのパフォーマンスが向上するとのアドバイスはありますか?

答えて

0

実際、MongoDB Managementサービスなどのツールを使用していくつかの統計情報を収集し、次にボトルネックを確認する必要があると思います。 multiprocessingを使用し、絶対に、より優れた性能を持つことになりますdocument.Youを挿入するために並列Pythonスクリプトを実行するための

  • 試してみてください。

    そしてここでは、私からのアドバイスです。

    これをご覧くださいexample

  • 書き込みパフォーマンスを最大限にするには、シャーディングが良い方法です。

  • ディスクのI/O速度を確認してください。おそらくSSDを試すことができます。

詳細はwrite Operation performanceを参照してください。

これが役に立ちます。

+0

あなたの答えをありがとう。マルチプロセッシングはトリックでした。 – Setoh