首页 > 数据库 >VOYAGE: 在文档数据库中持久化对象

VOYAGE: 在文档数据库中持久化对象

时间:2024-02-18 12:33:59浏览次数:27  
标签:VOYAGE Voyage 对象 MongoDB 数据库 映射器 文档

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 目录

这本小册子有好几章

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').

1.5 安装你的文档数据库(MongoDB) (略)

标签:VOYAGE,Voyage,对象,MongoDB,数据库,映射器,文档
From: https://www.cnblogs.com/zh-geek/p/18019080

相关文章

  • mysql创建数据库排序规则utf8_general_ci和utf8_unicode_ci区别
    在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_general_ci而不是utf8_unicode_ci呢?ci是caseinsensitive,即"大小写不敏感",a和A会在字符判断中会被当做一样的;bin是二进制,a和A会别区别对待。例如你运行:SELECT*FR......
  • Gorm与数据库
    本篇是对上一篇博客的继续补充(当然也可以视作独立的一篇)。友情提示,本篇博客中用到了数据库可视化工具Navicat。另外,本篇博客的所有代码都可以从这里获取。建立大致项目结构Gorm是一个可以操作数据库的框架。为了更方便观察对数据库的操作,我们先建立一个基础从项目结构:只有一个......
  • 【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......
  • 【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......
  • Navicat Premium 16:打破数据库界限,实现高效管理mac/win版
    NavicatPremium16是一款功能强大的数据库管理工具,旨在帮助用户更轻松地连接、管理和保护各种数据库。该软件支持多种数据库系统,如MySQL、Oracle、SQLServer、PostgreSQL等,并提供了直观的图形界面,使用户能够轻松地完成各种数据库操作。→→↓↓载NavicatPremium16mac/win版......
  • 《安富莱嵌入式周报》第332期:铷时钟控制板,航天战斗机C++代码标准,免费开源芯片设计,在线
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版https://www.bilibili.com/video/BV1tU421d7ZK/目录:1、Rubidium铷时钟控制板2、开源小设计,简易万用表连通性测试仪3、免费开源芯片设计软件Electric4、在线电路仿......
  • Asp.Net Core访问阿里云MongoDB云数据库
    Asp.NetCore访问阿里云MongoDB云数据库选择.NetCore技术栈开发跨平台软件解决方案,投入少,产出快,有助于企业内部降本增效。MongoDB的实体类增加字段不用迁移数据库,适合需求经常变化的应用场景。如果是企业内部小型应用,拉一个MongoDB容器即可,如果要进一步考虑多节点冗余,高可用,异地......
  • (学习日记)四、数据库MySQL
    1.初识网站默认编写的网站是静态的动态需要用到web框架的功能fromflaskimportFlask,render_templateapp=Flask(__name__)@app.route("/index")defindex():users={"Wu":"1","Liu":"2","Deng":"3"}#此处的数......
  • MSSQL Server 备份数据库脚本
    备份数据库脚本,实现如下脚本1.定时备份2. 平日以N开头,周一以W开头,每月1号以M开头,每年1月1日以Y开头, (保留最近7天,4周,12月和10年的备份)3.每周一还原备份到test库,并将密码改为123 declare@bakfilevarchar(100),@dbvarchar(100),@prevarchar(......
  • MySQL 主从数据库同步是如何实现的?
    回顾我们之前讲MySQL相关的几节课程,你会发现 主从同步有多重要:解决数据可靠性的问题需要用到主从同步;解决MySQL服务高可用要用到主从同步;应对高并发的时候,还是要用到主从同步。我们在运维MySQL集群时,遇到的很多常见的问题,比如说:为什么从节点故障会影响到主节点?为......