加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

基于Cassandra搭建简单Blog程序后台

发布时间:2020-12-13 13:54:45 所属栏目:百科 来源:网络整理
导读:需求 Blog程序的需求如下: 1 允许不同的用户写Blog。 2 Blog内容包括:标题,内容,ID,发布日期。 3 每一篇Blog可以打上任意多个Tag。 4 人们可以在Blog上留言,内容包括:留言内容,留言人的名字,留言时间。 设计 针对上面的4点需求,我们可以相 应地建

需求

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 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:
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程序的后台。

参考

WTF is a SuperColumn? An Intro to the Cassandra Data Model

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读