当复制因子==群集大小时,Cassandra分区如何工作? 背景:
我对卡桑德拉还不熟悉,但我仍在努力将我的思想集中在内部工作上 我正在考虑在一个只有有限数量节点(少于10个,通常是3个)的应用程序中使用Cassandra。理想情况下,集群中的每个节点都有所有应用程序数据的完整副本。因此,我正在考虑将复制因子设置为集群大小。当添加其他节点时,我会更改键空间以增加复制因子设置(nodetool repair以确保它获得必要的数据) 我将使用NetworkTopologyStrategy进行复制,以利用有关数据中心的知识 在这种情况下,分区实际上是如何工作的?我在Cassandra中读过关于节点和分区键组合形成环的内容。如果我的所有节点都“负责”每段数据,而不考虑分区器计算的哈希值,那么我是否只有一个分区键环 这种卡桑德拉部署会有巨大的失败吗?我猜,当数据传播到每个节点时,会有很多异步复制在后台进行,但这是设计目标之一,所以我同意 读取的一致性级别通常可能是“一”或“本地” 写操作的一致性级别通常为“2” 要回答的实际问题:当复制因子==群集大小时,Cassandra分区如何工作? 背景:,cassandra,replication,partitioning,distributed-system,Cassandra,Replication,Partitioning,Distributed System,我对卡桑德拉还不熟悉,但我仍在努力将我的思想集中在内部工作上 我正在考虑在一个只有有限数量节点(少于10个,通常是3个)的应用程序中使用Cassandra。理想情况下,集群中的每个节点都有所有应用程序数据的完整副本。因此,我正在考虑将复制因子设置为集群大小。当添加其他节点时,我会更改键空间以增加复制因子设置(nodetool repair以确保它获得必要的数据) 我将使用NetworkTopologyStrategy进行复制,以利用有关数据中心的知识 在这种情况下,分区实际上是如何工作的?我在C
这取决于驱动程序的负载平衡策略。通常我们会选择令牌感知策略(假设您使用的是一个Datastax驱动程序),在这种情况下,请求会自动路由到主副本。您可以在您的案例中使用循环,并具有相同的效果。主要的问题是,在添加节点时,协调器级别的写入成本会增加。我所看到的最大写入副本数约为8个(其他数据中心为5个,本地副本为3个) 实际上,这意味着在执行大型或批处理写入(大于1mb)或较低的每节点写入TPS时,稳定性会降低 主要的优势是你可以做很多通常很糟糕而且不可能做的事情。要使用二级索引吗?可能会工作得相当好(假设基数和分区大小不会成为瓶颈)。想要添加一个自定义UDF,该自定义UDF可以执行GroupBy操作,或者在查询中使用非常大的查询,这可能会奏效 正如@Phact所提到的,这不是一种常见的使用模式,我主要看到它与DSE搜索一起用于低写吞吐量的用例,这些用例需要Solr的“单节点”功能,但是对于那些使用纯Cassandra的相同用例,您将在读取端获得一些好处,并且能够执行在更分布式的集群中通常不可能完成的昂贵查询