2013-02-02 196 views
1

考慮以下情況:卡桑德拉數據庫設計

我有一個網頁,它會具有以下字段:

pageid, title, content, like, follow, field1, field2..., field100, pagecomments, images 

像和遵循的是計數器字段,將每次點擊增加。

現在我在Cassandra在以下幾個方面思考這個設計的:

**TYPE A** page_table { 
    page_id, 
    title, 
    content, 
    like, 
    follow, 
    posted_by, 
    datetime, 
    image1, 
    image2, 
    field1, 
    field2..., 
    field100 
} 

page_comments { 
    commentid, 
    page_id,text, 
    comment_like, 
    posted_by, 
    datetime 
} 

**TYPE B** page_table { 
    page_id, 
    title, 
    content, 
    posted_by, 
    datetime, 
    image1, 
    image2, 
    field1, 
    field2..., 
    field100 
} 

page_like { 
    page_id, 
    like 
} 
page_follow { 
    page_id, 
    follow 
} 

page_comments { 
    commentid, 
    page_id, 
    text, 
    comment_like, 
    posted_by, 
    datetime 
} 

哪一個是最好的辦法嗎?還是提出了一些很好的Cassandra數據庫設計的過程,使用CQL

+0

您將如何查詢數據? –

+0

那麼,一個查詢是顯而易見的,因爲他會有一個網頁,如他所說的那樣呈現下列字段。 –

+0

我的查詢應獲取** page_id,標題,內容,posted_by,datetime,image1,image2,field1,field2 ..............,field100,like,follow,commentid,page_id,text ,comment_like,posted_by,datetime **該特定頁面 – user1802597

回答

0

您可能需要一些NoSQL的模式

https://github.com/deanhiller/playorm/wiki/Patterns-Page

讀了如果你打算從一個頁面讓所有的意見,我不看到任何FK的評論,你將需要在page_table這使lite,該頁面缺少一種模式。我將在nosql中加入哪一個是toMany頻繁地嵌入在行中,而不是有索引。所以你有很多的設計。

page_table { 
    page_id, 
    title, 
    content, 
    like, 
    follow, 
    posted_by, 
    datetime, 
    image1, 
    image2, 
    fktocomment1, 
    fktocomment2, 
    fktocomment3 
} 

什麼典型的做法是fktocomment1被prefexied字「評論」這樣你就可以找到剝離註釋部分,並使用FK在結束所有的FKS(沒有價值!)。 這是一個複合名稱模式,你可以谷歌。

編輯:模式頁面編輯/添加該模式是如此普遍,我從來沒有想過要添加它之前。

+0

我正在使用cassandra,據我所知,cassandra沒有外鍵的概念。但謝謝你的回答。 – user1802597

+1

cassandra不支持外鍵「約束」,但人們仍然一直在nosql中使用外鍵。在大多數模型中,你幾乎不可能將它全部歸一化爲一張表,所以你最終得到了外鍵。 –

+0

即使你上面的模型有外鍵;)。在您的comment_id表中,您有一個外鍵page_id可以返回該評論的頁面行。 –