我正在测试一个vm上的cql/cassandra 1.2和python-cql库与2GB ram。我有一个复合索引表(宽行)。在针对单个节点运行查询时,我的性能比mysql低10倍左右。请求串行无并发性,但我对单个请求的速度感兴趣。cassandra宽行列片性能
- 最重要的是,有什么我可以做的,以优化查询宽行(特别是这个查询)?
- 这些数字是否反映了cassandra与mysql在单个请求情况下的性能?
- 难道我有限的ram/vm会使这个差异变大吗?
- 多节点cassandra /分区mysql会比10x更接近吗?
- 我在做可怕的错误吗?
测试代码:
"""
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
在此先感谢!
你的专栏家有多大? nodetool cfstats'使用的空间(实时)'的输出是最好的指标。 – Richard
*用空间(实况):31749778 *使用(总)空间:31749778 *碾压行最小尺寸:447 \t \t *碾压行最大尺寸:654949 \t \t *碾压行平均规模:68740 – user2537952
这是31 MB,所以它很容易适应缓存。那么它不能与记忆相关。这可能仅仅是因为Cassandra的读取延迟高于MySQL。吞吐量可能会更高,但您需要并发性。 – Richard