设计 Cassandra 数据模型的最佳实践是什么? [关闭]

2024-05-13

以及需要避免哪些陷阱?您有任何交易中断吗?例如,我听说导出/导入 Cassandra 数据非常困难,这让我想知道这是否会妨碍将生产数据同步到开发环境。

顺便说一句,很难找到关于 Cassandra 的好的教程,这是我唯一的教程http://arin.me/code/wtf-is-a-supercolumn-cassandra-data-model http://arin.me/code/wtf-is-a-supercolumn-cassandra-data-model还是很基础的。

Thanks.


对我来说,最重要的是决定是使用 OrderedPartitioner 还是 RandomPartitioner。

如果您使用 RandomPartitioner,则无法进行范围扫描。这意味着您必须知道任何活动的确切密钥,包括清理旧数据。

因此,如果您有很多流失,除非您有某种神奇的方法可以准确地知道您插入了哪些键,否则使用随机分区器您很容易“丢失”东西,这会导致磁盘空间泄漏,并最终会导致磁盘空间泄漏。消耗所有存储空间。

另一方面,您可以询问有序分区程序“A 和 B 之间的列族 X 中有哪些键”? - 它会告诉你。然后您可以清理它们。

然而,也有一个缺点。由于 Cassandra 不进行自动负载平衡,因此如果您使用有序分区器,您的所有数据很可能最终都会出现在一两个节点中,而不会出现在其他节点中,这意味着您将浪费资源。

我对此没有任何简单的答案,除了在某些情况下您可以通过在键的开头放置一个短哈希值(您可以从其他数据源轻松枚举的值)来获得“两全其美” - 例如例如,用户 ID 的 16 位十六进制哈希值 - 将为您提供 4 个十六进制数字,后跟您真正想要使用的密钥。

然后,如果您有最近删除的用户列表,您只需对他们的 ID 进行哈希处理并进行范围扫描即可清理与他们相关的任何内容。

The next tricky bit is secondary indexes - Cassandra doesn't have any - so if you need to look up X by Y, you need to insert the data under both keys, or have a pointer. Likewise, these pointers may need to be cleaned up when the thing they point to doesn't exist, but there's no easy way of querying stuff on this basis, so your app needs to Just Remember.

应用程序错误可能会留下您忘记的孤立键,并且您将无法轻松检测它们,除非您编写一些垃圾收集器来定期扫描数据库中的每个键(这将需要一段时间 -但您可以分块进行)以检查不再需要的内容。

这些都不是基于实际使用情况,只是我在研究过程中发现的。我们不在生产中使用 Cassandra。

编辑:Cassandra 现在在主干中有二级索引。

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

设计 Cassandra 数据模型的最佳实践是什么? [关闭] 的相关文章

  • 用于标签搜索的数据存储解决方案

    我已经按照预先计算的分数订购了数百万件商品 每个项目都有许多布尔属性 假设总共有大约一万个可能的属性 每个项目有十几个 我希望能够请求实时 几毫秒 给定任意属性组合的前 n 个项目 您会推荐什么解决方案 我正在寻找可扩展性极强的东西 我们目
  • 错误:无法连接到 cassandra 服务器。未配置的表

    我正在尝试使用这个简单的代码通过 python 的 cassandra driver 连接到在本地桌面上运行的 cassandra from cassandra cluster import Cluster cluster Cluster
  • 数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?

    我试图理解不同的概念数据库分区这就是我的理解 水平分区 分片 将表拆分为不同的表 其中将包含初始表中的行的子集 如果按大陆拆分用户表 我见过很多这样的示例 例如北美的子表 欧洲的另一个子表 ETC 每个分区位于不同的物理位置 理解 机器 据
  • Cassandra修复导致节点超时

    我们使用具有 5 个节点的 Cassandra 3 10 1 集群 每个节点有 8 个核心和 23Gi 内存 全部位于同一个 DC 中 复制因子 2 一致性级别 2 最近 在大约每周进行一次的计划修复期间 来自一个节点的查询出现多次超时 在
  • parent_id 是外键(自引用)并且为 null?

    浏览 Bill Karwin 的书 SQL Antipatterns 第 3 章 Naive Trees 邻接表 父子关系 有一个注释表的示例 CREATE TABLE Comments comment id SERIAL PRIMARY
  • NoSQL(MongoDB)与 Lucene(或 Solr)作为数据库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着基于文档数据库的 NoSQL 运动的发展 我最近关注了 MongoDB 我注意到如何将项目视为 文档 就像 Lucene 以及 Solr 用
  • Cassandra cqlsh - 如何显示时间戳列的微秒/毫秒?

    我正在插入带有时间戳列的 Cassandra 表 我的数据具有微秒精度 因此时间数据字符串如下所示 2015 02 16T18 00 03 234 00 00 但是 在 cqlsh 中 当我运行选择查询时 微秒数据不会显示 我只能看到精确到
  • 实时数据和草稿数据的数据库模型

    我一直在考虑在数据库中保存 实时 数据集和草稿数据集的最佳方法 实际版本会显示在网站上 草稿版本会一直进行下去 直到准备好上线为止 该模型是关系模型 由许多表组成 我目前的方法是拥有 2 个数据库 一个用于草稿 一个用于实时 当您将数据提升
  • 将 Datastax Enterprise Cassandra 迁移到 Apache Cassandra

    我们目前使用的是 DSE 4 8 和 5 12 我们想迁移到 apache cassandra 因为我们不使用 Spark 或搜索 所以想节省一些钱迁移到 apache 这可以在不停机的情况下实现吗 我看到 sstableloader 以其
  • 关于 Cassandra 与 MySQL 的一些建议

    几天前我在这里问了一个问题 得到了一些非常好的答案 我正在考虑做一个带有个人资料 个人简介等的facebook风格的网站 并询问我是否应该使用mysql 答案是使用Cassandra 因为好多了 我只是问这是每个人都会建议的 只是我对mys
  • 数据库设计:类别在自己的表中?

    我正在将几个数据库重新设计成一个综合数据库 并且我注意到旧数据库的先前设计者喜欢将类别存储在自己的表中 例如 假设有一个表boats bid integer bname string color integer 并且在应用程序中有一个下拉框
  • CAP 定理 - 可用性和分区容错性

    当我尝试理解CAP中的 可用性 A 和 分区容错性 P 时 我发现很难理解各种文章的解释 我感觉A和P可以在一起 我知道事实并非如此 这就是为什么我无法理解 简单解释一下 A和P是什么以及它们之间的区别 一致性意味着整个集群中的数据是相同的
  • 国外收藏的查找和排序

    所以我有一个收藏users 并且此集合中的每个文档以及其他属性都有另一个集合中文档的 id 数组 workouts 集合中的每个文档workouts有一个名为date 这就是我想要得到的 对于特定用户 我想要获取属于该用户的锻炼的 work
  • Hector (Cassandra) 删除异常

    当我尝试删除时使用 hector cassandra 客户端 它会删除列 但将行键留在后面 有谁知道为什么 以及如何删除该行键 使用 Cassandra 时这是预期的 由于它通过写入逻辑删除来删除 因此数据仍然存在 直到下一次压缩 最终它会
  • 是否需要连续编号?

    我正在开发一个 winform NET 应用程序 其中包括订单 发票 服务订单 票务等 这些实体在对其 ID 进行编号时是否必须按顺序排列 国际海事组织没有 以一个订单为例 它只有通过业务层才有效 在此过程中 可能已经创建了另一个订单 批准
  • Cassandra 允许过滤

    我有一个如下表 CREATE TABLE test day int id varchar start int action varchar PRIMARY KEY day start id 我想运行这个查询 Select from test
  • 允许在cql中进行过滤、数据建模

    我目前正在使用和研究 cassandra 中的数据建模实践 到目前为止 我知道您需要基于执行的查询进行数据建模 然而 多个select需求使得数据建模变得更加困难或不可能在一张表上处理它 所以 当你无法在1个表上处理这些要求时 你需要插入2
  • Cassandra 与 ZooKeeper 的事务 - 这有效吗?

    我正在尝试在 ZooKeeper 的帮助下为 Cassandra 实现一个事务系统 由于我认为我在数据库实现方面没有足够的经验 所以我想知道我的想法原则上是否可行 或者是否有任何重大缺陷 以下是步骤的高级描述 识别所有要编辑的行 键 和列
  • 动态表单字段验证的数据库设计

    在我的应用程序中 我允许用户创建一个包含他们想要的任何 HTML 表单字段 例如文本输入 文本区域 选择等 的表单 我想让用户能够为每个字段定义 0 个或多个累积验证规则 最多可能有 25 个不同的验证规则 我应该如何建模 这是一个潜在的解
  • 在关系数据库中存储 1:1 用户关系的最佳方式

    存储用户关系的最佳方式是什么 例如友谊 在关系中必须是双向的 你是我的朋友 因此我是你的朋友 数据库 例如MYSql 我可以想到两种方法 每当一个用户与另一个用户成为好友时 我都会向数据库添加两行 其中 A 行由发起用户的用户 ID 和下一

随机推荐