- CREATE DATABASE test;
- USE test;
- CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT,
- value DOUBLE, PRIMARY KEY(id));
然后在绑定的一个HR datastore应用上测试:
- from random import randomfrom time import timefrom google.appengine.api import rdbmsrand = [(random(),)
- for i in xrange(500)]
- t = time()
- conn = rdbms.connect(instance='keakon:test', database='test')prin
- t time()
- - tcursor = conn.cursor()
- t = time()
- cursor.executemany('INSERT INTO test (value) VALUES (%s)', rand)
- print time() - t
- t = time()
- cursor.execute('SELECT count(*) FROM test')print time() - t
- t = time()
- cursor.execute('SELECT id FROM test')print time() - t
- t = time()
- cursor.execute('SELECT *
- FROM test')print time()- t
- t = time()
- conn.rollback()prin
- t time() - t
- t = time()
- cursor.close()conn.close()prin
- t time() - t
结果:
0.00699996948242
3.8259999752
0.00500011444092
0.235999822617
0.205000162125
0.0639998912811
0.00300002098083可见连接和关闭数据库还是很快的,但是插入和查询性能并不算好。
接着试试提交:
- t = time()
- cursor.executemany('INSERT INTO test (value)
- VALUES (%s)', rand)conn.commit()print time() - t
- t = time()
- cursor.execute('DELETE FROM test')conn.commit()print time() - t
结果:
3.3180000782
0.132999897003可能是测试的波动,插入变快了。比较让我奇怪的是删除,居然比查询还快。
再试了下清空表,即改成cursor.execute('TRUNCATE test')。结果:
2.96399998665
0.128000020981这次插入更快了,不解…
值得一提的是,我在删除的时候写错了SQL语句,结果报错了。然后再次删除就一直被锁,但是查询和插入都正常,估计是那个事务一直没结束。
最后我试了下TRUNCATE,花了22秒终于成功了。之后再测试时,即使出错也没遇到被锁的情况了,非常奇怪…
然后对比测试HR datastore,使用同一个应用:
- from random import random
- from time import time
- from google.appengine.ext import db
- class Test(db.Model):
- value = db.FloatProperty()
- entites = [Test(value=random()) for i in xrange(500)]
- t = time()
- db.put(entites)prin
- t time() - t
- t = time()Test.all().count(None)print time() - t
- t = time()
- keys = Test.all(keys_only=True).fetch(500)print time() - t
- t = time()
- Test.all().fetch(500)print time() - t
- t = time()
- db.delete(keys)print time() - t
结果:
3.31100010872
0.0799999237061
0.208999872208
2.34000015259
0.861999988556其中count和查询慢了一个数量级,删除慢约6倍,插入和查询key则差不多。
接着又在一个MS datastore的应用上测试了下,结果是:
1.04965305328
0.109894037247
0.0680358409882
0.660396099091
0.251960992813插入快2倍,查询慢一个数量级,其他差不多。
对大多数应用来说,查询性能是最重要的,这一个数量级的提升也是很有益处的,更何况还少了很多限制。所以如果不需要ORM的话,用Google Cloud SQL取代Datastore是个不错的选择。
【编辑推荐】