首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >卡桑德拉宽行列切片性能

卡桑德拉宽行列切片性能
EN

Stack Overflow用户
提问于 2013-07-01 06:47:14
回答 1查看 2.1K关注 0票数 0

我正在用2GB内存在vm上测试cql/cassandra 1.2和python库。我有一张带有复合索引(宽行)的表。当对单个节点运行查询时,我的性能比mysql差大约10倍。请求是串行的,没有并发性,但我对单个请求的速度感兴趣。

  • 最重要的是,我能做些什么来优化查询宽行(特别是这个查询)吗?
  • 这些数字是否反映了在单个请求情况下cassandra与mysql的性能?
  • 我有限的ram/vm会不会有这么大的不同?
  • 多节点cassandra /分区mysql会比10倍更近吗?
  • 我是不是做了什么可怕的错事?

测试代码:

代码语言:javascript
运行
复制
"""
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

提前谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2013-07-01 15:25:35

通过启用行缓存,您可能会获得更快的速度。将row_cache_size_in_mb在cassandra.yaml中设置为比CF大小更大的东西,这样100就可以工作了。然后为列家族设置caching = 'all'。正如您所读到的,您应该看到nodetool info报告的命中率增加。

然而,我怀疑你会得到任何类似10倍的速度。

问题是,Cassandra (特别是reads)是为高吞吐量而不是低延迟构建的。卡桑德拉内部有许多队列,这增加了延迟。添加更多的节点将进一步增加延迟(但远远超出复制因子的节点数量的增加不应进一步增加延迟),而是对吞吐量进行了近似线性的改进。

解决方案是使用并发性:在单个客户端或多个客户端中使用队列、线程和多个连接。但是,如果在用例中这是不可能的,我希望MySQL在这种读取中会更快。实际上,如果您只期望拥有31 MB的数据,那么MySQL可能会更适合您的用例。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17398778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档