【问题标题】:cassandra read performance for large number of keyscassandra 读取大量键的性能
【发布时间】:2012-05-31 20:43:27
【问题描述】:

情况如下

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

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

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

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

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

【问题讨论】:

  • 你能说明你的数据模型吗?并针对它进行读写模式?因为评论会更有意义

标签: cassandra phpcassa


【解决方案1】:

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

【讨论】:

  • 在我们的例子中,超级列只包含 5 列。我认为它的数量非常少。
  • 我认为你的问题是你试图获得很多列 - 一次 10k。而且 10k 列 x 300 超级列 x 10 根本不是一个小数字。我可以建议的是获得 10 次 x 1000 行,看看它是否会更快。
【解决方案2】:

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

使用 C 扩展

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

你需要配置和make才能使用C扩展。

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

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

extension=thrift_protocol.so

【讨论】:

    【解决方案3】:

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

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

    2) JVM 在 8-10 GB 时运行最佳(没有数字来证明这一点。只是观察)。

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

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

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

    希望以上信息有用。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2023-03-27
      • 1970-01-01
      • 2020-01-26
      • 2016-08-16
      • 2015-09-03
      • 2015-02-07
      • 2016-01-05
      • 2019-04-14
      相关资源
      最近更新 更多