Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra集群能否替代内存中的Redis键值存储?_Cassandra_Datastax_Datastax Enterprise_Key Value Store_Nosql - Fatal编程技术网

Cassandra集群能否替代内存中的Redis键值存储?

Cassandra集群能否替代内存中的Redis键值存储?,cassandra,datastax,datastax-enterprise,key-value-store,nosql,Cassandra,Datastax,Datastax Enterprise,Key Value Store,Nosql,我的应用程序抓取用户的邮箱并将其保存到RDBMS数据库中。我开始使用Redis作为RDBMS数据库的缓存(简单键值存储)。但渐渐地,我开始在Redis中存储爬虫状态和其他需要持久化的数据。丢失这些数据意味着几小时的停机时间。我必须确保这些数据的严密一致性。数据不应在节点故障或大脑分裂情况下丢失。必须有很强的一致性。切分由我的应用程序完成。十个EC2 m4.1大型实例中的每一个都运行一个Redis进程。在每一个实例上。我对Redis的IOPS高达20K。我写的比读的多,虽然我还没有确定两者的实际百

我的应用程序抓取用户的邮箱并将其保存到RDBMS数据库中。我开始使用Redis作为RDBMS数据库的缓存(简单键值存储)。但渐渐地,我开始在Redis中存储爬虫状态和其他需要持久化的数据。丢失这些数据意味着几小时的停机时间。我必须确保这些数据的严密一致性。数据不应在节点故障或大脑分裂情况下丢失。必须有很强的一致性。切分由我的应用程序完成。十个EC2 m4.1大型实例中的每一个都运行一个Redis进程。在每一个实例上。我对Redis的IOPS高达20K。我写的比读的多,虽然我还没有确定两者的实际百分比。我所有的数据都完全在内存中,没有磁盘支持

我唯一的问题是这些实例中的每一个都是SPOF。我不能使用Redis cluster,因为它不能保证一致性。我还评估了其他一些工具,如Aerospike,没有一个提供“无数据丢失保证”

卡桑德拉看起来很有希望,因为我可以调整我想要的一致性级别。我计划使用复制因子为2的Cassandra,在考虑提交之前,必须向两个副本写入数据。这使得“无数据丢失保证”

通过启动足够多的cassandra节点(支持ssd),我可以替换我的Redis键值存储,并且仍然可以获得类似的读/写IOPS和 延迟开源cassandra能满足我的用例吗?如果不是,Datastax企业内存版会解决这个问题吗

编辑1:
有点澄清:
我认为我需要使用写一致性级别“ALL”和读一致性级别“One”。我知道,有了这个一致性级别,我的集群将无法容忍任何故障。对我来说没关系。只要我的数据是一致的,偶尔几分钟的停机时间不是问题。在我目前的设置中,一个Redis实例失败会导致几个小时的停机

我必须确保这些数据的严密一致性

当有更多节点时,Cassandra可以更好地处理故障。假设您的案例允许有更多节点,这是我的建议

因此,如果您有5个节点,则对读和写都使用仲裁的CL。这意味着您总是至少向3个节点写入数据,并从3个节点读取数据。(对于5个节点,仲裁为3)

  • 这确保了非常高级别的一致性
  • 还可以确保有限的停机时间。即使节点关闭,您的写入和读取也不会中断
如果您使用CL ALL,那么即使一个节点出现故障或过载,您也必须完全停机

我希望有帮助

我必须确保这些数据的严密一致性

当有更多节点时,Cassandra可以更好地处理故障。假设您的案例允许有更多节点,这是我的建议

因此,如果您有5个节点,则对读和写都使用仲裁的CL。这意味着您总是至少向3个节点写入数据,并从3个节点读取数据。(对于5个节点,仲裁为3)

  • 这确保了非常高级别的一致性
  • 还可以确保有限的停机时间。即使节点关闭,您的写入和读取也不会中断
如果您使用CL ALL,那么即使一个节点出现故障或过载,您也必须完全停机


我希望有帮助

如果“必须具有强一致性”,则必须使用串行一致性,这会带来额外的性能损失。我计划使用写入一致性级别“ALL”和读取一致性级别“One”。这将为单行提供最终一致性。它不提供隔离,也不允许跨多个表进行一致的更改。如果“必须具有强一致性”,则必须使用串行一致性,这会带来额外的性能损失。我计划使用写入一致性级别“ALL”和读取一致性级别“One”。这将为单行提供最终一致性。它不提供隔离,也不允许跨多个表进行一致的更改。