GAEのDataStoreは遅い?

木曜日, 2月 17th, 2011 by

GoogleDataStoreは遅いといわれることが多いので、簡単にベンチマークを取ってみた。

測定方法

1000バイトの文字列と、5000倍バイトの文字列を、100回保存するのにかかる時間を測定した。バラつきを見るために、それぞれ10回ずつ計測した。

測定結果

各行は、指定長さの文字列をDataStoreに100個保存する処理の所要時間(秒)です。

1000バイト

1
2
3
4
5
6
7
8
9
10
2.015
2.058
2.050
2.019
2.150
1.720
1.836
1.962
1.923
1.690

5000バイト

1
2
3
4
5
6
7
8
9
10
1.746
1.874
1.727
1.854
1.986
1.827
2.376
1.890
2.383
5.054

まとめ

1000バイトの場合も、5000バイトの場合も、データの保存にかかる時間はほぼ20msである。1個~数個程度のデータを保存する場合は問題にならないが、100件で2秒、1000件で20秒かかってし0まう。CSVのインポート機能などはTaskqueueを使って実装すべきだといえる。

ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from google.appengine.ext import webapp,db
from google.appengine.ext.webapp import util
import datetime

class MainHandler(webapp.RequestHandler):
    def get(self):
        count = 10 # Default number of trials
        size = 100 # Default string length
        if self.request.get("count"):
            count = int(self.request.get("count"))
        if self.request.get("size"):
            size = int(self.request.get("size"))
        for j in xrange(10):
            start_time = datetime.datetime.now()
            for i in xrange(count):
                BenchData(text = "x" * size).put()
            timediff = datetime.datetime.now() - start_time
            self.response.out.write("%0.3f<br>" % (timediff.microseconds / 1000000.0 + timediff.seconds))

def main():
    application = webapp.WSGIApplication([('/', MainHandler)],
                                         debug=True)
    util.run_wsgi_app(application)

class BenchData(db.Model):
    text_data = db.TextProperty()

if __name__ == '__main__':
    main()

Facebook comments:

comments

Leave a Reply


Get Adobe Flash player
single