MongoDB增量迁移脚本

介绍

增量软件开发过程需要增量数据库迁移策略。

我记得在一个企业应用程序上工作,其中hibernate.hbm2ddl.auto是默认的数据迁移工具。

更新生产环境需要进行大量准备,并且迁移脚本仅在现场创建。 意外错误可能导致生产数据损坏。

救援的增量更新

增量数据库更新是一项技术功能,在最初的应用程序开发迭代中需要解决。

我们过去经常开发自己的自定义数据迁移实现,而花时间在编写/支持框架上总是与您当前的项目预算相抵触。

项目必须包含应用程序代码和所有关联的数据库架构/数据更新脚本。 使用增量迁移脚本可以使我们自动化部署过程并利用连续交付的优势。

如今,您不必实施数据迁移工具, Flyway的工作要比我们以前所有的自定义框架都要好。 必须按照定义明确的命名约定将所有数据库架构和数据更改记录在增量更新脚本中。

RDBMS迁移计划同时解决架构和数据更改。 分离架构和数据更改总是好的。 集成测试可能仅将架构迁移脚本与测试时间相关的数据结合使用。

Flyway支持所有主要的关系数据库系统,但对于NoSQL(例如MongoDB),您需要查找其他地方。

蒙吉兹

Mongeez是一个开源项目,旨在自动化MongoDB数据迁移。 MongoDB是无架构的,因此迁移脚本仅针对数据更新。

整合mongeez

首先,您必须定义一个mongeez配置文件:

mongeez.xml

<changeFiles>
    <file path="v1_1__initial_data.js"/>
    <file path="v1_2__update_products.js"/>
</changeFiles>

然后添加实际的迁移脚本:

v1_1__initial_data.js

//mongeez formatted javascript
//changeset system:v1_1
db.product.insert({
    "_id": 1,
    "name" : "TV",
    "price" : 199.99,
    "currency" : 'USD',
    "quantity" : 5,
    "version" : 1
});
db.product.insert({
    "_id": 2,
    "name" : "Radio",
    "price" : 29.99,
    "currency" : 'USD',
    "quantity" : 3,
    "version" : 1
});

v1_2__update_products.js

//mongeez formatted javascript
//changeset system:v1_2
db.product.update(
    {
        name : 'TV'
    },
    {
         $inc : {
             price : -10,
             version : 1
         }
    },
    {
        multi: true
    }
);

而且您还需要添加MongeezRunner:

<bean id="mongeez" class="org.mongeez.MongeezRunner" depends-on="mongo">
	<property name="mongo" ref="mongo"/>
	<property name="executeEnabled" value="true"/>
	<property name="dbName" value="${mongo.dbname}"/>
	<property name="file" value="classpath:mongodb/migration/mongeez.xml"/>
</bean>

跑步mongeez

当应用程序首次启动时,将分析增量脚本,并且仅在必要时运行:

INFO  [main]: o.m.r.FilesetXMLReader - Num of changefiles 2
INFO  [main]: o.m.ChangeSetExecutor - ChangeSet v1_1 has been executed
INFO  [main]: o.m.ChangeSetExecutor - ChangeSet v1_2 has been executed

Mongeez使用单独的MongoDB集合来记录以前运行的脚本:

db.mongeez.find().pretty();
{
        "_id" : ObjectId("543b69eeaac7e436b2ce142d"),
        "type" : "configuration",
        "supportResourcePath" : true
}
{
        "_id" : ObjectId("543b69efaac7e436b2ce142e"),
        "type" : "changeSetExecution",
        "file" : "v1_1__initial_data.js",
        "changeId" : "v1_1",
        "author" : "system",
        "resourcePath" : "mongodb/migration/v1_1__initial_data.js",
        "date" : "2014-10-13T08:58:07+03:00"
}
{
        "_id" : ObjectId("543b69efaac7e436b2ce142f"),
        "type" : "changeSetExecution",
        "file" : "v1_2__update_products.js",
        "changeId" : "v1_2",
        "author" : "system",
        "resourcePath" : "mongodb/migration/v1_2__update_products.js",
        "date" : "2014-10-13T08:58:07+03:00"
}

结论

要使部署过程自动化,您需要创建自包含包,其中包含字节码和所有关联的配置(xml文件,资源包和数据迁移脚本)。 在开始编写自己的自定义框架之前,您应该始终调查可用的开源替代方案。

翻译自: https://www.javacodegeeks.com/2014/10/mongodb-incremental-migration-scripts.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值