Jun'uary

RDDB: Ruby Document-Oriented DataBase

Jan 发表于 2007-11-08 15:56:00

Document-Oriented Database,直译为面向文档的数据库,RDDB是它的一个Ruby实现。

什么是文档?大概可以理解为一个存储了hash table(Java里的Map)的文件,比如

Doc No.20071108
Name: Jan
Sex: Male
Career: President

这就是一个文档了,其中有很多hash entry, 比如Name => Jan. 来看一下RDDB的例子:

# First create an database object
database = Rddb::Database.new

# Put some documents into it
database << {:name => 'John', :income => 35000}
database << {:name => 'Bob', :income => 40000}

以上创建了一个新的数据库,插入了两条新的记录,很清晰不是吗。然后怎么读数据呢?需要用到一个叫做View的东西:

# Create a view that will return the names
database.create_view('names') do |document, args|
document.name
end

# The result of querying will return an array of names
assert_equal ['John','Bob','Jim'], database.query('names')

RDDB不是SQL,因为它不关注数据与数据之间的关系;也不是OODB,你用不着创建一个对象然后将之持久化;在RDDB中你看不到Schema, 你不需要创建Schema,你需要定义的是View。看起来RDDB是一个Domain Specific的数据库,如它的名字所说,Document Oriented. 它的长处在于处理文档信息,因为它的唯一的Schema就是按照文档的方式设计的。我相信RDDB用在创建如CRM, WIKI, Forum之类的应用的时候应该会很方便。

Ruby本身是一个非常适合做DSL的语言,RDDB的美妙之处在于,它利用了Ruby的这个优点,把block引进数据库中,相当于用大家熟悉的Ruby语法替换掉了SQL里面猥琐的聚合函数之类的东东,看下面的例子:

database.create_view('average income') do |document, args|
document.income
end.reduce_with do |results|
results.inject { |memo,value| memo + value } / results.length
end
assert_equal 37333, database.query('average income')

简直太爽了。。 
关键词(Tag): ruby database rddb



收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定

Jan'uary

人类一思考,老夫就发笑

搜索

日历