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() |