我在使用 apache cassandra 时遇到了一些麻烦。我已经尝试解决这个问题好几个星期了。
这是我的设置。我有 2 台运行 apache cassandra 的计算机(让我们称之为计算机 C1 和计算机 C2),我创建了一个复制因子为 2 的密钥空间。这样每台计算机都有一个数据的本地副本。
我有一个程序可以读取大量数据,例如大约 500MB。
场景 1)假设只有计算机 C1 正在运行 cassandra,我在计算机 C1 上运行读取程序,然后此读取发生半分钟到一分钟。
场景 2) 我现在在计算机 C2 上启动 cassandra 实例并再次在计算机 C1 上运行读取程序 - 现在需要很长时间才能完成,大约 20 分钟。
我不确定为什么会这样。读取一致性设置为“一”
预期表现
理想情况下,计算机 C1 和 C2 上的读取程序必须快速完成。这应该是可能的,因为两台计算机都有数据的本地副本。
谁能指出我正确的方向?非常感谢您的帮助,谢谢
更新:网络使用
这可能意义不大,但我使用 nethogs 监控互联网连接,当两个 cassandra 节点都启动时,我读取数据库,cassandra 使用带宽与另一个节点通信 - 大概这是在后台发生的读取修复我使用了读取一致性级别“一”,在我的情况下,具有所需数据的最近节点是本地计算机的 cassandra 实例(所有节点都有所有数据) - 所以数据源应该来自本地计算机。 .
更新:SQLTransentExceptions:TimedOutException()
然而,当两个节点都启动时,读取数据库的程序有几个 SQLTransentExceptions:TimedOutException()。我使用 10 秒的默认超时。但这引发了一个问题,即当所有数据检索都应该来自本地实例时,为什么 SQL 语句会超时。此外,如果只有一个节点启动,则相同的 SQL 代码运行良好。