gpt4 book ai didi

cassandra - 不太清楚 Cassandra 的反模式

转载 作者:行者123 更新时间:2023-12-02 20:12:26 25 4
gpt4 key购买 nike

假设有一个表,其结构如下:

create table cities (
root text,
name text,
primary key(root,name)
) with clustering order by (name asc); -- for getting them sorted

insert into cities(root,name) values('.','Moscow');
insert into cities(root,name) values('.','Tokio');
insert into cities(root,name) values('.','London');

select * from cities where root='.'; -- get'em sorted asc

当为键空间指定复制因子 3 并使用 RandomPartitioner 时,每行将在 3 个节点上有 3 个副本:由行哈希确定用于存储的主节点和 2 个下一个节点。为什么要有热点?从所有副本读取负载不平衡?

最佳答案

定义这样一个表,分区键是root,而name是集群键。顾名思义,分区负责分区——分区是如何工作的?假设您有 4 个节点的集群 - 我们有一个仅生成 8 个键的哈希函数(A、B、C、D、E、F、G、H) - 以下是哈希值在集群中的分布方式

节点 1 - (A,B)
节点 2 - (C,D)
节点 3 - (E,F)
节点 4 - (G,H)

每个节点将使用以下 2 个副本作为副本,因此节点 1 的副本是 (2,3),节点 2 的副本是 (3,4),节点 3 的副本是 (4,1),最后是节点 4 为 (1,2)。

假设我们的函数hash(root),当root值为时。返回属于节点1的B——节点1将存储信息,节点 (2,3) 将存储副本。节点 4 从不涉及到 cities 表,由于修复,它不会包含与此表相关的任何数据(不属于概念一部分的提示情况除外)分区键。在此示例中,您使用了大约 75% 的集群,这可能看起来是可以接受的情况……假设您的应用程序某一时刻因涉及的 3 个节点无法处理读/写请求而受到影响。现在,您可以向集群添加任意数量的节点,但使用此数据模型您将无法水平扩展,因为没有其他节点将参与城市表。在这种情况下,我认为解决问题的唯一方法是通过添加更多内存、更强大的 CPU 和 I/O 来增加这 3 个节点的功率(垂直扩展)。创建不允许水平缩放的架构是一种反模式

关于cassandra - 不太清楚 Cassandra 的反模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com