基於Cassandra搭建簡單Blog程序後臺

需求

Blog程序的需求如下:

1 允許不同的用戶寫Blog。
2 Blog內容包括:標題,內容,ID,發佈日期。
3 每一篇Blog可以打上任意多個Tag。
4 人們可以在Blog上留言,內容包括:留言內容,留言人的名字,留言時間。

設計

針對上面的4點需求,我們可以相 應地建立4個ColumnFamily(以後用CF簡寫)來保存數據。

Author ColumnFamily

作 者CF用於保存用戶的相關信息,如下所示:

Authors : { // CF
        逖靖寒: { // row key
            numPosts: 11,
            homepage:
http://gpcuster.cnblogs.com
            email: [email protected] ,
            sex: male
        },
        // and the other authors
        Author 2 {
            ...
        }
    }

Author CF屬於standard類型,Key爲用戶的ID,每一個Col代表了用戶的一個屬性。每一個用戶相關聯的屬性不需要預先定義好,這也是面向列存儲的好 處之一:)

BlogEntries ColumnFamily

博客CF用與保存每一篇Blog的相關信息,如內 容,作者信息,tag信息等等:

BlogEntries : { // CF
        1222212 : { // row key - 博客文章的ID,這個是唯一的.
            title: 基於Cassandra搭建簡單Blog程序後臺
            body: lalalalalala
            author: 逖靖寒  // 這個col的value對應着Authors CF中的key
            tags: DB,NoSQL  // 我們使用逗號來分隔多個tag信息
            pubDate: 1250558004      // 發佈時間
            ID: 1222212
        },
        // 另外一篇博客
        1222213 : {
            ...
        }
    }

BlogEntries CF屬於standard類型,Key爲每一篇博客的ID。注意這裏的author col,通過這個col,我們可以直接查詢到author的信息。

Tag ColumnFamily

Tag CF用戶保存用戶給每一篇博客打上的Tag信息:

Tag : { // CF
        NoSQL : {  // 我們使用Tag的內容作爲Key。
            // column的名稱爲博客發佈的時間,內容爲博客的ID
            timeuuid_1 : 1222212,
            timeuuid_2 : 1222214,
        },
        // 這個另一個Tag信息
        Life : { 
            …         
        }

Tag CF屬於standard類型,我們可以通過博客的ID找到對應的博客內容。

Comments ColumnFamily

用戶評論CF設計如下:

Comments : {
        1222212 : { // 這裏的key就是BlogEntry的key:博客的ID
            timeuuid_1 : { // 這個是Super Column的名稱
                // 評論的信息
                commenter: 逖靖寒,
                email:
[email protected] ,
                comment: hello
                commentTime: 1250438004
            },
            // 這篇博客的另一個評論
            timeuuid_2 : {
                commenter: Some Dude,
                email: [email protected],
                comment: be nice Joe Blow this isnt youtube
                commentTime: 1250557004
            },           
        },
        // 另一篇博客的評論
        12222343 : {
            …    
        }

Comments CF屬於super類型。這裏key的設置我們可以非常方便的找到一篇Blog對應的所有評論信息。

配置信息

根 據上面設計的各個CF的信息,我們需要在storage-conf.xml文件中配置各個CF的信息,配置情況如下:

<Keyspace Name="BloggyAppy">
        <!-- CF definitions -->
        <ColumnFamily CompareWith="BytesType" Name="Authors"/>
        <ColumnFamily CompareWith="BytesType" Name="BlogEntries"/>
        <ColumnFamily CompareWith="TimeUUIDType" Name="TaggedPosts"/>
        <ColumnFamily CompareWith="TimeUUIDType" Name="Comments"
            CompareSubcolumnsWith="BytesType" type="Super"/>
    </Keyspace>

使用

現在假設我們要根據一個tag找到相關博客,並且打開這篇博客後能夠看到作者的信息和相關的評論。

假設選擇的tag的名稱爲 NoSQL:

返回tag爲NoSQL的所有blog的ID:get BloggyAppy.Tag[‘NoSQL’]

假 設選擇的blog ID爲1222212:

放回Blog的內容:get BloggyAppy.BlogEntries[‘1222212’]

查閱這篇Blog的所有評論信息:get BloggyAppy.Commnets[‘1222212’]

查閱作者信息也是類似的。

 

這樣 我們就完成一個簡單的Blog程序的後臺。

參考

WTF is a SuperColumn? An Intro to the Cassandra Data Model
發佈了335 篇原創文章 · 獲贊 3 · 訪問量 66萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章