2015-09-21 21 views
1

我剛剛在Cassandra開始。我正在測試數據模型。我想知道如何在Cassandra中模擬?在Cassandra中爲多個地址建立用戶表的數據建模

Users 
{ 
    "userId" : "73180" , 
    "firstName" : "John" , 
    "lastName" : "Doe" 
    "addresses" : 
    { 
     "type" : "homeAddress" 
     "street" : "a pretty street" , 
     "city" : "Some city" , 
     "state" : "CT", 
     "country" : "US" 
     "zipcode" : 55555 
    } , 
    { 
     "type" : "businessAddress" 
     "street" : "an office street" , 
     "city" : "Some city" , 
     "state" : "CT", 
     "country" : "US" 
     "zipcode" : 55555 
    } , 
} 

具體來說,我該如何爲每個用戶建立多個地址模型?

回答

0

儘管將地址建模爲用戶定義類型(UDT)是一種好方法,但您還應該考慮查詢模式的外觀。你只能通過userid查詢用戶嗎?或者你想按名稱查詢它們?

爲了證明這一點,我將創建一個地址UDT和設計usersByLastName查詢表:

CREATE TYPE address (
    street TEXT, 
    city TEXT, 
    state TEXT, 
    postal TEXT, 
    country TEXT); 

CREATE TABLE usersByLastName (
    userid BIGINT, 
    firstName TEXT, 
    lastName TEXT, 
    addresses MAP <TEXT, FROZEN <address>>, 
    PRIMARY KEY (lastName,firstName,userid)); 

注意addresses創建爲address地圖,讓你有型有一定的靈活性(家,辦公室,運輸,結算等)以及您可以爲每個用戶添加的地址數量。

接下來,我將通過lastName插入一些數據和查詢,這將產生:

[email protected]:stackoverflow> SELECT * FROM usersbylastname WHERE lastname='Doe'; 

lastname | firstname | userid | addresses 
----------+-----------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     Doe |  Jane | 73184 | {'business': {street: 'A Office St.', city: 'Somecity', state: 'CT', postal: '55555', country: 'US'}, 'home': {street: 'B Pretty St.', city: 'Somecity', state: 'CT', postal: '55555', country: 'US'}, 'shipping': {street: '1187 Huntervasser', city: 'Los Angeles', state: 'CA', postal: '90036', country: 'US'}} 
     Doe |  John | 73180 | {'business': {street: 'A Office St.', city: 'Somecity', state: 'CT', postal: '55555', country: 'US'}, 'home': {street: 'A Pretty St.', city: 'Somecity', state: 'CT', postal: '55555', country: 'US'}} 

(2 rows) 

這是你可以模擬這種方式之一。同樣,考慮您的查詢要求也很重要。

編輯:我現在在卡桑德拉峯會的主題演講中,喬納森·埃利斯剛剛演示了一個帶有地址圖的用戶表,幾乎完全是我做的。

+0

如何創建兩個'Map'數據類型:'Home_Address'和'Business_Address',它與UDT相比有什麼不同? – sras

+0

@sras我用這個解決方案看到的問題是它將您的業務邏輯與您的數據模型混合在一起。現在,未來業務案例需要的任何新地址類型都將需要架構更改。使用MAP地址可以更好地應對未來,從而不必對模型進行這些類型的更改。 – Aaron

+0

感謝您的回覆和解釋。 – user1860447

0

您可能想要爲地址創建user defined type,然後將其用於home_address和business_address字段。