Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing 如何避免Cassandra中的低基数分区键?_Indexing_Cassandra_Schema - Fatal编程技术网

Indexing 如何避免Cassandra中的低基数分区键?

Indexing 如何避免Cassandra中的低基数分区键?,indexing,cassandra,schema,Indexing,Cassandra,Schema,如果我在Cassandra中存储多个商家的产品数据,并且我希望能够检索一个商家的单个产品或所有产品,那么如何避免该表上的低基数分区键?比如说, 创建表格产品( 商号, 产品标识文本, 说明文字, 主键(商户id、产品id) ); 据我所知,这是可行的,但问题是,如果我有少量的商家(比如说几十家)和大量的产品(数百万),数据就不会很好地分布在节点上 我想出的解决办法是: 创建表格产品( 产品标识文本, 商号, 说明文字, 主键(产品标识) ); 创建产品索引(商户id); 在这种情况下,产品I

如果我在Cassandra中存储多个商家的产品数据,并且我希望能够检索一个商家的单个产品或所有产品,那么如何避免该表上的低基数分区键?比如说,

创建表格产品(
商号,
产品标识文本,
说明文字,
主键(商户id、产品id)
);
据我所知,这是可行的,但问题是,如果我有少量的商家(比如说几十家)和大量的产品(数百万),数据就不会很好地分布在节点上

我想出的解决办法是:

创建表格产品(
产品标识文本,
商号,
说明文字,
主键(产品标识)
);
创建产品索引(商户id);
在这种情况下,产品ID前面有商家ID,以使其唯一。这似乎有点骇人听闻。我还担心在二级索引中查找将返回数百万个主键


在这里正确的做法是什么?我处于开发的早期阶段,因此如果有必要,我愿意接受重大的模式更改,并且我希望以正确的方式为Cassandra做事。

诀窍是创建一个复合分区键。如果可以将所有产品分类为类别,并且有足够的类别(数千个),则可以创建
主键((商品id,类别),产品id)

否则,您的阅读模式是什么

您的原始设计
主键((商品id),产品id)
似乎暗示您希望按商品列出所有产品,这是必要的业务要求吗

如果没有,您也可以使用
主键(product\u id)

是的,没错——该表的读取模式是读取商户的所有产品(创建提要)。