需求
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程序的後臺。