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秒程度我慢すれば、読み出しの一貫性が保証されるのは嬉しい。