cassandra 分片和复制

2023-11-27

我是 Cassandra 的新手,不过本文解释分片和复制,我陷入了一个困境 -

我的本地计算机上配置了一个包含 6 个 Cassandra 节点的集群。我创建一个新的键空间“TestKeySpace”,复制因子为 6,并在键空间“employee”中创建一个表,主键是名为 RID 的自动递增编号。 我无法理解这些数据将如何分区和复制。我想知道的是,由于我将复制因子保持为 6,并且数据将分布在多个节点上,那么每个节点是否将具有与其他节点完全相同的数据?

如果我的集群具有以下配置怎么办 -

    Number of nodes - 6 (n1, n2 ,n3, n4, n5 and n6).
    replication_factor - 3. 

我如何确定对于任何一个节点(假设为 n1),数据被复制到哪两个其他节点以及哪些其他节点表现为不同的分片。

提前致谢。

问候, 维巴夫

PS - 如果有人否决了这个问题,请在评论中提及出了什么问题。


我将用简单的例子来解释这一点。 cassandra 中的键空间相当于 RDBMS 中的数据库模式名称。

首先创建一个键空间 -

CREATE KEYSPACE MYKEYSPACE WITH REPLICATION = { 
 'class' : 'SimpleStrategy', 
 'replication_factor' : 3 
};

让我们创建一个简单的表 -

CREATE TABLE USER_BY_USERID(
 userid int,
 name text,
 email text,
 PRIMARY KEY(userid, name)
) WITH CLUSTERING ORDER BY(name  DESC);

在这个例子中,userid是您的分区键,名称是集群键。分区也称为行键,该键决定行将保存在哪个节点上。

你的第一个问题——

我无法理解这些数据将如何分区?

数据将根据您的分区键进行分区。默认情况下 C* 使用Murmur3partitioner。您可以在 cassandra.yaml 配置文件中更改分区程序。分区如何发生也取决于您的配置。您可以为每个节点指定令牌范围,例如查看下面的 cassandra.yaml 配置文件。我已经从你的问题中指定了 6 个节点。

节点 0 的 cassandra.yaml:

cluster_name: 'MyCluster'
initial_token: 0
seed_provider:
    - seeds:  "198.211.xxx.0"
listen_address: 198.211.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch

节点 1 的 cassandra.yaml:

cluster_name: 'MyCluster'
initial_token: 3074457345618258602
seed_provider:
    - seeds:  "198.211.xxx.0"
listen_address: 192.241.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch

节点 2 的 cassandra.yaml:

cluster_name: 'MyCluster'
initial_token: 6148914691236517205
seed_provider:
    - seeds:  "198.211.xxx.0"
listen_address: 37.139.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch

......节点3 ......节点4 ......

节点 5 的 cassandra.yaml:

cluster_name: 'MyCluster'
initial_token: {some large number}
seed_provider:
    - seeds:  "198.211.xxx.0"
listen_address: 37.139.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch

让我们看一下这个插入语句 -

INSERT INTO USER_BY_USERID VALUES(
 1,
 "Darth Veder",
 "[email protected]"
);

分区器将计算 PARTITION 键的哈希值(在上面的示例中为 userid - 1),并决定该行将保存在哪个节点。假设计算出的哈希值是 12345,该行将保存在节点 0 上(在上面的配置中查找 Node0 的initial_token 值)。

完整的cassandra.yaml配置配置Cassandra_yaml_r

你可以通过这个部署CalcTokens了解如何生成令牌。

第二个问题——

数据如何复制?

根据您的复制策略和复制因子,数据将在每个节点上复制。创建键空间时必须指定复制因子和复制策略。 例如,在上面的例子中,我使用了SimpleStrategy作为复制策略。该策略适合小型集群。对于地质分布式应用程序,您可以使用NetworkTopologyStrategy。 replication_factor 指定要创建一行的多少个副本,在本例中,每行将创建三个副本。通过简单的策略,cassandra 将使用顺时针方向复制行。

在上面的示例中,该行保存在 Node0 上,并且同一节点被复制到 Node1 和 Node2 上。 我们再举一个例子——

INSERT INTO USER_BY_USERID VALUES(
 448454,
 "Obi wan kenobi",
 "[email protected]"
);

对于用户 id 448454,计算出的哈希值是 3074457345618258609,因此该行将保存在 Node2 上(在上面的配置中查找节点 2 的initial_token 值),并按顺时针方向复制到 Node3 和 Node4(记住我们已经指定了复制)因子为 3,因此只有三个副本(Noe2、Node3、Node4)。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cassandra 分片和复制 的相关文章

  • 如何理解Cassandra中的“灵活模式”?

    我是 Cassandra 的新手 可以在下面的维基百科中找到 列族 自 CQL 3 起称为 表 类似于 RDBMS 关系数据库管理系统 中的表 列族包含行和列 每行都由行键唯一标识 每行有多列 每列都有名称 值和时间戳 与 RDBMS 中的
  • NoSQL:如何根据经纬度检索“房子”?

    我有一个用于存储房地产的 NoSQL 系统 我在每栋房子的键值存储中拥有的一条信息是longitude and latitude 如果我想检索地理纬度 经度框中的所有房屋 如下面的 SQL SELECT from houses WHERE
  • 从 C* 表中获取不同的分区键

    cqlsh 不允许嵌套查询 因此我无法将所选数据导出到 csv 我正在尝试使用以下命令从 cassandra 导出选定的数据 大约 200 000 行 单列 echo SELECT distinct imei FROM listener s
  • 从只读 couchdb 复制

    我有一台服务器 其中包含一个 couchdb 数据库 其中包含我的应用程序所需的信息 它包含几兆字节的内容 一些每天都会变化的文档 添加最新新闻 删除旧文档 更新一些文档 应用程序会尽可能与服务器数据库同步 以便离线使用此信息 然而 这些信
  • 使用 pycassa 读取 Cassandra 1.2 表

    使用卡桑德拉 1 2 我按以下方式使用 CQL 3 创建了一个表 CREATE TABLE foo user text PRIMARY KEY emails set
  • Apache Cassandra 如何进行聚合操作?

    总的来说 我对 Apache Cassandra 和 nosql 相当陌生 在 SQL 中 我可以执行聚合操作 例如 SELECT country sum age count AS averageAge FROM people GROUP
  • Cassandra 集群 - 特定节点 - 特定表高丢弃突变

    我在生产中的压缩策略是 LZ4 压缩 但我将其修改为 Deflate 对于压缩更改 我们必须使用 nodetool Upgradesstables 强制升级所有 sstable 上的压缩策略 但是 一旦在集群中的所有 5 个节点上完成了 U
  • 删除键空间挂起

    问题 drop keyspace MyKeyspace hangs 环境 这是 virtualbox 中的 Ubuntu 12 04 64 位 运行单个 Cassandra 实例 在开发计算机上 卡桑德拉是 1 1 6 myuser myh
  • Cassandra:如何将整个表移动到另一个键空间

    我的 Cassandra 的版本信息 cqlsh 5 0 1 卡桑德拉 2 2 5 CQL 规范 3 3 1 本机协议 v4 我正在尝试将一些巨大的表 几百万行 移动到另一个键空间 除了 COPY to csv and COPY from
  • 如何使用 javascript 从 UUID v1 (TimeUUID) 中提取时间戳?

    我使用 Cassandra DB 和 Nodejs 的 Helenus 模块来操作它 我有一些包含 TimeUUID 列的行 如何在javascript中从TimeUUID获取时间戳 这个库 UUID 至今 https github com
  • Apache Nifi/Cassandra - 如何将 CSV 加载到 Cassandra 表中

    我每天都会收到多次传入的各种 CSV 文件 存储来自传感器的时间序列数据 这些传感器是传感器站的一部分 每个 CSV 均以其来源的传感器站和传感器 ID 命名 例如 station1 sensor2 csv 目前 数据存储如下 gt cat
  • 非二级索引查询尚不支持非主键列(事件类型)上的 Cassandra 谓词

    我开发了一个如下所示的表 其中主键为id 它是一个uuid类型 id date eventtype log password priority sessionid sourceip user useragent
  • 设计 Cassandra 数据模型的最佳实践是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 以及需要避免哪些陷阱 您有任何交易中断吗 例如 我听说导出 导入 Cassandra 数据非常困难 这让我想知道这是否会妨碍将生产数据
  • Cassandra CAS INSERT 对于具有毫秒延迟的请求超时

    我们正在对 cassandra 集群 3 个节点 复制因子 3 进行负载测试 并开始偶尔接收到写入超时异常对于一张表上的 CAS 插入操作 CREATE TABLE users by identity account ascii domai
  • 本地 Postgres 实例和 Azure Cloud Postgres 实例之间的实时同步

    我需要在本地 postgresql 实例与云 postgresql 实例之间设置实时同步过程 请让我知道我可以通过哪些选项来实现它 我是否必须使用任何特定工具或者可以通过复制进行管理 请指教 使用 PgPool http www pgpoo
  • pymongo复制辅助读取引用不起作用

    我们有 MongoDB 2 6 和 2 副本集 并且我们使用pymongo驱动程序并使用以下 url 连接 Mongodb 副本集 mongodb admin email protected cdn cgi l email protecti
  • AWS DynamoDB 写后读一致性 - 理论上它是如何工作的?

    大多数nosql解决方案仅使用最终一致性 并且考虑到DynamoDB将数据复制到三个数据中心 如何保持写后读一致性 解决此类问题的通用方法是什么 我认为这很有趣 因为即使在 MySQL 复制中 数据也是异步复制的 我将详细告诉您 Dynam
  • Cassandra修复导致节点超时

    我们使用具有 5 个节点的 Cassandra 3 10 1 集群 每个节点有 8 个核心和 23Gi 内存 全部位于同一个 DC 中 复制因子 2 一致性级别 2 最近 在大约每周进行一次的计划修复期间 来自一个节点的查询出现多次超时 在
  • Cassandra 按非聚集键对结果进行排序

    我们使用 Cassandra 的用例是显示前 10 个recent博客文章的访问者 以下是 Cassandra 表定义 CREATE TABLE blogs by visitor blogposturl text visitor text
  • 按组复制数据框

    我有以下数据框 df structure list Group c 1 1 1 1 2 2 2 2 2 2 3 3 3 index c 1 2 3 4 1 2 3 4 5 6 1 2 3 row names c NA 13L class c

随机推荐

  • kotlin 如何使 setOnClickListener 接受函数作为参数

    在 kotlin 中 我们可以使用setOnClickListener 像这样 view setOnClickListener println Hello 但是如果我定义自己的接口 我只能传递匿名对象 如下所示 obj setMyListe
  • 如何在Python中的文件中写入新行

    我有一个这样的文件 word number word number 我只想保留 保留这些单词 再次换行中的一个单词 word word 到目前为止我的代码 f open new file txt w with open initial fi
  • 查找 SQL 中的所有整数间隙

    我有一个数据库 用于存储我从外部源获取的游戏不同比赛的信息 由于一些问题 数据库中偶尔会出现空白 可能缺少 1 个 ID 到几百个 ID 我想让程序提取丢失游戏的数据 但我需要先获取该列表 以下是表格的格式 id pk identity G
  • 更改“多选”下拉框中所选项目的背景颜色? [复制]

    这个问题在这里已经有答案了 我想为多选下拉框中的所选项目赋予黄色 选择后默认背景是灰色的 如何执行此操作HTML CSS 这个问题是关于多选但对于单选请参考 相关但不重复 如何将背景颜色应用于选定的选项 我们可以简单地借助以下 CSS 来完
  • Laravel 5.1 视图未找到

    这似乎是 Laravel 中时不时出现的一个问题 我正在编写一个 CRUD 控制器 以配合它 但是经过测试 我得到了InvalidArgumentException in FileViewFinder php line 137 View b
  • 如何在 Firebase 托管中实现 .htaccess 配置?

    我的域中有一个 htaccess 配置 允许我的应用程序与路由完美配合 当您刷新 Angular 2 应用程序无法解析路线时 它可以避免错误 我当前的配置是这个
  • 如何在 PyQt 中使用 pdf.js 查看器渲染 PDF?

    我尝试在我的项目中添加 pdf js 查看器文件 它可以在 Chrome Mozilla Safari 等浏览器中运行 但它不会加载 node webkit 和 PyQt webkit 中的某些页面 我正在尝试使用 iframe 加载文件
  • 为什么只将数据存储在平衡二叉搜索树的叶节点中?

    我买了一本关于计算几何的好小书 在到处阅读时 我经常偶然发现这种特殊的二叉搜索树的使用 这些树是平衡的 应该只在叶节点中存储数据 而内部节点应该只存储引导搜索到叶节点的值 下图显示了该树的示例 其中叶子是矩形 内部节点是圆形 我有两个问题
  • JQuery 使用 .each() 延迟

    您有什么想法可以使用 JQuery 的延迟方法和一个函数来检测所有更改的表单并将每个表单作为 Ajax 帖子提交吗 如果我只列出大量表单提交 我可以得到同样的结果 但如果我使用 form changed each function retu
  • 预填充 HTML 表单文件输入

    我有一个 VBScript 它可以检查 HTML 表单 用固定值填充它 然后提交它 到目前为止它工作正常 但现在我需要设置将在表单数据中上传的文件的位置 我相信如果我将位置设置为该值 它就会起作用 但事实并非如此
  • 强制WebView在某个网络上运行

    是否可以强制WebView通过指定的方式加载 URLNetwork 我的设备打开了两个网络连接 wifi 和移动数据 移动数据网络被设置为传出连接的默认网络 因此连接管理器返回移动数据网络connectivityManager getAct
  • UIPickerView 与 NSDictionary

    我是一名 NET 程序员 也是 Objective C 的新手 我正在尝试制作一个 UIPickerView 它的作用类似于 NET 下拉列表 用户看到文本列表并选择一个 所选值 即 ID 将在代码中使用 我已经浏览了近半天试图弄清楚这一点
  • != 在 jade/pug 中起什么作用?

    在下面的翡翠代码中如何工作 messages extends layout block content spacer container row col lg 8 col lg offset 2 col md 10 col md offse
  • 将自定义 NSURLProtocol 与 UIWebView 和 POST 请求结合使用

    在我的 iOS 应用程序中 我使用 UIWebView 和自定义协议 带有我自己的 NSURLProtocol 实现 我非常小心地确保每当我加载 url 时 我都会将类似的内容加载到我的 UIWebView 中 myprotocol mys
  • 在共享库中使用全局变量

    我正在用 C 编写一个应用程序 它使用全局变量 日志文件结构 在我的应用程序中 我在运行时动态加载共享库 并且我想使用指向相同日志文件结构的全局变量来记录共享库 这在简单的方法中似乎是不可能的 将全局变量声明为 extern 将不起作用 因
  • 无法编译、无法执行dex、无法合并、非巨型指令

    我需要一些帮助 因为我自己无法找到解决方案 我阅读了很多帖子并进行了很多调查 但没有解决方案 我有一个项目 有一些子项目 操作栏 滑动 facebook 等 当我尝试编译它时 我总是收到以下错误 2013 07 31 14 44 06 De
  • 如何使用 LINQ 将字典的键和值合并到一个列表中?

    我有一本字典 其中键是一个字符串 值是与该键对应的字符串列表 我想显示字典中的所有键 并在该键下方显示与该键关联的值 像这样的东西 Key 1 Value 1 Value 2 Value 3 Key 2 Value 1 Value 2 在
  • Git 与 SVN 与非文本文件/大型项目

    过去几周我一直在学习 Git 与 SVN 相比 我真的很喜欢它的工作方式 我希望完全切换到它的主要原因是 合并应该更容易 几乎没有冲突 而且我可以在本地提交 这促进了许多分支的使用 例如每个票证 问题 任务 等的一个分支 并且还促进了许多提
  • 调整未知数量的元素大小以填充父容器的宽度

    我需要将未知数量的 div 可能限制为 5 左右 放入父容器中 并始终确保它们保持均等划分 我不确定这是否可以单独使用 CSS 来完成 但我想我最好问一下 因此 如果我们知道使用了 3 个 div div div class menu bu
  • cassandra 分片和复制

    我是 Cassandra 的新手 不过本文解释分片和复制 我陷入了一个困境 我的本地计算机上配置了一个包含 6 个 Cassandra 节点的集群 我创建一个新的键空间 TestKeySpace 复制因子为 6 并在键空间 employee