阅读更多


VMware公司在今年2月28日发布了Affinity,这是一种新型的开源数据库系统,其设计思想借鉴了关系型数据库、面向对象数据库、文档型数据库、RDF/XML数据库等多种数据库系统的优点,具有灵活多样、方便易用、接口丰富等优点。Affinity适合对复杂数据(如社交网络)的处理。由于Affinity的微型C++内核,使其可以运行在任何设备以及云环境中。

Affinity数据库在秉承传统数据库的事务、日志、B-link树索引、外部排序、数据页加密等优点的同时,又拥有支持灵活的数据模型、无预定数据模式(schema-less)、自动分类、Path Expression和图查询等其他丰富的特点,为当前各种复杂的应用程序提供了极大的支持。

为了使开发者更深入地了解Affinity数据库,我们特地采访了VMware公司的Affinity研发团队,以下是采访的主要内容。

ITeye:欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,如果您和您的团队希望展示你的创业理念和有趣之处,或者有朋友在创造这样的价值,请联系我们,发站内短信给ITeye管理员或者发邮件到webmaster@iteye.com。

Affinity的简单介绍和示例 Top

Affinity是一个遵循Apache License 2的开源数据库。

Affinity数据库的内核是由C++开发的,用户可以通过C++接口直接与数据库内核交互。另外,Affinity还提供了基于Google protocol-buffer流数据接口以及与标准SQL非常相似的PathSQL语言,方便用户对数据进行各种操作。Affinity的组件包括一个Web Server,在端口4560启动后,用户可以直接通过Web Console来操作数据。

下面让我们来看看Affinity是如何操作数据的:

INSERT (property1, property2) VALUES ('value1','value2');

-- 插入复杂一点的语句 --
INSERT
 prop_string='string', prop_url=U'http://test/',
 prop_binary_string=X'DEF5',
 prop_int=128, prop_float=3.40282f, prop_double=3.40282, prop_bool=true,
 prop_datatime=TIMESTAMP '2010-12-31 23:59:59', prop_internal=INTERVAL '-12:00:00',
 prop_collection={1,2,4};

-- 插入一个集合 --
INSERT prop_collection=
 {'string', X'DEF5', U'http://test/', 128, 3.40282f, 3.40282, true, TIMESTAMP '2010-12-31 23:59:59', INTERVAL '-12:00:00'};

--  更新数据 --
UPDATE * SET livesin[1]='USA' WHERE name='Sonny';
UPDATE * SET age=(SELECT AVG(age) FROM *) WHERE name='Sonny';

Affinity没有表的概念,所有数据直接全局存储,用户可以通过创建class对数据进行分类(classificaion):

CREATE CLASS class1 AS SELECT * WHERE bornin IS NOT NULL;
SELECT * FROM class1 WHERE LENGTH(bornin) > 5 ORDER BY livesin DESC NULLS FIRST;

-- 两个类进行join查询 --
SELECT * FROM class1 AS c1 JOIN class2('Jurgen') AS c2 ON (c1.name = c2.name);

更多查询案例请看: pathSQL Primer

Affinity支持通过JavaScript来操作数据库,让我们看看如何通过JS来使用Affinity:

var lOnResult = function(pError, pResult) { console.log(pResult[0].id); /* ... */ };
  lAffinity.q("INSERT (name, profession) VALUES ('Roger', 'Accountant');", lOnResult);
  /* ... */
  lAffinity.q("SELECT * WHERE EXISTS(name);", lOnResult);

在引入Affinity的JS库affinity-client.js以后,就可以类似SQL的方式访问和查询数据库了。

Affinity的主要特性有哪些? Top

Affinity的主要特性如下:

  • 跨平台C++内核,不依赖于任何虚拟机,内核footprint只有大约1M字节
  • pathSQL查询语言,支持protocol-buffer协议
  • 路径表达式(path expressions)以及图查询
  • 能够混合使用SQL和图查询
  • ACID事务(支持跨多个对象的JOIN操作)
  • 对只读事务的snapshot隔离级别
  • 嵌套事务
  • 日志和恢复
  • 存储结构化数据以及半结构化、动态对象(在Affinity中,把一条记录或者一个数据对象称作PIN)
  • 用URI为properties(PIN的属性)和class(分类)进行全局命名转换
  • 全局唯一的对象ID,和随机访问物理地址(一个PIN的ID,称作PID)
  • 自描述(self-describing)的对象(对象可以把自己表示为数据字典)
  • 优化的B-link 树索引
  • 事务地、自动地、动态地对数据对象进行多种分类,并存储于索引中
  • 复合索引
  • 异步查询处理选项,用于高性能并发服务器
  • 事务的全文索引
  • 在结构化查询同时使用全文搜索
  • 页面级别的AES加密算法和日志加密
  • 可扩展的多用户支持(比如可以由一个进程管理上千个不同的数据库实例instance)
  • 对象粒度的访问控制列表(Access Control List)
  • 丰富的数据类型,包括集合、引用和BLOB
  • 计算时支持不同测量单位的转换(比如摄氏度与华氏度,或者米与公里)
  • 数据对象的软删除(soft deletion)
  • 对大结果集进行外部排序
  • 基本的replication框架

促使你们发起/开始这个开源项目的原因是什么? Top

Affinity原先是作为一个能够多维度、全方位、灵活地存储、检索和共享个人信息的数据库引擎而构思的。

Affinity的前身是PiStore系统,该项目最初由PI公司在2003至2004年发起,随着PI公司在2008年被EMC公司收购而转至EMC公司。2010年Affinity被正式移交到VMware公司。

起初Affinity主要是为单个用户(加上多个访问者)、跨多个应用这样的场景而设计的,因此重点强调数据模型的灵活性。随着时间的推移,Affinity逐渐集成了服务托管(hosting)和多租户(multi-tenancy)等特性支持,现在目标之一就是实现一个全面而成熟的云数据库。

VMware公司一向重视开源社区的发展,这次Affinity正式发布后,衷心地希望能够得到用户的支持和反馈。

该项目主要面向哪些使用群体? Top

作为一个开源项目,Affinity面向于这样的开发者:他们希望能够在更灵活地存取数据的同时,不需要牺牲诸如SQL、事务的ACID属性等已经在传统的关系数据库中实现并存在很长时间的技术和特性。

这里列举几个Affinity数据库可能会吸引用户的特性:

  • 图相关的功能;
  • 可嵌入的数据库内核;
  • 可移植性;
  • PathSQL和JSON接口的易用性;
  • 基于复杂条件和触发器的流数据处理;
  • 通过丰富的库和访问接口很容易地对数据进行建模与分类。

Affinity的主要应用环境是什么? Top

Affinity数据库适用于以下场景:

  • 社交网络、图数据
  • 从移动设备到云等平台上的数据集成
  • 其他小型设备,比如物联网以及ARM平台
  • 流数据处理
  • node.js
  • 数据库系统集成
  • 多应用之间的数据集成与共享(比如移动设备)

Affinity 定义了怎样的数据模型? Top

Affinity没有表的概念,它是一种无预定数据模式(schema-less )的数据库。它提供了一个丰富的原生(native)数据模型。这个模型中最基本的数据存储单元是有着许多属性的数据对象。属性的数据类型可以是原生数据类型,也可以是有序的集合(collection,用于为类似XML列表结构建模),也可以是引用(references,用于为两个对象之间的关系建模)。数据对象都是自描述的(self-describing),并且可以自由扩展(不同的数据对象有不同的属性)。模式(Schema)或者数据的组织(Affinity中被称作class)独立于数据,对其修改并不会影响数据本身。

Affinity与现在流行的NoSQL数据库以及传统的关系数据库相比,主要的差异和优势是什么? Top


Affinity支持的数据模型可以支持MongoDB和CouchDB数据库中的文档。Affinity对数据严格限制,提供了对复杂子结构(比如复杂的图结构)快速更新的操作,而且它的数据占用磁盘空间非常小。

Affinity也可以模拟图数据库、关系型数据库、XML数据库等,这些都是由Affinity支持的查询语言(PathSQL)以及独有的数据模型实现的。目前发布的Affinity版本只是单节点应用,多节点的解决方案已经被列入今后的计划。

Affinity的PathSQL语言与传统SQL语言有哪些联系和区别? Top

PathSQL遵循标准SQL的大部分语句(比如SELECT、INSERT、UPDATE 等)。其本质上是标准SQL的一种扩展,其中加入了诸如路径表达式(path expressions)、嵌套DML、XML qname、在DML语句中使用PIN的地址等功能。

由于数据模型的不同,PathSQL与标准SQL存在少量的差异,比如PathSQL没有CREATE TABLE或者CREATE INDEX语句,而用CREATE CLASS代替;在使用INSERT语句插入数据时,不需要指定表。

以下是PathSQL语句示例:

--插入数据
INSERT name='Jurgen', bornin='South Africa', email='jsmith@acme.org', livesin='Boston', age=22;

-- 更新数据 --
UPDATE ADD livesin='Cambridge' WHERE name='Sonny';

-- 归类数据 --
CREATE CLASS class1 AS SELECT * WHERE bornin IS NOT NULL;

-- 查询 --
SELECT * FROM class1 WHERE LENGTH(bornin) > 5 ORDER BY livesin DESC NULLS FIRST;

-- 路径表达式(path expression)查询 --
SELECT name, email, bornin FROM class1.friends[BEGINS(livesin, 'C')].friends;
SELECT bornin FROM class2('Jurgen').friends{*}[BEGINS(livesin, 'C')];
SELECT age FROM class2('Jurgen').friends{+}[age > 30];
SELECT DISTINCT FROM class1.friends{1,3}.photos;

-- 连接(joins) --
SELECT * FROM class1 AS c1 JOIN class2('Jurgen') AS c2 ON (c1.name = c2.name);

-- 引用(references) --
UPDATE ADD friends=(SELECT afy:pinID WHERE name='Fred') WHERE name='Jurgen';

更多示例:pathSQL Primer

命令在线演示:Console

基于Cloud Foundry和Affinity的云应用有哪些特色? Top

基于Cloud Foundry(VMware的开源PaaS平台)和Affinity的云应用最显著的特色是可以跨应用共享数据、更便捷的应用集成或者子系统集成、为用户提供更丰富的交互方式等。

目前基于Cloud Foundry的Affinity服务已经就绪,它会在接下来的几个月内向公众开放。我们也正在开发云平台可扩展的多节点的版本。

使用Affinity需要注意哪些问题? Top

Affinity的数据模型非常灵活。程序员可能仍然会倾向于使用传统的关系型建模方法,从而无法充分发挥Affinity支持的新的数据模型和PathSQL的优势。比如:仍然用连接(join)操作,而不是用路径表达式(path expressions)和引用(reference)结合的方式来替代以便获得更高的性能。

目前Affinity是否已有成功应用案例? Top

Affinity的前身叫做PiStore,曾经成功地被美国一家大型的有线网络公司部署过,并作为PiWorx应用的一部分(MozyLife)被成千上万的用户使用。

该项目的最新版本,也就是Affinity,目前还没有商业应用案例。

Affinity未来的发展方向? Top

  • 在云系统里支持最终一致性(eventual consistency)事务的扩展部署。
  • 支持全事务(ACID)的多节点扩展部署。
  • 更好地支持社交网络分析等功能,比如原生支持各种图算法(graph algorithms)的实现,以便用户能够容易、高效地调用。
  • 更好地支持流数据(streaming)应用(无缝集成时间窗口内的统计功能、触发器等)。
  • 支持包括概率图模型在内的基于图的推理。

用户如何提交bug和改进建议? Top

Affinity有一个官方论坛,在这里大家可以讨论Affinity产品的相关问题或者提供反馈。鉴于很多用户习惯于采用本国语言沟通交流,论坛除了支持英文之外,还开设了中文、俄文、法文子版块。用户可以直接用他们喜欢的语言进行讨论交流,或者向Affinity开发团队提出问题或者提供反馈。

Affinity 研发团队介绍 Top

Affinity内核是由Mark Venguerov博士从2004开始独立开发的,其他一些团队成员负责内核的稳定性测试和其他部分的开发测试(服务器、客户端工具、客服端库文件、其他系统的集成、文档、性能测试、部署安装等)。

目前,Affinity团队包括以下成员(按名字首字母):

Adam Back博士


Adam Back博士,1995年获英国埃克塞特大学计算机科学专业博士学位,英国的密码学家,也是密码破译爱好者;Hashcash算法(被用于防御垃圾邮件以及其他形式的拒绝服务攻击DoS)的发明者;实现过credlib(一个根据Stefan Brands和David Chaum提出的算法来实现的加密系统)。 他首先规范化地提出了电子邮件里的非交互式前向安全(Non-Interactive Forward-Secrecy)属性,以及首先发现了任何基于身份的加密算法(Identity Based Encryption)可以用来实现非交互式前向安全性。目前居住在马耳他,负责Affinity服务器模块。

Mark Venguerov博士


1986年毕业于莫斯科国立大学并获得理论物理硕士学位,2002年在都柏林三一学院获得计算机科学博士学位(人工智能和模式识别方向)。他在大规模计算机软件系统设计和实现上有着二十多年的理论和实践经验,曾经在多家公司担任首席科学家、首席技术官、首席架构师等职位。目前居住在加拿大蒙特利尔,是Affinity内核的作者。

Max Windisch


小提琴手、自学成才的程序员。在他近三十年的从业生涯中,在多种编程语言(Pascal、C++、Java、LISP、Python、Ruby、Erlang和ECMAscript)和不同平台上(从6502到RISC、OpenGL以及Intel平台;从AmigaOS到Windows和MacOS系统)有着二十年的专业经验。2003年起从事数据库相关项目的开发,目前居住在加拿大蒙特利尔,负责Affinity内核的测试和调试、服务器模块、文档以及客户端库程序等。

Michael Andronov


1985年毕业于莫斯科国立大学。在他三十多年的从业经历中,在多家公司从事过软件系统开发、系统集成、项目管理、软件咨询等工作。他从事的领域包括高性能软件系统的设计和开发、智能控制系统、制造业自动化、电话交换系统以及嵌入式设备等。他擅长的技术包括:面向对象设计、模型驱动设计、Executable UML、C/C++编程语言、JavaScript、HTML,、XML、RDF、Intel/Motorola/Atmel汇编,以及实时嵌入式系统、Unix/Linux/Window系统。目前居住在加拿大蒙特利尔。

李明


自2004年清华大学计算机工学硕士毕业后一直从事数据库的内核和工具的开发及其测试工作。曾参与国产数据库的研发和测试,后加入IBM主要从事DB2的联邦特性研发,目前就职于VMware中国研发中心。

林文


2007年毕业于西北工业大学软件与微电子学院并获得硕士学位。曾在港湾网络、华为北京研究所、Oracle亚洲研发中心从事网络以及嵌入式数据库开发与测试等相关工作,目前就职于VMware中国研发中心。

王长亮


2009年毕业于香港科技大学并获得数据库研究方向的硕士学位,在数据库顶级会议和期刊上发表过研究文章。自毕业后一直从事数据库开发以及云计算项目,目前就职于VMware公司Palo Alto总部。
  • 大小: 29.2 KB
  • 大小: 8.9 KB
  • 大小: 11.4 KB
  • 大小: 43 KB
  • 大小: 13.8 KB
  • 大小: 38.3 KB
  • 大小: 50.1 KB
  • 大小: 22.6 KB
  • 大小: 60.9 KB


评论 共 20 条
20 楼 xiaofan_0204 2012-08-13 13:50
19 楼 yglory612 2012-07-25 16:33
真的大开眼界啊。
18 楼 m789634521 2012-05-25 11:34
Affinity要是能完全真正面向对象的数据库,那就好了,就不要什么orm等工具了,也到时候不知对Oracle等数据库的冲击是怎样的。。。
17 楼 yongdi2 2012-05-24 23:33
现在数据库真是越来越多了,diy的趋势很明显
16 楼 cd_huangbo 2012-05-21 14:37
sourceforge 写道
goofind 写道
牛x呀,搞软件的没有近视,是怎么做到的?

玩电脑将近10年,做程序员3年,至今视力保持在5.2的飘过.....

经常打打台球有一定的效果。。。
15 楼 sourceforge 2012-05-09 12:25
goofind 写道
牛x呀,搞软件的没有近视,是怎么做到的?

玩电脑将近10年,做程序员3年,至今视力保持在5.2的飘过.....
14 楼 zhb31415926 2012-05-01 18:54
看开发人员就感觉没前途!!!
13 楼 kyan54 2012-04-28 14:47
好像数据库非常好玩。。不知道能不能支持非常蛮大的数据量。。
12 楼 achun 2012-04-09 14:14
有趣的数据库
11 楼 goofind 2012-04-08 17:56
牛x呀,搞软件的没有近视,是怎么做到的?
10 楼 shirne 2012-04-07 19:42
关心大数据量的效率
9 楼 chen_xueqian 2012-04-05 13:20
海量数据处理性能怎么样啊?
8 楼 middin 2012-04-03 23:04
将表作为类来统一管理?
面向对象了又?
7 楼 zhulongxing_sz 2012-04-01 16:28
确实很怪异??但是如果性能稳定且学习曲线不高的话,会很有取代现有流行数据库之趋势···
6 楼 allloveend 2012-03-31 10:15
没有表的概念啊!这个颠覆性的设计会产生怎样的反响
5 楼 rimoer 2012-03-30 15:06
4 楼 qqpedily 2012-03-28 17:51
大大牛级别的
3 楼 pao569952355 2012-03-28 14:39
2 楼 jAmEs_ 2012-03-27 09:10
有点怪异!
1 楼 CshBBrain 2012-03-24 11:32
都是大牛级别的

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics