VOYAGE: 在文档数据库中持久化对象
Voyage是由Esteban Lorenzano开发的一个小型持久化框架,它是对象和持久化机制之间的一个中间层,通是NoSQL数据库。这本小册子最初是由Esteban Lorenzano撰写的一些博客文章,Johan Fabry和Stéphane Ducasse对这些文章进行了广泛的修改,包括Sabine Manaa和Norbert Hartl分享的其他信息。这成为了《企业Pharo》一书中的章节,该书可以在 http://books.pharo.org 上找到。由于本章在没有制作完整版本的情况下编辑起来很复杂,而且出现了Stephane Ducasse撰写的《超级英雄教程》等额外材料,因此当前的小册子是所有来源的合并,将是最积极维护的文档。
1.1 Voyage是什么?
它是纯粹面向对象的,目标是为大多数觉的开发用途提供最小化的API。Voyage是不同后端的通用层,但目前它只支持两个:内存层和MongoDB数据库和UnqLite的后端。
内存层对于快速原型应用程序和在没有数据库后端的情况下进行初始开发非常有用,例如使用Pharo映像作为持久性机制。
MongoDB数据库后端将对象存储在一个面向文档的数据库中。在MongoDB中,每个存储的实体都是一个JSON风格的文档。这种以文档为中心的特性允许以相当简单的方式持久化复杂的对象模型。MongoDB不像Gemstone、Magma或Omnibase那样是一个对象数据库,因此在对象和文件之间仍然有一个小缺口需要弥合。为了弥补这一差距,Voyage包含了一个将对象转换为文档和从文档转换为对象的映射器。当使用关系数据库时,该映射器等效于对象关系映射器(ORM)。虽然这种映射器不能解决从对象到数据库的所有已知阻抗不匹配问题,但我们发现,使用文档数据库比ORM和关系数据库的组合更适合对象世界。这是因为文档数据库倾向于为对象世界的动态特性提供更好的支持。
Voyage 提供了将对象存储在数据库中的默认方式。这方面的细粒度配置可以使用Magritte描述来执行。Voyage还包括一个查询API,它允许从MongoDB数据库中检索特定对象。我们将在本文中讨论这些特性中的每一个。
1.2 Voyage 的愿景
以下是驱动Voyagegantry设计原则:
- 它应该很简单。Voyage可以最大限度地减少开发人员的描述。
- 它应该确保对象的身份。Voyage可以确保不会出现不一致的情况,即一个对象在重新加载时,其身份与原来的身份不同。
- 它应该提供错误处理
- 它应该尽量减少通信。Voyage实现了一个连接池。
Voyage没有定义自己的查询语言,而是使用底层后端查询语言。您必须使用 MonagDB 查询语言,即使您可以使用块来定义查询,您也可以使用JSON字典来表达查询,因为MonaoDB内部使用的是JSON。
1.3 目录
这本小册子有好几章
- 一个开始使用Voyage的简单教程
- 然后对API进行更全面的概述
- 最后一章介绍了技巧和窍门的收集
1.4 加载 Voyage
要安装Voyage,包括对MongoDB数据库的支持,请转到 Configurations Browser (在 World 菜单/Tools中),并加载 ConfigurationOfVoyageMongo.或者在 Workspace中执行:
Gofer it
url: 'http://smalltalkhub.com/mc/estebanlm/Voyage/main';
configurationOf: 'VoyageMongo';
loadStable.
这将会加载将对象执久化到Mongo数据库中所需要的全部内容。
[注] Voyage 已经托管到 github了,安装 MongoDB 支持及 Memory 支持的方法为:
Metacello new
repository: 'github://pharo-nosql/voyage/mc';
baseline: 'Voyage';
load: #('mongo tests' 'memory tests').