这是情况
我正在尝试从CF获取大约10k的密钥。 集群大小:10个节点 节点上的数据:250 GB 分配的堆:12 GB Snitch使用:属性告密者在同一数据中心有2个机架。 没有。 sstables for cf per node:大约8到10
我是超级列的方法。每行包含大约300个超级列,其中包含5-10列。我正在使用10k行键和1个超级列来激活多列。
当第一次触发呼叫时,大约需要30到50秒才能返回结果。之后,cassandra会从密钥缓存中提供数据。然后它会在2-4秒内返回结果。
所以cassandra读取性能阻碍了我们的项目。我正在使用phpcassa。我有什么方法可以调整cassandra服务器以便我可以更快地获得结果吗?
超级列方法会影响读取性能吗?
答案 0 :(得分:1)
超级列的使用最适合于子列数相对较少的用例。在这里阅读更多: http://www.datastax.com/docs/0.8/ddl/column_family
答案 1 :(得分:0)
如果你还没有这样做,因为你正在使用phpcassa库,请确保你已经编译了Thrift库。根据phpcassa库文件夹中的“INSTALLING”文本文件:
C扩展对于phpcassa的性能至关重要。
您需要配置并使其能够使用C扩展名。
cd thrift/ext/thrift_protocol
phpize
./configure
make
sudo make install
将以下行添加到php.ini文件中:
extension=thrift_protocol.so
答案 2 :(得分:0)
在做了很多关于这个东西的RND之后,我们认为你无法让这种方式最佳地发挥作用。 当cassandra第一次获取这些10k行时,需要花费时间并且没有办法优化它。
1)然而在实际中,人们访问相同记录的概率更高。因此我们最大限度地利用密钥缓存。密钥缓存的默认设置为2 MB。所以我们可以将它增加到128 MB而没有内存问题。 加载数据后,运行预期的查询以预热密钥缓存。
2)JVM最佳工作在8-10 GB(没有数字来证明它。只是观察)。
3)最重要的是如果你使用的是物理机(不是云或虚拟机),那么请检查你正在使用的磁盘调度程序。设置NOOP这对cassandra是好的,因为它从一个部分读取所有键减少磁盘头运动。
以上更改有助于缩短查询所需的时间。
除了上述更改之外,如果您的CF大小较小但经常访问,则会为其启用行缓存。
希望以上信息很有用。