2017-04-06 3 views
0

ショート:Redisのは、私はちょうど30000件のレコードを挿入し、それらを受け取る30000回(Redisの)よりも、いくつかのテストをしました(変な)時間を取得=Redis:Set time =時間を取得します。どうして?

を時間を設定します。

 def redis_set(data): 
     for k, v in data.iteritems(): 
      redis_conn.set(k, v) 

    def redis_get(data): 
     for k in data.iterkeys(): 
     val = redis_conn.get(k) 

    def do_tests(num, tests): 
     # setup dict with key/values to retrieve 
     data = {'key' + str(i): 'val' + str(i)*100 for i in range(num)} 
     # run tests 
    for test in tests: 
     start = time.time() 
     print "Starting test .. %s" % (test.__name__) 
     test(data) 
     elapsed = time.time() - start 
     print "%s: %d ops in %.2f seconds : %.1f ops/sec" % (test.__name__, num, elapsed, num/elapsed) 

    tests = [redis_set, redis_get] 
    do_tests(30000, tests) 

結果

Redisの

redis_set:106.21秒で30000のOPS:282.4 ops /秒

redis_get:94.94秒で30000のOPS:316.0 ops /秒

OKですか?

答えて

1

何も間違っていません。 Redisのはシングルスレッドであるため

は、読み出しと書き込みのためのロックペナルティがありません。 GETSETは数回のメモリ操作であり、どちらも非常に高速です。

あなたのベンチマークによると、SETGETよりも少し遅いです。 SETオペレーションは、新たに追加されたアイテムのためにメモリを割り当てる必要があり、メモリ割り当てコストは他のメモリオペレーションよりも多く割り当てる必要があるので、これも妥当である。

一方、Mongodbの読み取り操作は書き込み操作よりもはるかに高速です。なぜなら、キャッシュなどの読み取り操作には多くの最適化が行われるからです。また、Mongodbが使用した意図ロックは、読み込み操作にはるかにやさしく、複数の読者が同時に1つのスロットからデータを読み込むことができ、ライターは排他的です。

+0

ためのfind()のおかげで、私は、高速のRedisから読み取る予想... – gmlvsv

+0

MongoDBはとても速かっただけでカーソルではなく、データを返す - 申し訳ありませんが。私はMongoDBテストを削除しました。 – gmlvsv

関連する問題