2016-08-08 53 views
0

你好,我們有一個表在卡桑德拉,其結構如下混淆了數據模型卡桑德拉

CREATE TABLE dmp.user_profiles_6 (
    vuid text PRIMARY KEY, 
    brand_model text, 
    first_seen timestamp, 
    last_seen timestamp, 
    total_day_count int, 
    total_usage_count int, 
    user_type text 
) WITH bloom_filter_fp_chance = 0.01 
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} 
    AND comment = '' 
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'} 
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
    AND crc_check_chance = 1.0 
    AND dclocal_read_repair_chance = 0.1 
    AND default_time_to_live = 0 
    AND gc_grace_seconds = 864000 
    AND max_index_interval = 2048 
    AND memtable_flush_period_in_ms = 0 
    AND min_index_interval = 128 
    AND read_repair_chance = 0.1 
    AND speculative_retry = '99PERCENTILE'; 

我在卡桑德拉從datastax瞭解數據建模的幾篇文章。其中表示主鍵由分區鍵和集羣鍵組成。

現在在上面的例子中,我們有一個vuid列,它是每個唯一用戶的標識符。這是主要關鍵。我們有400M獨特的用戶。那麼現在是否意味着Cassandra正在生產400M分區?然後,這必須降低性能。在一篇關於數據建模的datastax文章中,一個示例表顯示了uuid列上的主鍵,這個列是唯一的,並且具有很高的基數。我完全困惑,任何人都可以幫助我確定哪個列可以設置爲分區密鑰,哪個是集羣密鑰?

查詢可以是如下: 1.選擇直接記錄上的可見或第一次看到

回答

1
  1. 選擇紀錄VUID的基礎>> 你的表做到這一點。它已經有vuid作爲主鍵。
  2. 上的最後一次露面還是第一次見到>>
    有兩種選擇這裏的範圍爲基礎選擇vuids: 無論是在集羣列添加last_seen或first_seen
    (你只能在clustering columns執行範圍選擇)在這種情況下,你需要在查詢中提供vuid以及last_seen和first_seen。我不認爲你想要那樣。

    創建另一個具有相同數據的表(是的,在C *中,我們爲具有相同數據的不同查詢創建另一個表,並根據查詢更改鍵,歡迎使用數據重複)。在這個表中,你必須添加一個虛擬列作爲主鍵,並將last_seen和first_seen作爲集羣鍵。您在查詢中傳遞這些seen日期以獲取vuid。

希望這是明確的。

0

在卡桑德拉(查詢驅動模型)的最後一個範圍基礎VUID 2.選擇vuids的基礎上,被創建的表爲了滿足查詢,這與關係數據庫數據建模不同。

在卡桑德拉,主鍵由2型鍵

1.Partition關鍵的 - >定義了分區

2.Clustring鍵 - >定義的順序中的分區

取決於使用。

如果在分區密鑰和clustring密鑰中提到的列不足以提供唯一性,那麼我們需要在 主鍵中添加關係的主鍵。

除了作爲提示: -

[列名XX] =? - >在分區鍵中添加列名相等性檢查

[列名yy]> =? - >範圍檢查在Clustring密鑰中添加列名稱

這裏有問題,它沒有提到什麼是你的查詢應該服務。 請分享根據該表可以創建的查詢。直接

+0

感謝您的輸入。請參考我添加了可能的查詢所需的問題 – Shades88

1
you need to create 3 tables as below. 
table 1:- 
CREATE TABLE dmp.user_profiles_ZZZZ (
    Dummy_column uuid , 
    vuid text, 
    ........other colums 
    PRIMARY KEY((Dummy_column,vuid)) 
) ..... 

table 2:- 
CREATE TABLE dmp.user_profiles_YYYY (
    Dummy_column uuid , 
    .......other colums 
    PRIMARY KEY((Dummy_column),first_seen) 
) ..... 

CREATE TABLE dmp.user_profiles_XXXX (
    Dummy_column uuid , 
    .....other colums 
    PRIMARY KEY((Dummy_column),last_seen) 
) .....