Google Cloud SQL性能測試
- CREATE DATABASE test;
- USE test;
- CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT,
- value DOUBLE, PRIMARY KEY(id));
然后在綁定的一個HR datastore應(yīng)用上測試:
- 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
結(jié)果:
0.00699996948242
3.8259999752
0.00500011444092
0.235999822617
0.205000162125
0.0639998912811
0.00300002098083可見連接和關(guān)閉數(shù)據(jù)庫還是很快的,但是插入和查詢性能并不算好。
接著試試提交:
- 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
結(jié)果:
3.3180000782
0.132999897003可能是測試的波動,插入變快了。比較讓我奇怪的是刪除,居然比查詢還快。
再試了下清空表,即改成cursor.execute('TRUNCATE test')。結(jié)果:
2.96399998665
0.128000020981這次插入更快了,不解…
值得一提的是,我在刪除的時候?qū)戝e了SQL語句,結(jié)果報(bào)錯了。然后再次刪除就一直被鎖,但是查詢和插入都正常,估計(jì)是那個事務(wù)一直沒結(jié)束。
最后我試了下TRUNCATE,花了22秒終于成功了。之后再測試時,即使出錯也沒遇到被鎖的情況了,非常奇怪…
然后對比測試HR datastore,使用同一個應(yīng)用:
- 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
結(jié)果:
3.31100010872
0.0799999237061
0.208999872208
2.34000015259
0.861999988556其中count和查詢慢了一個數(shù)量級,刪除慢約6倍,插入和查詢key則差不多。
接著又在一個MS datastore的應(yīng)用上測試了下,結(jié)果是:
1.04965305328
0.109894037247
0.0680358409882
0.660396099091
0.251960992813插入快2倍,查詢慢一個數(shù)量級,其他差不多。
對大多數(shù)應(yīng)用來說,查詢性能是最重要的,這一個數(shù)量級的提升也是很有益處的,更何況還少了很多限制。所以如果不需要ORM的話,用Google Cloud SQL取代Datastore是個不錯的選擇。
【編輯推薦】