InfoQ

新闻

RDBMS是不足够的

作者 Sebastien Auvray 译者 郭晓刚 发布于 2007年12月1日 下午10时7分

社区
Ruby,
Architecture
主题
数据访问,
性能和可伸缩性
标签
数据库,
性能和扩展性,
关系型数据库

尽管关系数据库适合客户机—服务器模型,但在服务的世界里我们需要新的方案。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.
RDB数据库不是最佳的存储数据的方式, 发表人 Junyin Wu 发表于 2007年12月2日 上午8时8分
Re: RDB数据库不是最佳的存储数据的方式, 发表人 Jimmy Shine 发表于 2007年12月2日 下午7时10分
还有比文件系统存储文档更高效的存储方式吗? 发表人 wei zhang 发表于 2007年12月2日 下午8时19分
Re: 还有比文件系统存储文档更高效的存储方式吗? 发表人 Xiaogang Guo 发表于 2007年12月3日 上午10时27分
  1. 返回顶部

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

    2007年12月2日 上午8时8分 发表人 Junyin Wu

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

  2. 返回顶部

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

    2007年12月2日 下午7时10分 发表人 Jimmy Shine

    前段时间在数据库的时候总是感觉RDB数据库不是最佳的存储数据的方式, 我想使用别的方式来存储数据,但是思索来思索去, 还是回到了RDB :P
    不知道RDDBS有何理论基础,感觉有点像DOMINO的文档保存格式。

  3. 返回顶部

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

    2007年12月2日 下午8时19分 发表人 wei zhang

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

  4. 返回顶部

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

    2007年12月3日 上午10时27分 发表人 Xiaogang Guo

    文件系统+数据库,文件系统放文件,数据库放属性信息。
    这样还得另外做全文索引。

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。