SequoiaDB(巨杉数据库)是一款分布式非关系型文档数据库,可以被用来存取海量非关系型的数据,其底层主要基于分布式,高可用,高性能与动态数据类型设计,与当前主流分布式计算框架Hadoop紧密集成。
SequoiaDB同时兼顾了关系型数据库中众多的优秀设计:如索引、动态查询和更新等,同时以文档记录为基础更好地处理了动态灵活的数据类型。
SequoiaDB使用MPP(海量并行处理)架构,运行于Linuxx86-64与PowerPC平台集群,支持PB级数据存储。
SequoiaDB是为在现代开发技术、编程模型以及计算资源条件下如何搭建和运行应用程序而设计的。
1.1如何搭建应用程序新的复杂型数据类型:在今天的应用程序中,相对于传统应用单一的关系模型,出现了多种多样的数据类型,包括动态属性、混合结构、文本、多媒体、数组以及其他复杂类型都是很常见的。
灵活性:应用程序中的数据模型随着开发的进展,是不断变化的。这是由于现代互联网环境下,很多需求在应用的设计之初并无法规划到位。因此随着时间的推移,应用程序会不断改进数据模型来适应应用程序的新特性以及新需求。
现代程序编程语言:面向对象编程语言影响着数据的结构,而这些结构与关系型数据库中存储数据的结构完全不同。
快速开发:软件工程团队现在开始接受短时间的、迭代的开发周期。在项目中,定义数据模型和应用程序功能并不是发生在项目开始的单一事件,而是一个持续的过程。
1.2如何运行应用程序大数据的新可扩展性能:运营和分析负载对可扩展性、可用性、性能和数据多样性提出了新的挑战。
快速实时性能:用户期望在很多类型接口应用程序中获得一致的、交互式的体验。
新硬件:计算、存储、网络以及主内存资源在成本和性能之间的关系发生了巨大变化。应用程序的设计需要能采用不同的优化策略优化这些资源,权衡利用这些资源。
新计算环境:单台计算机资源很难满足应用程序的基础设施需求,而云基础设施现在能提供海量、弹性、高效的运行环境。
1.3SequoiaDB通过创新来面对新的需求文档型数据模型:数据以嵌套式的半结构化方式进行存储,而该结构可以映射到现代程序编程语言的对象,很容易被开发人员所理解。
丰富的查询模型:SequoiaDB适合于各种各样的应用程序。它提供了丰富的索引和查询支持,包括二级索引,聚合框架等。
惯用驱动:开发者通过原生库来与数据库交互,使得SequoiaDB的使用变得简单且自然。所谓原生库,是整合了他们各自的环境和代码库。
水平可扩展:随着数据量和吞吐量的增长,开发人员能够利用通过服务器和云基础架构来增加SequoiaDB系统的容量。
高可用性:数据的多份副本都是通过远程复制来维护的。自动故障转移到辅助节点、机架和数据中心上,使得企业不需要自定义代码和复杂的优化,就能让系统正常运行。
内存级的性能:数据都是在内存中直接读取和写入的,而且为了系统的持久性,会在后台持续把数据写入磁盘。这些都为系统提供了快速的性能,使得系统不在需要使用单独的缓存层。
灵活性:从文档型数据模型到多数据中心部署,到可变的一致性,到运营级可用性的选择,SequoiaDB为开发和运营团队提供了巨大的灵活性。正是由于这些优势,SequoiaDB非常适合于各种跨行业的应用程序。
2SequoiaDB数据模型2.1作为文档的数据SequoiaDB以二进制表示的文档形式存储数据,这种二进制文档称为BSON(二进制的JSON)。这个BSON编码扩展了流行的JSON(JavaScriptObjectNotation),表现在附加的类型上,如整形、长整形以及浮点数。BSON文档包含一个或多个字段,而且每一个字段包含一个特定数据类型值,这些特定数据类型包括数组,二进制数据,子文档。
往往有着相似结构的文档会组合成集合,类比于关系型数据库相关概念就是表;把文档类比于关系型数据中的行;把字段类比于关系型数据库中的列。
图1博客应用程序的关系型数据模型示例
例如,为博客应用程序考虑数据模型。在关系型数据库中,数据模型可能包含多个表。为了简化这个例子,假设所有的表包括类别表,标签表,用户表,评论表以及文章表。
而在SequoiaDB中,数据可能会建模成两个集合,一个是用户集合,另外一个是文章集合。在每篇博客中,可能会有多个评论,多个标签以及多个分类,而这里的每个评论、标签、分类都可以作为一个嵌入的数组。
SequoiaDB文档往往把给定记录的所有数据都存放在一个单一的文档中,而在关系型数据库中,给定的记录通常被分配存放在多个表中。换句话说,也就是SequoiaDB中的数据是更本地化的。在大部分SequoiaDB系统中,BSON文档往往也是与应用程序中的编程语言对象结构紧密相关的,这使得开发人员能够更加容易理解应用程序中使用的数据如何映射到数据库中存储的数据的关系。
2.2动态模式SequoiaDB文档在结构上可以不同。例如,描述用户的所有文档可能包含这个用户ID,以及他们最后一次登录系统的时间。然而仅仅有部分文档可能包含对一个或多个第三方应用程序的用户身份。文档与文档之间的字段也是不相同的,而且文档都包含各自的数据结构,因此没有必要在建立集合的时候指定数据模型。如果要在一个文档中加入一个新的字段,那么就创建这样一个新的字段。这样既不会影响系统中任何其他文档,也不会更新编目信息,更不会让系统离线。
2.3模式设计尽管SequoiaDB支持强健的模式灵活,但模式设计仍旧是重要的。模式设计者应该从一些主题来考虑,例如应用程序需要执行的查询类型、如何管理应用程序代码中的对象、以及文档随时间推移如何改变和增长。模式设计超出了本文的范围,是一个广延性的话题。
图2博客应用程序的文档数据模型
3功能特性3.1惯用驱动SequoiaDB为所有受欢迎的编程语言提供了原生驱动程序,为营造自然的开发环境而提供了框架。支持的驱动程序包括C、C++、Java、.NET、PHP、Python等。相比关系数据库的根本区别在于,SequoiaDB的查询模型是在特定编程语言的API中以方法或函数实现的,这与类似SQL完全独立的语言是相对的。再加上SequoiaDBJSON文档模型和面向对象编程语言中的数据结构的相似性,使得应用程序之间的集成变得简单。想获得完整的驱动列表,请查阅sequoiadb.