不太清楚 Cassandra 的反模式

2023-12-08

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

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

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

不太清楚 Cassandra 的反模式 的相关文章

  • 将 CassandraUnit 与 Astyanax 结合使用时出现依赖性问题

    我有一个 SessionDaoCassandraImpl 类 它使用 Astyanax 从 Cassandra 读取数据 我想使用嵌入式 Cassandra 服务器进行测试 卡桑德拉单元 https github com jsevellec
  • Spring-data-cassandra:创建名称为“sessionFactory”的 bean 时出错,并且无法解析对 bean“cassandraTemplate”的引用

    我有一个 springboot 应用程序 在其中连接到 cassandra DB 我的 pom xml parent gt
  • 设计 Cassandra 数据模型的最佳实践是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 以及需要避免哪些陷阱 您有任何交易中断吗 例如 我听说导出 导入 Cassandra 数据非常困难 这让我想知道这是否会妨碍将生产数据
  • Cassandra data stax 查询生成器更新

    我正在尝试编写一个简单的更新查询 更新表 set col1 val1 col2 val2 where col3 val3 您能否提供一个使用查询生成器 API 在 Cassandra 中编写简单 UPDATE 的示例 试试这个 v1 x Q
  • Hector 在执行incrementCounter 后获取结果计数器值

    我们正在执行以下操作来更新计数器的值 现在我们想知道是否有一种简单的方法可以立即取回更新的计数器值 mutator incrementCounter rowid1 cf1 counter1 value Cassandra thrift AP
  • Cassandra Read 花费的时间比预期要长

    我正在使用带有 CQL3 的 cassandra 1 2 我的键空间中有三个列族 当我查询其中一个列族 电话 时 需要很长时间才能检索 这是我的查询 select from phones where phone no in 90384875
  • 卡桑德拉身份验证问题

    卡桑德拉版本 apache cassandra 2 1 8 我最近配置了 2 节点集群Authenticator设置PasswordAuthenticator 当其中一个节点关闭时 我无法登录 Cqlsh 并出现以下错误 Connectio
  • Cassandra CQL v3.0 和复合类型

    我正在浏览以下文档CQLv3 0 http www datastax com docs 1 1 references cql index 我们是否应该在更新中指定复合键并选择 a b 1 以防万一comparator or key vali
  • 错误:无法连接到 cassandra 服务器。未配置的表

    我正在尝试使用这个简单的代码通过 python 的 cassandra driver 连接到在本地桌面上运行的 cassandra from cassandra cluster import Cluster cluster Cluster
  • Cassandra Nodetool Repair 的具体作用是什么?

    From http docs datastax com en cassandra 2 0 cassandra operations ops repair nodes c html http docs datastax com en cass
  • 表行为的 cassandra TTL

    假设我在 secondary 1 处插入一列 在 secondary 2 处插入另一列 表的默认 TTL 设置为 10 秒 例如 问题1 data1 和 data2 是否会在 10 秒后被删除 或者 data 1 将在 10 秒后被删除 d
  • Elasticsearch 与 Cassandra 对比 Elasticsearch 与 Cassandra

    我正在学习 NoSQL 并正在寻找满足客户要求之一的不同选项 在提出这个问题之前我已经查阅了各种资源 一个对NoSQL知之甚少的人 我需要以更快的速度存储数据并读取数据 完全故障安全且易于扩展 能够搜索数据进行分析 我最终得到了一个简短的清
  • Cassandra LWT 读取

    据我了解 LWT 插入始终以 SERIAL 一致性级别完成 如果为 true 这是否意味着读取作为 LWT 插入的行可以安全地以 ANY 一致性级别读取 换句话说 我假设 LWT 插入是完全一致的 使得任何后续读取也完全一致 无论一致性级别
  • Apache Cassandra 中的复合索引

    我正在尝试设置一个 cassandra 列族 其中一些列上有二级索引 在读回数据时我需要进行过滤 在我最初的测试中 当我一起使用多个索引时 速度会变慢 这是我当前的配置方式 通过 cassandra cli update column fa
  • Cassandra 服务器抛出 java.lang.AssertionError: DecoratedKey(...) != DecoratedKey

    我目前正在尝试 Cassandra 在客户端 使用 Hector 我查找了一些像这样的键 ColumnFamilyResult
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • Cassandra 已死但 pid 文件存在

    我是 cassandra 新手 尝试在 centos 7 0 上安装 cassandra 2 1 2 完成安装后 执行 cqlsh 命令并创建一些键空间和列族 乍一看 我觉得它工作得很好 但后来我意识到以下问题 1 当我执行 service
  • 带有 Play 框架的 cassandra

    我正在尝试开发一个由两部分组成的应用程序 Web 服务和 Android 应用程序 我计划使用 java play 框架和 cassandra noSQL 数据库来实现我的 Web 服务 我已经找了两天了 我还是不知道该怎么做 我需要集成一
  • 如何获取 cql 查询的墓碑计数?

    我正在尝试评估在我们的应用程序的一个表中创建的墓碑数量 为此 我尝试使用nodetool cfstats 我是这样做的 create table demo test a int b int c int primary key a inser
  • 通过Shell脚本执行CQL?

    我正在尝试从 shell 脚本执行 CQL 命令 我能够连接到 cqlsh 我使用的 CQL 版本是 1 1 18 但无法将查询发送到 cql 有什么想法或建议如何继续进行吗 我是否需要连接到 Cassandra 并使用 shell 脚本执

随机推荐