2016-04-13 33 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