当前位置: 首页 > 知识库问答 >
问题:

什么是最好的方式来坚持大OneTo多国协会在卡桑德拉?

汝弘深
2023-03-14

在 RDB 中 A 和 B 之间具有较大的一到许多关联(约 1

详细地说,A是B的持久性集,由于一些永久性的业务过程,它应该不断发生轻微的变化。B中的一些可能会被添加,其他一些可能会被删除。以可分页的方式选择B非常重要。

由于将数据存储迁移到Apache Cassandra,考虑该关系的数据模型。

我想最好的解决方案是将A存储为一行,其中列标识为B。

色谱柱系列A:

A->{
RowID1->{description="...", BId0="123", BId1="456", ..., BId1000000="987"},
RowID2->{description="...", BId0="123", BId1="456", ..., BId500000="888"},
...
}

这是一个好方法吗?如何实现它?

共有1个答案

翁凯定
2023-03-14

我想,从实现简单性的角度来看,这是一个好方法,但是如果一个分区内有数百万个大行,那么对于集群内的性能和数据分布来说,这可能不是最佳的。

在CQL中,它可以这样实现:

CREATE TABLE b_by_a ( a text, b text, description text, PRIMARY KEY (a, b) );

其中 a 和 b 是从分区键 a 和群集键 b 复合的主键。要插入,请选择并删除一些您必须知道的b。

Insert INTO b_by_a (a, b, description) values ('value a', 'value b 1', '...');
Insert INTO b_by_a (a, b, description) values ('value a', 'value b 2', '...');

SELECT * FROM b_by_a WHERE a='value a';

Datastax cassandra驱动程序提供了按查询结果分页的能力

请注意cassandra的一些限制:

The maximum number of cells (rows x columns) in a single partition is 2 billion. 
 类似资料:
  • 我有一个必须添加到采购订单的产品列表。采购订单具有序列号,添加产品后,应更改其状态以指示这些产品已出货。 1 个采购订单中处理的典型产品数为 500。 在DB上-我有2张桌子- 各方面的建议告诉我应该使用多个异步查询。然而,我关心的是整个操作的原子性。鉴于我的要求,请建议什么是最好的前进方式。 先谢谢你。

  • 几天前,我在Cassandra 1.2中删除了一列,方法是:1.删除整个表,2.重新创建表,不带列,3.插入插入语句(不带列)。 我之所以那样做,是因为Cassandra 1.2不支持“降列”操作。 今天,由于数据损坏问题,Ops团队通知了我。我的问题: > 根本原因是什么? 怎么修? 错误[read stage:79]2014-11-04 11:29:55,021 CassandraDaemon

  • 问题内容: 主管的指示:“我要避免在其中添加任何逻辑models.py。从现在开始,让我们将其用作访问数据库的类,并将所有逻辑保留在使用模型类或包装它们的外部类中。” 我觉得这是错误的方法。我觉得将逻辑排除在模型之外只是为了减小文件大小是一个坏主意。如果逻辑在模型中是最好的,那么无论文件大小如何,它实际上都是应该去的地方。 那么有没有一种简单的方法可以只使用include?用PHP讲,我想向主管建

  • 我有几个客户,每个客户都由一个“租户”代表 我想知道将这个概念建模的最佳方法是什么,我做了大量的研究,发现了这个课题:http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Modeling-multi-tenanted-Cassandra-schema-td7591311.html 我知道有几种可能性 租户提供一个密钥空间

  • 我对将大型集合插入cassandra数据库的最快方法有点困惑。我了解到我不应该使用批量插入,因为它是为原子性而创建的。甚至Cassandra也给了我一个信息,让我使用异步写来提高性能。我使用了没有“batch”关键字的最快插入代码: 出发地:https://medium.com/@fondev/cassandra-batch-loading-non-the-batch-keyword-40f00e

  • 背景:我们正在使用Cassandra来存储一些时间序列数据,并且我们正在使用准备好的语句来访问数据。 我们通过以下方式对表中的数据进行分区: 时间段(如一周或一个月)和 保留策略(如 1 年、5 年或 10 年) 对于不同的表,我们需要为查询、时间段和保留策略的每个组合准备一个不同的语句(仅在使用时),因此我们将有一个爆炸式的预准备语句数量。一些数学: 在客户端,我只能在缓存中保留最常用的PS,但