1

这是情况

我正在尝试从 CF 获取大约 10k 个密钥。集群大小:10 个节点节点上的数据:250 GB 分配的堆:12 GB 使用的 Snitch:属性 snitch,在同一个数据中心有 2 个机架。不。每个节点 cf 的 sstables 数:大约 8 到 10

我是超列方法。每行包含大约 300 个超列,其中包含 5-10 列。我正在使用 10k 行键和 1 个超列触发 multiget。

当第一次触发调用时,大约需要 30 到 50 秒才能返回结果。之后 cassandra 会从密钥缓存中提供数据。然后它会在 2-4 秒内返回结果。

所以 cassandra 读取性能阻碍了我们的项目。我正在使用 phpcassa。有什么办法可以调整 cassandra 服务器以便更快地获得结果?

超级列方法会影响读取性能吗?

4

3 回答 3

1

超级列的使用最适合子列数量相对较少的用例。在此处阅读更多信息: http ://www.datastax.com/docs/0.8/ddl/column_family

于 2012-05-25T09:07:49.147 回答
0

以防万一您还没有这样做,因为您使用的是 phpcassa 库,请确保您已经编译了 Thrift 库。根据 phpcassa 库文件夹中的“INSTALLING”文本文件:

使用 C 扩展

C 扩展对 phpcassa 的性能至关重要。

您需要配置和制作才能使用 C 扩展。

cd thrift/ext/thrift_protocol
phpize
./configure
make
sudo make install

将以下行添加到您的 php.ini 文件中:

extension=thrift_protocol.so
于 2012-06-01T16:44:37.053 回答
0

在对这些东西做了很多 RND 之后,我们认为没有办法让这个工作达到最佳状态。当 cassandra 第一次获取这 10k 行时,这将需要时间,并且没有办法对此进行优化。

1) 然而在实际中,人们访问相同记录的概率更大。所以我们最大限度地利用了密钥缓存。密钥缓存的默认设置是 2 MB。因此,我们可以负担得起将其增加到 128 MB,而不会出现内存问题。加载数据后,运行预期的查询以预热密钥缓存。

2) JVM 在 8-10 GB 时最佳工作(没有数字来证明它。只是观察)。

3)最重要的是,如果您使用的是物理机(不是云或虚拟机),那么请检查您正在使用的磁盘调度程序。将其设置为 NOOP,这对 cassandra 有好处,因为它从一个部分读取所有密钥,从而减少了磁盘头的移动。

上述更改有助于将查询所需的时间缩短到可接受的范围内。

如果您有体积小但经常访问的 CF,则除了上述更改之外,还可以为其启用行缓存。

希望以上信息有用。

于 2012-11-01T04:53:04.617 回答