谷歌分析存储了大量统计数据,包括来自世界各地的互联网网站统计数据。检索功能可以从如此巨量的数据中快速返回要求谷歌具备特殊的解决方案,必须要满足在任何时候有更多数据需要存储时能很容易地扩展。
在谷歌,任何时候都要能给基础设施中添加任意数量的应用,每个应用都可能带来极其繁重的负载。这类请求的资源很难被满足,尤其是在有限时间内要把必要的更新做完。
如果谷歌在单个服务器节点上使用经典的关系型数据库,那么每次容量达到极限,他们都需要升级硬件。考虑到待创建应用程序和数据的量是被谷歌使用的,这类更新可能很有必要成为一项每天都做的日常工作。
负载也可以在多个服务器节点共享,但是一旦需要更多节点,系统会变得非常复杂而极其难以维护。
考虑到这些因素,标准的关系数据库配置就不再是特别适合的选择,因为对系统这么大规模的升级和维护太困难了。
寻找可扩展解决方案
为保证速度和可靠性,这种快速应急升级的做法是不必要的。谷歌使用自己的数据存储解决方案,叫做“BigTable”。与存储在关系型表中的数据不同,数据是以多维排序映射存储的。
这种类型的实现立足于广为人知的一种存储方式,就是“key-value”(键值)存储方式。这种存储方式可以提供一些性能优势,是扩展过程更容易。
关系型数据库中的信息存储
关系型数据库在一个地方存储每一条信息,通常称为表中的列。对于关系型数据库,保证数据规范化非常重要。这个过程可以确保在其它表或者列中没有重复数据。
例如,客户的名字总是应该存储在特定表的特定列中。如果客户名字在数据库的另一个表或另一列中出现了,那么它应该删除掉,应该引用从原来的表和列中提取信息。
这种结构的缺点是数据库内部会变得十分复杂。甚至相对简单的查询也会经过许多路径才能执行,在运行时候必须找到所有这些路径评估其运行时间才能知道如何做性能最优。数据库变得越复杂,运行时需要判断查询路径就会需要越多的资源。
以key/Value(键值)形式存储的信息
在key/Value键值形式的存储结构中,复制数据是可以接受的。主要思路是利用磁盘空间而不是其它硬件资源,磁盘空间相对容易获取,成本效率更容易升级(尤其是在云环境中),其它硬件资源要提速代价更昂贵。
从简化查询方面考虑,数据复制是非常有益的,因为相关信息可以存储在一起,避免查询数据时需要经过许多路径。
与关系型数据库使用表结构不同,键值存储方式使用域的概念。域是一个存放数据的存储区,它不需要预定义结构。域内的数据片段是通过“键”定义的,这些“键”可以有任意数量的属性与它们相关联。
属性可以是简单的字符串值,也可以是更复杂的结构,可以与流行编程语言中的数据类型相匹配。包括数组,对象,整数,浮点数,布尔型值,以及编程中的其它基本数据类型。
在键值存储方式中,数据完整性和逻辑在应用程序代码中处理(需要使用一个或者多个API),而不是通过数据库本身的结构来处理。这样一来,数据提取就变成了使用正确的编程逻辑的事,而不是依赖于数据库优化器基于需要访问的关系从大量可能路径中选择查询路径。
关系型数据库和键值数据库访问数据的差异。
获得结果
谷歌需要存储和提取许多应用程序的大量数据,包括谷歌分析、谷歌地图、Gmail和热门搜索的web索引数据。此外,在任何时候都要添加更多应用和数据存储,这个因素就使得BigTable的键值存储成为可扩容性的理想方案。
BigTable是谷歌自己的定制解决方案,那么企业如何获得类似性能和扩展性使其用户获得更好的体验呢?好消息是还有其它键值存储方案可用,有的可以在云服务中作为服务运行。这类服务很容易扩展,因为在云环境中更多数据存储很容易购买获得。
键值存储方案
有几种键值存储数据库可供选择。其中之一就是Mongo,它是以对象数据库形式设计的,以JSON格式存储信息。这种格式在web应用中很理想,因为JSON数据很容易作为一种标注格式在各种需要的应用之间传递数据。
例如,Mongo是MEAN堆栈的一部分:Mongo,Express,AngularJS和NodeJS是程序员们开发应用的一套流行搭配。每一部分都需要与其它部分发送交互数据。所有的一切,包括数据库,都可以使用JSON格式,在各部分之间传递数据变得更加容易和规范统一。
MySQL与Mongo执行相同任务代码比较图
如何使用Mongo
Mongo可以在各种操作系统上安装使用,包括Windows,Linux和OSX。这样,数据库的扩展就简单了,只要在所安装的服务器上添加存储空间就行了。
另一种方案是在云环境中把Mongo用作服务。这样便于扩展,任何时候都可以向服务同样是发起请求要求必要的存储空间。这样一来,新的应用和更多数据存储需求就可以快速高效地处理了。
Morpheus就是这种服务中的出色候选者,它在云环境中提供Mongo服务高扩展性:Morpheus的用户可以有三个共享的节点,完整数据集,可以无缝提供MongoDB实例。此外,所有服务都运行在高性能固态硬盘(SSD)基础设施上,这是非常可靠的数据存储介质。使用Morpheus高扩展性数据库即服务可以在任何时候保持运行状态。