假设有一个具有以下结构的表:
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
Run Code Online (Sandbox Code Playgroud)
当为键空间指定复制因子3并使用RandomPartitioner时,3个节点上每行将有3个副本:主节点确定用于存储行的散列和2个下一个散列.为什么要有热点?从所有副本读取不是负载平衡?
定义这样的表,分区键是rootwhile,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),当根值是属于节点1的.返回时B- 节点1将存储信息,节点(2,3)将存储副本.节点4 永远不会涉及cities表,因为修复分区键,它不会包含任何有关此表的数据(对于不属于概念的提示情况的例外情况).在这个例子中,您使用了大约75%的集群,这可能看起来像是一个可接受的情况......让我们说,您的应用程序会在一瞬间受到影响,因为涉及的3个节点无法处理读/写请求.现在,您可以根据需要向群集添加任意数量的节点,但使用此数据模型将无法水平扩展,因为其他任何节点都不会被包含到城市中.在这种情况下,我看到解决问题的唯一方法是通过添加更多内存,更强大的CPU和I/O来增加这3个节点的功率(垂直缩放).创建不允许水平扩展的模式是一种反模式
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |