我正在使用 2GB 内存的 vm 上测试 cql/cassandra 1.2 和 python-cql 库。我有一个带有复合索引(宽行)的表。当对单个节点运行查询时,我的性能比 mysql 差 10 倍。请求是串行的,没有并发,但我对单个请求的速度感兴趣。
- 最重要的是,我可以做些什么来优化查询宽行(特别是这个查询)?
- 这些数字是否反映了单个请求情况下 cassandra 与 mysql 的性能?
- 我有限的 ram/vm 能有这么大的不同吗?
- 多节点 cassandra / 分区 mysql 会接近 10 倍吗?
- 我做错了什么可怕的事情吗?
测试代码:
"""
CREATE TABLE foo_bars (
foo_id text,
bar_id bigint,
content text,
PRIMARY KEY (foo_id, bar_id)
)
WITH CLUSTERING ORDER BY (bar_id DESC);
"""
#content is up to 64k text and te number of bar columns in a foo row will be ever growing but will probably never reach over 2million
t1 = time.time()
for i in range(1, 1000):
sql_query = "SELECT * FROM foo_bars WHERE foo_id IN(%s) ORDER BY id DESC LIMIT 40" % random_foo_ids
result = db_cursor.execute(sql_query)
t2 = time.time()
print "Sql time = %s" % str(t2 - t1)
t1 = time.time()
for i in range(1, 1000):
cql_query = "SELECT * FROM foo_bars WHERE foo_id IN(%s) LIMIT 40" % radom_foo_ids
result = cassandra_cursor.execute(cql_query)
t2 = time.time()
print "Cql time = %s" % str(t2 - t1)
Sql time = 4.2
Cql time = 58.7
提前致谢!