SimpleDBの一貫性読み出し性能評価
- 一貫性読み出し(consistency read)の性能評価をしてみた。
- 下記、やる気の無いコードを利用。
import boto import datetime sdb = boto.connect_sdb() domain = sdb.get_domain('test_simpledb') for item in domain: item.delete() write_sec = 0 write_microsec = 0 read_sec = 0 read_microsec = 0 read_ok = 0 read_badval = 0 read_error = 0 for i in range(0, 1000): key = "key_%s" % str(i) item = domain.new_item(key) item['val'] = str(i) t0 = datetime.datetime.now() item.save() t1 = datetime.datetime.now() write_sec += (t1-t0).seconds write_microsec += (t1-t0).microseconds t0 = datetime.datetime.now() r_item = domain.get_attributes(key, None, False) #arg3をTrueにすると一貫性読み出し t1 = datetime.datetime.now() read_sec += (t1-t0).seconds read_microsec += (t1-t0).microseconds try: if int(r_item['val']) == i: read_ok += 1 else: read_badval += 1 except KeyError: read_error += 1 except TypeError: read_error += 1 print write_sec * 1000000 + write_microsec print read_sec * 1000000 + read_microsec print read_ok print read_badval print read_error
結果
区分 | 一貫性読み出しなし | 一貫性読み出し有り |
read所要時間 | 0.169秒/件 | 0.236秒/件 |
正常読み出し件数 | 329 | 1000 |
間違った値を読み出した件数 | 0 | 0 |
読み出し失敗件数 | 670 | 0 |
→元々I/Oが遅いSimpleDBだが、0.07秒程度我慢すれば、読み出しの一貫性が保証されるのは嬉しい。