我正在測試一個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