走进Affinity之一:VMware开源数据库Affinity介绍
Affinity是VMware公司在今年2月28日发布的一种新型的开源数据库系统,其设计思想借鉴了关系型数据库、面向对象数据库、文档型数据库、RDF/XML数据库等多种数据库系统的优点,具有灵活多样、方便易用、接口丰富等优点。从今天起,我会陆续在博客上发表一些文章,分享关于Affinity数据库的一些知识,比如特性、查询以及使用方法等。今天的这篇文章,主要介绍Affinity数据库的团队、历史以及特性。
VMware作为全球领先的虚拟化技术公司,一直非常重视和支持开源社区的发展,比如最近很火的开源PaaS平台Cloud Foundry,使得用户不需要考虑基础架构,就能快速有效地在云平台部署和扩展应用程序。在Cloud Foundry平台上集成Affinity数据库之后,用户除了能在Cloud Foundry平台上使用常见的诸如 Spring、 Java、 Ruby 和 Node.js等开源框架和编程语言,以及数据库服务(MySQL、MongoDB和 Redis) 和消息服务器 RabbitMQ之外,也可以选择Affinity作为云应用的数据库系统,而Affinity数据库的特点为云平台应用提供了更快捷、更灵活、更有效的支持。
Affinity数据库系统内核的作者是Mark Venguerov博士。Mark Venguerov博士1986年毕业于莫斯科大学并获得理论物理硕士学位,2002年在都柏林三一学院获得计算机科学博士学位(人工智能和模式识别方向)。他在大规模计算机软件系统设计和实现上有着二十多年的理论和实践经验,目前居住在加拿大蒙特利尔。除了Mark Venguerov博士之外,Affinity数据库项目组还包括来自加拿大、美国、马耳他、中国的几名同事。
尽管Affinity数据库系统刚刚发布,事实上,这个项目的前身——PiStore系统,早在2004年就已经在PI Corporation公司(一个存储公司后来被EMC公司收购)开始开发,并且有着广泛的应用,比如曾经作为Mozy公司在线备份服务系统的后端存储软件系统。话说2004年还是关系型数据库独领风易做图的时代,那时的PiStore数据库就已经有了现在很多NoSQL数据库的特点,比如灵活的数据模型,不需要严格的数据模式(Schema),支持集合(Collection)和引用(Reference)等复杂数据类型。PiStore项目于2010年正式由EMC公司交接到VMware公司,经过两年多的持续开发和测试,终于在近期正式向开源社区发布(Apache License 2),并且有了一个响亮的新名字——Affinity。
Affinity数据库系统的主要特点是(参考Affinity官网文档):
1. 跨平台C++内核,不依赖于任何虚拟机,内核footprint只有大约1M字节
2. pathSQL查询语言,支持protocol-buffer协议
3. 路径表达式(path expressions)以及图查询
4. 能够混合使用SQL和图查询
5. ACID事务(支持跨多个对象的JOIN操作)
6. 对只读事务的snapshot隔离级别
7. 嵌套事务
8. 日志和恢复
9. 存储结构化数据以及半结构化、动态对象(在Affinity中,把一条记录或者一个数据对象称作PIN)
10. 用URI为properties(PIN的属性)和class(分类)进行全局命名转换
11. 全局唯一的对象ID,和随机访问物理地址(一个PIN的ID,称作PID)
12. 自描述(self-describing)的对象(对象可以把自己表示为数据字典)
13. 优化的B-link 树索引
14. 事务地、自动地、动态地对数据对象进行多种分类,并存储于索引中(关于数据对象的自动分类,Mark Venguerov博士拥有两项美国专利)
15. 复合索引
16. 异步查询处理选项,用于高性能并发服务器
17. 事务的全文索引
18. 在结构化查询同时使用全文搜索
19. 页面级别的AES加密算法和日志加密
20. 可扩展的多用户支持(比如可以由一个进程管理上千个不同的数据库实例instance)
21. 对象粒度的访问控制列表(Access Control List)
22. 丰富的数据类型,包括集合、引用和BLOB
23. 计算时支持不同测量单位的转换(比如摄氏度与华氏度,或者米与公里)
24. 数据对象的软删除(soft deletion)
25. 对大结果集进行外部排序
26. 基本的replication框架
通过以上列出的特性可以得出,Affinity数据库在秉承传统数据库的事务、日志、B-link树索引、外部排序、数据页加密等优点的同时,又拥有支持灵活的数据模型、模式自由(schema-free)、自动分类、Path Expression和图查询等其他丰富的特点,为当前各种复杂的应用程序提供了极大的支持。对于那些不熟悉非关系型数据库、传统的SQL开发者,也可以通过PathSQL写出类似SQL的查询。适合(并不仅限于)需求多变导致的数据模式(Schema)经常随之变化、以及有灵活的数据模型并且需要进行复杂查询的应用。
在介绍完Affinity数据库系统的团队、历史和特性之后,相信读者对Affinity数据库有了一定的了解,并想赶紧尝试一下,请参见Affinty的官方网站获得更详细的文档。您可以先阅读这篇文档,通过运行一个脚本,在本机上自动下载、编译、安装Affinity数据库。
在下一篇文章,我想讲一下Affinity的数据模型,其中包括PIN、Property、Value、Collection、Class等主要概念,敬请关注 。
如果您有建议和想法,欢迎联系本文作者linw at vmware.com 或者 在新浪微博与我交流 @傍槐闲士,当然最好的方式是在Affinity官方论坛上发布,会得到更专业的反馈。