scylla 读取路径和 cassandra 读取路径有什么区别?

sat*_*esh 5 cassandra scylla

Scylla 读取路径和 Cassandra 读取路径有什么区别?当我强调 Cassandra 和 Scylla 时,Scylla 读取性能比使用 16 核和普通 HDD 的 Cassandra 差 5 倍。

与使用普通 HDD 的 Cassandra 相比,我希望在 Scylla 上读取性能更好,因为我的公司不提供 SSD。

有人可以确认一下,是否可以使用普通硬盘实现更好的读取性能?

如果是,则需要哪些更改 scylla 配置?。请指导我!

Nad*_*'El 5

其他一些回答侧重于写入性能,但这不是您要问的 - 您问的是读取。

在 Cassandra 和 Scylla 中,HDD 上的未缓存读取性能肯定很差,因为从磁盘读取每个都需要在 HDD 上进行多次寻道,即使是最好的 HDD 也不能超过每秒 200 次寻道。即使使用多个这些磁盘的 RAID,您也很少能够处理超过每秒 1000 个请求。由于现代多核可以比每秒 1000 个请求执行更多数量级的 CPU 工作,因此在 Scylla 和 Cassandra 情况下,您可能会看到空闲 CPU。因此,Scylla 的主要好处,每个请求使用更少的 CPU,甚至在磁盘是性能瓶颈时都无关紧要。在这种情况下,我希望 Scylla 和 Cassandra 的性能(我假设您在谈论性能时正在测量吞吐量?)应该大致相同。

如果您仍然看到 Cassandra 的吞吐量比 Scylla 更好,那么除了其他响应中提出的一般客户端错误配置问题之外,还有几个细节可以解释原因:

  1. 如果您的数据量很少,可以放入内存中,那么 Cassandra 的缓存策略更适合您的工作负载。Cassandra 使用操作系统的页面缓存,它读取整个磁盘页面,并且可以在一次读取中缓存多个项目,以及多个索引条目。虽然 Scylla 的工作方式不同,但具有行缓存 - 仅缓存读取的特定数据。Scylla 的缓存对于无法放入内存的大量数据更好,但当数据可以放入内存时则更糟,直到整个数据集都被缓存(在所有数据都被缓存后,它再次变得非常高效)。

  2. 在 HDD 上,压缩的细节对于读取性能非常重要 - 如果在一种设置中您有更多的 sstable 可供读取,它会增加读取次数并降低性能。这可以根据您的压缩配置,甚至随机(取决于上次运行压缩的时间)而改变。您可以通过在两个系统上进行主要压缩(“nodetool compact”)并随后检查读取性能来检查这是否解释了您的性能问题。您可以将压缩策略切换到 LCS 以确保随机访问读取性能更好,但代价是更多的写入工作(在 HDD 上,这可能是一个值得的妥协)。

  3. 如果您正在测量扫描性能(读取整个表)而不是读取单个行,则其他问题变得相关:您可能听说过,Scylla 将每个节点细分为分片(每个分片是单个 CPU)。这对于受 CPU 限制的工作来说非常棒,但对于扫描不是很大的表来说可能更糟,因为每个 sstable 现在更小,并且您在需要再次查找之前可以读取的连续数据量更低。

我不知道这些差异中的哪一个 - 或其他什么 - 导致您的用例在 Scylla 中的性能较低,但我请记住,无论您修复什么,硬盘驱动器的性能总是会很差。使用 SDD,我们过去在单个节点上测得每秒超过一百万次随机访问读取请求。硬盘驱动器无法接近。如果您真的需要最佳性能或每美元性能,SDD 确实是您的最佳选择。


Tom*_*San 3

您无法充分利用 Scylla Cluster 的原因可能有多种。

  1. 来自您的客户端/加载程序的并发连接数不够高,或者您没有使用足够数量的加载程序。在这种情况下,一些分片将完成所有工作,而其他分片则大部分闲置。您希望保持较高的并行度。

  2. Scylla likes 每个分片至少有 2 个连接(您可以在 中查看分片数量/etc/scylla.d/cpuset.conf

  3. 您的数据集有多大?您正在读取大量分区还是仅读取几个分区?您可能遇到热分区情况

我强烈建议您阅读以下文档,它们将为您提供更多见解: