云计算利器:Oracle NoSQL Database初体验

在过去几年里,NoSQL数据库的世界里不断涌现出各种新项目,我们时常听到雄心壮志的吹鼓手们拍着胸脯保证他们的新的NoSQL应用是怎样怎样打破了所有的旧框架,能够带来难以想象的性能。事实上呢,有些言过其实了,NoSQL依然无法进入华尔街,即使是新潮的开发者们也只敢把它用在那些人们生活中的无关紧要的琐碎数据上。但是,老式的表式结构确实局限性太大了,如果能够抛弃掉这些,数据库的速度能够得到飞速的提高。

正在这时,Oracle这个一贯开发顶级的防弹SQL数据库的专家带来了它的NoSQL数据库服务器,坚固、实用,标准的Oracle风格。疯狂的梦想家们会继续编写NoSQL的新项目,但严肃的人会仔细的关注一下Oracle的产品,因为它不仅带来了NoSQL中那些令人兴奋的功能,同时也符合严格的大型工程的大手笔,不禁让人肃然起敬。

Oracle NoSQL Database产品发布的消息可能会让NoSQL的粉丝们有些吃惊,但实际上Oracle已经悄悄的在这条路上走了一段时间了。五年前,Oracle买了SleepyCat Software,这家企业就是当初的开源Berkeley DB的初创者,Berkeley DB在当时就以灵活的Key-Value存储模式而出名,而Berkeley DB的技术据说就是Oracle NoSQL Database的核心,虽然看上去是完全重写了一遍。

Oracle NoSQL:完全的ACID

Oracle NoSQL中最有趣的地方就是Key-Value结构。不用再去定义大纲或者把自己锁在表格架构里,只需要创建关键字,然后把数据关联给它们就可以了。你可以给关键字连上一个字符串,也可以连上一个图像文件,什么都可以,数据库接受字节码,不理会内容是什么。

Oracle把关键字分为主次两个部分,你可以认为主部分是对象的指针,次部分是记录的各种字段。比如你可以把姓名和社会保障卡号放在主部分里,把住址和邮编等等其他的字符串放在次部分里,这和一些NoSQL工具使用一个对象多个字段的做法不同。

Oracle NoSQL中重要的地方是针对ACID遵从而做的近似工程,这让Oracle NoSQL达到了SQL数据库所能够提供的严格标准。ACID的意思是“Atomic,Consistent,Isolated,Durable transactions”,指的是严密、持续、隔离并且耐用的交易处理。而大多数的NoSQL系统走的是另一条路:BASE,“Basically Available, Soft State, and Eventually Consistent”,也就是保证基本可用性,柔性事务处理,保证最终结果的一致性。换句话说,强调结果不强调过程。

关于Oracle NoSQL是否真正提供ACID遵从还有不少争论,但Oracle NoSQL确实可以做出这样的承诺。

最终结果一致性:争论

这里有个问题可以提一下,耶鲁大学的计算机科学教授Daniel Abadi在博客上质疑说在某些情况下,Oracle的NoSQL向主服务器写入的关键字匹配会丢失,比如如果主服务器宕机同时复制服务器又没有准备好。很快哈佛大学的计算机科学教授Margo Seltzer(我们知道她现在是Oracle的员工,她参与创建了Sleepycat)发表了回应,她认为这并不是Oracle NoSQL的问题,如果要达到真正意义上的“最终结果一致性”,数据中心需要在准备好复制服务器的前提下才开始写入数据。显然想要这个争论得出结果可能会比一年一度的这两所大学之间的足球赛更难些。

当然这些争论并非我感兴趣的,为了测试Oracel NoSQL的速度,我特意找了台低端的Mac配置。我开启了单点NoSQL服务器,然后往里面塞入358400条关键字,都是长度大约30的字符串。在这台老掉牙的Mac上,Oracel NoSQL一共用了119秒。

为了对比一下,我把相同的记录插入最新版的Voldermort数据库,在这个LinkedIn症状使用的开源Java NoSQL数据库上,用掉的时间是180秒。

相关推荐