翻译文章:哪种云数据库适合你

温馨提示:本文由厦门大学计算机系林子雨翻译自英文网站,转载请注明出处,仅用于学习交流,请勿用于商业用途。

[本文翻译的原始出处:厦门大学计算机系数据库实验室网站林子雨老师的云数据库技术资料专区https://dblab.xmu.edu.cn/topic/research/documentation/cloud_database]

哪种云数据库适合你

翻译:厦门大学计算机系林子雨(http://www.cs.xmu.edu.cn/linziyu) 翻译时间:201253日星期四

英文原文地址:http://www.theregister.co.uk/2011/05/19/cloud_storage/

寻找键(Find the keys)

NoSQL数据库不是以表的形式存储数据,也就是说,和传统的关系数据库中的表的存储方式是不同的。Google提出了BigTable,而Microsoft则在Windows Azure中提供了Tab;e Storage。一个名字为Joseph Feltz的架构师说:“当你考虑Window Azure的Table Storage时,我强烈建议你把它想做是一种对象存储。”

关于“键值存储”(key/value),首先需要了解的事情是,它会把与某个对象相关的所有信息都存储到一个单个实体(entity)中,而不是像关系数据库那样,存储在多个表中,然后通过主外键关系连接起来。这就意味着,可以表面传统的关系数据库所面临的复杂的连接操作。所有项目(item)都被存储到一个“表”(或称为域,即domain)中。完全不同类型的项目可能被存储到同一个域(domain)中。

 

无序的存储(Out of Order)

我们通常把这类数据库称为“键值存储”(key/value),原因就在于,它们使用“键(key)”把不同的项目(item)关联起来。如果两个不同的项目在某个特定的键上面有相同的值,那么,它们就是相关的。

但是,问题恰恰就在这里。因为你可以把任何东西都放入同一个域(domain),这就导致不存在任何数据库模式,也不存在任何主外键关系,也就不存在什么引用完整性。

在“键值存储”中,完全有可能产生一个孤立的订单,因为,你可能已经删除了某个客户。你可以避免这个问题的发生,不过,不是求助于数据库,而是必须在应用程序代码中处理这个问题。

这里会有明显的风险存在,那就是,一些企业会在云环境中使用“键值存储”,而没有考虑合适的数据结构。一个比较好的建议是,在建立“键值存储”数据库之前,做一些必要的分类建模工作。

如果数据不是以一种规范的方式进行存储,一旦你需要从你选定的云存储平台上迁移数据,或者需要归档数据,或者打算把云数据库中的数据拿来作为主数据管理(master data management)计划的一部分,这个时候,就会出现问题。

通常情况下,你可能会使用某种数据探查(data profiling)工具来发现那些存在关联的商务实体,但是,迄今为止,还不存在可以支持键值存储的数据探查工具,目前的这些数据探查工具只支持关系型数据库。

从应用程序中提炼出数据规则,就我们所知道的,目前只有一个公司能做,就是Rever公司。因此,即使键值存储比关系型数据库更加灵活自由,你也必须采用严格规范的方法来设计你的数据库。

 

正装(Formal Attire)

目前已经有许多NoSQL数据库,但是,可以用在云中的还不是很多。可用的产品中,比较知名的是,Amazon SimpleDB,Google App Engine Data Store(是作为访问BigTable的一个接口)和Microsoft Windows Azure。

Microsoft也在云中提供了SQL Azure,是SQL Server的一个简化版本。而Amazon也可以在自己的EC2平台上提供MySQL和Oracle数据库服务。

因此,问题就出来了,什么时候应该选择关系数据库,什么时候应该选择键值存储呢?

从根本上来说,关系型数据库非常擅长处理规范化的结构化的数据,尤其是能够很好的支持事务一致性。

上面这点仍然是成立的,如果我们考虑使用Azure,我们可以在SQL Azure中存储结构化数据。而且,如果你正打算把应用迁移到云中,而且你的应用是需要关系型数据库,那么类似SQL Azure这种云中的关系数据库产品,就可以很好的满足你的需求。

在有些情形下,使用键值存储还是比较可行的,比如存储多媒体数据和非结构化数据,或者你每次访问的数据都不会超过一个表,从来不需要表间的连接操作。

感受差别(Feel the width)

商业因素是需要考虑的另一个因素。许多产品供应商都提出了一些限制要求:限制单个分区中可以容纳的数据量,限制单个查询中可以涉及的项目或行的数量,限制单个查询允许运行的时间等等。

键值存储和关系数据库,二者各有优缺点。如果不考虑商业因素,不管是否在云中,关系数据库都可以很好地处理事务一致性,而对于其他类型的应用(比如多媒体和非结构化数据),NoSQL数据库还是有其用武之地的。(厦门大学计算机系 林子雨 翻译)