cassandra 是否无法存储跨分区大小限制的关系?

Is cassandra unable to store relationships that cross partition size limit?

我注意到由于其 100MB 的分区限制,关系无法正确存储在 C* 中,非规范化在这种情况下无济于事,而且 C* 每个分区可以有 2B 个单元格,因为那些 2B 单元格只有 Longs 有 16GB ?!?!?这不会超过 100MB 的分区大小限制吗?

这是我一般不明白的地方,C* 宣称它可以有 2B 个单元格,但分区大小不应超过 100MB ???

执行此操作的惯用方法是什么?人们说这是 TitanDB 或 JanusDB 的理想用例,可以很好地扩展到数十亿个节点和边缘。这些在引擎盖下使用 C* 的数据库如何对此进行数据建模?

这里描述了我的用例https://groups.google.com/forum/#!topic/janusgraph-users/kF2amGxBDCM

请注意,我完全知道这个问题的答案是 "use extra partition key to decrease partition size",但老实说,我们谁有这种可能性?尤其是在建模关系中...我对特定时间发生的关系不感兴趣...

分区中的最大单元格数(行 x 列)为 20 亿,单列值大小为 2 GB(建议 1 MB)

来源:http://docs.datastax.com/en/cql/3.1/cql/cql_reference/refLimits.html

分区大小100MB不是上限。如果你查看 datastax 文档

For efficient operation, partitions must be sized within certain limits in Apache Cassandra™. Two measures of partition size are the number of values in a partition and the partition size on disk. Sizing the disk space is more complex, and involves the number of rows and the number of columns, primary key columns and static columns in each table. Each application will have different efficiency parameters, but a good rule of thumb is to keep the maximum number of rows below 100,000 items and the disk size under 100 MB

您可以看到,为了高效运行和降低堆压力,他们制定了一个很好的经验法则,即在单个分区中保持行数 100,000 和磁盘大小 100MB。


TitanDB 或 JanusDB 以邻接表格式存储图,这意味着图存储为顶点及其邻接表的集合。顶点的邻接列表包含顶点的所有关联边(和属性)。

他们使用 VertexID 作为分区键,使用 PropertyKeyID 或 EdgeID 作为聚类键,属性 值或边缘属性作为普通列。

如果你使用cassandra作为存储后端。 在TitanDB或JanusDB中,为了高效运行和低堆压力,同样的规则适用,意味着边的数量和顶点的属性是100,000和大小100MB