InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

RDBMS是不足够的

作者 Sebastien Auvray 译者 郭晓刚 发布于 2007年12月1日

领域
架构 & 设计,
运维 & 基础架构,
语言 & 开发
主题
数据访问 ,
Ruby ,
架构 ,
性能和可伸缩性
标签
关系型数据库 ,
数据库 ,
性能和扩展性

尽管关系数据库适合客户机—服务器模型,但在服务的世界里我们需要新的方案。RDBMS受挫于伸缩性问题:如何实现冗余和并行?

[关系数据库]成了单点故障的所在。尤其复制(replication)是不可忽视的。要理解其原因,请考虑在两台数据库服务器之间保持数据完全一致的问题。如果两台都读和写数据,那么很难同步变化。如果设为一主一从也不好,因为当用户写入信息时,主数据库要独自承受全部的负荷。

而且,Assaf Arkin还认为写一致性(write consistency)是RDBMS自己把自己压垮的原因。

像引用完整性、约束、原子更新这些特性在客户机—服务器的世界里非常重要,但在服务的世界里它们是无意义的。

而这些都是面向文档的分布式数据库(Document Oriented Distributed Databases)着重打算解决的典型问题。

MySQL的软件工程师Damien Katz介绍了数据管理的四大支柱

  • 保存(Save):数据保存必须是安全(即ACID)、持久且高效的。
  • 观察(See):数据应当易于获取,集成了简单的报表方法。并提供(全文)搜索。
  • 安全(Secure):对数据分割隔离(Compartmentalization),允许SSL连接,给数据分配用户、组和角色……
  • 分担(Share):成为分布式的,在线或者离线。

Damien使用CouchDB实现了这4大支柱

CouchDB是:
  • 文档数据库服务器,可通过RESTful JSON API访问。
  • 为特殊目的而设计的,无Schema且地址空间是平坦的。
  • 分布式的,可执行健壮的增量复制,具备双向的冲突检测及管理。
  • 可查询,可索引,具有一个面向数据表的报表引擎,使用JavaScript作为引擎的查询语言。
CouchDB不是:
  • 关系数据库。
  • 对关系数据库的替代。
  • 面向对象的数据库。更具体地说,CouchDB不打算成为OO编程语言的无缝持久化层。

将文档插入到数据库中,然后再为查询定义视图,在这样的想法和CouchDB的启发下,Anthony Eden动手写出了他自己的面向文档数据库:RDDB。已经有人对RDDB进行了详尽的评议

RDDB目前的特性有

  • 文档只是简单的名称/值对的集合。
  • 可用Ruby代码定义视图。
  • 可定义一个缩减块(reduce block)来缩减视图的初始映射数据。
  • 视图可被实体化(materialized)以提高查询的性能。
  • 数据存储/视图存储/实体化存储都是可插拔的。当前的实现包括RAM、分区文件/文件系统和Amazon S3。
  • 分布式实体化(materialization)已经可用,不过即将重写。

InfoQ有幸与Anthony讨论RDDB、CouchDB和RDBMS。

首先,是什么让你开始开发RDDB,在Rejectconf上你提过一个研究项目?

我把RDDB看作是个人的研究项目。在过去的一年中我的工作大量地牵扯到分析型系统(analytical system),开发数据仓库这一类内容。我也在使用Amazon的Web服务。RDDB有望帮我把这两者在一定程度上结合起来,这样我就能够得到一个在EC2和S3上运行的分析型数据库(analytical database)。这是我主要目标,也是创作RDDB的推动因素。

你在日常工作中经常接触数据集成的问题;你觉得面向文档的分布式数据库现在应用得过少吗?今后会应用得越来越多吗?

我不确定。关系数据库的历史悠久,它们在长时间里已经变得很成熟。一方面它们在实践中是一个明显的选择,因为它们是可信赖的。另一方面关系数据库不一定对于所有类型的数据存储和查找都是最佳的选择,因此新型的数据存储是有机会的。我只是不确定面向文档数据库是否就是我们寻找的新型数据库——我想在很大程度上要取决于它的伸缩性,和处理海量文档时不出现性能退化的能力。

在服务的世界中是否仍有RDBMS的一席之地?引用完整性、原子更新和约束在客户机—服务器的世界里有其价值,但在服务的世界中,它们是否仍然有意义呢?

RDBMS仍然是我们评价其他东西的标杆,因此我不认为关系数据库的地位会在短时间内发生什么变化。我想最终我们会超越对原子更新的需要,只要数据库能够把暂时性作为常态,就能消除对任何更新的需要。如果我们能迁移到一种环境下,在其中所有绝对必须的东西都包含在资源里面,同时系统对失效的链接变得更加宽容,在这样的环境下引用完整性就不需要了。约束可能一直都会有用,如果能为约束定义逻辑,它们甚至会变得更加强大。

你如何比较RDDB和CouchDB?(我明白RDDB还处在一个很早期的开发阶段,CouchDB也一样。)使用RDDB比起使用CouchDB Ruby绑定有什么优势?

我可以一起回答这两个问题。CouchDB使用Erlang编写的,而RDDB是用Ruby编写的,因此Ruby开发者会觉得RDDB更方便自己动手摆弄。CouchDB用了Erlang的语言特性来在分布式处理中进行进程间通信,而Ruby要依赖Rinda、Ruby SQS之类的库。对于Ruby开发者来说,让RDDB运行起来显然比CouchDB要容易得多,因为只需要通过RubyGems安装RDDB就行了。RDDB的视图是用Ruby写的,而CouchDB视图是JSON(至少目前如此)。我认为就现在的情况RDDB更容易插拔各种不同的文档存储、视图存储和实体化存储实现(全都支持RAM、文件系统和S3存储)。RDDB拥有不同的实体化实现(比如本地、Rinda和RC2),而且还有线程化和非线程化的实体化器(materializers)。

我们不久前写过一篇文章介绍ActiveWarehouse,那个项目进行得怎么样了?它有被用到企业环境中吗?

ActiveWarehouse最近没什么动静。我认为大多数工作和用途都是在ETL那边,也就是ActiveWarehouse ETL库。我的目标是在不久的将来发布ActiveWarehouse ETL的1.0版。至于Rails插件,它绝对需要先改善一下显示方面,才能前进到1.0版。已经有些人对修订用户界面部分的代码表示了兴趣,我们看看结果会怎样。

查看英文原文:The RDBMS is not enough.

译者 郭晓刚 是InfoQ中文站架构社区编辑,创建并终结过数家软件小企业,翻译过多本技术书籍。

RDB数据库不是最佳的存储数据的方式, 发表人 Wu Junyin 发表于
Re: RDB数据库不是最佳的存储数据的方式, 发表人 Shine Jimmy 发表于
还有比文件系统存储文档更高效的存储方式吗? 发表人 zhang wei 发表于
Re: 还有比文件系统存储文档更高效的存储方式吗? 发表人 Guo Xiaogang 发表于
  1. 返回顶部

    RDB数据库不是最佳的存储数据的方式,

    发表人 Wu Junyin

    前段时间在数据库的时候总是感觉RDB数据库不是最佳的存储数据的方式,
    我想使用别的方式来存储数据,但是思索来思索去,
    还是回到了RDB :P

  2. 返回顶部

    Re: RDB数据库不是最佳的存储数据的方式,

    发表人 Shine Jimmy

    前段时间在数据库的时候总是感觉RDB数据库不是最佳的存储数据的方式,
    我想使用别的方式来存储数据,但是思索来思索去,
    还是回到了RDB :P


    不知道RDDBS有何理论基础,感觉有点像DOMINO的文档保存格式。

  3. 返回顶部

    还有比文件系统存储文档更高效的存储方式吗?

    发表人 zhang wei

    文件系统+数据库,文件系统放文件,数据库放属性信息。

  4. 返回顶部

    Re: 还有比文件系统存储文档更高效的存储方式吗?

    发表人 Guo Xiaogang

    文件系统+数据库,文件系统放文件,数据库放属性信息。

    这样还得另外做全文索引。

深度内容

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条��增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。

Java Remoting远程服务(下)

随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。

深入浅出Node.js(四):Node.js的事件机制

专栏的第四篇文章《Node.js的事件机制》。之前介绍了Node.js的模块机制,本文将深入Node.js的事件部分。