Aerospike热键错误

时间:2016-04-16 05:02:49

标签: aerospike

根据这个link,我知道当同一个密钥的并发操作请求太多时会发生热键错误。

我目前的情况:

我有一条记录,每隔5-10秒就会更新一次,我会有大约20台机器,每台机器每秒10K查询,试着读取该记录

  • 问题1:仅当存在并发更新事务时才会发生热键错误,或者并发读取也会发生?
  • 问题2:上述链接中提到的事务挂起限制是集群中的每个节点还是整个集群限制?
  • 问题3:根据我的阅读,我们不应该增加事务挂起限制,因为它会影响性能,你能告诉我一些性能数据要比较吗?什么是可用于transaction-pending-limit的最大值?
  • 问题4:除了缓存服务器中的记录外,我的方案是否有任何解决方法而不影响性能?

2 个答案:

答案 0 :(得分:5)

1-读取/更新。

2-每节点。所有事务都将转到保存该记录的主分区以进行更新的节点,并且对于读取它还将转到保存该记录的主分区的节点,除非您有一个客户端策略也从保存副本分区的节点读取

3-很难给出数字。它将导致更多客户端连接到热键所在的节点,这反过来会降低性能,具体取决于设置。

4-如果用例允许,最简单的方法是使用只读副本客户端策略来缓解主副本分区的读取。否则,创建多个键。

答案 1 :(得分:1)

根据您的问题详细信息,您是说有20台服务器,每台服务器每次查询10k次/秒?

我们将transaction-pending-limit设置为0以删除待处理操作的限制,并且能够在内存中的相同密钥上执行大约30k操作/秒。如果您希望拥有200k ops / sec,则可以使用具有更多节点的群集,并使用read-from-replica设置来获取吞吐量。

如果记录仅每5-10秒更改一次,那么为什么不每秒读取一次记录并将结果缓存到您的应用程序中?即使它是不同的密钥,您的应用程序中的智能缓存也将大大减少所需的操作和网络流量,并使您的系统更好地扩展。这是最好的选择。