cassandra学习笔记3--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: gpcuster@gmail.com,
??????????? 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 ColumnFamilyTag 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: gpcuster@gmail.com,
??????????????? comment: hello
??????????????? commentTime: 1250438004
??????????? },
??????????? // 这篇博客的另一个评论
??????????? timeuuid_2 : {
??????????????? commenter: Some Dude,
??????????????? email: sd@example.com,
??????????????? 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程序的后台。