2016-04-13 36 views
0

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

CREATE TABLE products (
    merchant_id uuid, 
    product_id text, 
    description text, 

    PRIMARY KEY (merchant_id, product_id) 
); 

据我了解,这样的作品,但它有问题,如果我有一个小的客商(几十个说吧)和大量的产品(百万)时,数据在节点间的分布不会很好。

的解决方法,我想出了是这样的:

CREATE TABLE products (
    product_id text, 
    merchant_id uuid, 
    description text, 

    PRIMARY KEY (product_id) 
); 

CREATE INDEX ON products (merchant_id); 

在这种情况下,产品ID在前面加上商家ID以使其唯一。这似乎很难。我还担心二级索引中的查找将返回数百万个主键。

在这里做什么是正确的事情?我很早就开始开发,所以如果有必要,我可以对模式进行重大更改,并且我想为Cassandra做正确的事情。

回答

0

诀窍是创建一个复合分区键。如果你可以将所有的产品分类到类别,并有足够的类别(千),那么你可以否则创建PRIMARY KEY((merchand_id, category), product_id)

,什么是你读的模式?

您的原创设计PRIMARY KEY((merchand_id), product_id)似乎暗示您想要列出全部产品由销售商提供,是否是必需的业务需求?

如果没有,你可以如用PRIMARY KEY(product_id)

+0

是的,这是正确的 - 该表的阅读模式是读取所有的产品,为商家(创建饲料)。 – Derecho