ArangoDB迁移和批处理管理器
migrado的Python项目详细描述
偏头痛
ArangoDB迁移和批处理管理器。
migrado是一个命令行客户机,它可以帮助构建和运行针对您的arangodb实例的模式或数据迁移。
migrado在运行数据迁移时利用arangodb事务来确保自动回滚失败的脚本。运行架构迁移需要docker,但此时没有事务安全性。
migrado应被视为alpha软件。在生产环境中使用之前,请确保测试良好。
如果你有困难,就提出一个问题。欢迎投稿。
安装
Migrado需要Python3.5或更高版本。
$ pip install --user migrado
用法
migrado可以创建一个迁移目录,并从给定的模式文件生成一组初始集合:
$ migrado init --schema schema.yml
有关详细信息,请参见yaml schemas。如果没有指定模式,migrado将创建一个空的初始迁移。
制作新的模板迁移脚本:
$ migrado make --name rewrite_names
这将创建一个新文件migrations/0002_rewrite_names.js
(--name
是可选的),您可以根据需要对其进行编辑。有关详细信息,请参见迁移脚本。
准备就绪后,运行当前未对数据库运行的所有迁移:
$ migrado run
migrado将迁移状态存储在一个可配置的集合中,有关详细信息,请参见--help
或environment vars。
如果您编写了reverse()
迁移,则可以通过指定目标迁移ID还原到较早的点。若要还原到初始迁移:
$ migrado run --target 0001
在使用客户端时,使用--help
选项可获得有关任何命令的帮助。
环境变量
migrado使用以下环境变量:
migrado_path
:指定迁移目录的路径,替换-p
,--path
(默认值:迁移
)。migrado-db
:指定要与之交互的生成迁移的arangodb数据库名称,替换-d
,--db
(无默认值,但对于run
命令是必需的)。migrado_coll
:指定要存储迁移状态的arangodb集合名称,替换-c
,--state coll
(默认值:migrado
)。migrado_tls
:运行迁移时使用tls进行连接,替换-t
,--tls
(默认值:false
)。migrado_host
:指定运行迁移的数据库主机,替换-h
,--host
(默认值:localhost
)。migrado_port
:指定运行迁移的数据库端口,替换-p
,--port
(默认值:8529
)。migrado_user
:指定运行迁移的数据库用户名,替换-u
,--用户名
(无默认值)。migrado_pass
:指定运行迁移的数据库密码,替换-w
,--password
(无默认值)。migrado_docker_image
:指定docker映像(和可选标记)对于运行迁移的容器,替换-i
,--docker image
(默认值:arangodb
)。migrado_docker_network
:指定运行迁移的docker网络模式或名称,替换-n
,--docker network
。有效值为主机
(默认情况下,使用主机网络)或任何网络名称。migrado_docker_service
:指定运行迁移时要连接的docker服务,替换-s
,--docker service
(默认值:与migrado_host
相同的值)。
如果您的ArangoDB实例本身正在Docker上运行,那么可以配置Migrado_Docker_Network
和Migrado_Docker_Service
以便创建的容器可以轻松连接到正确的网络和服务。
对于与Docker守护进程的连接,可以接受其他环境变量;Docker_host
,Docker_tls_verify
和Docker_cert_path
。它们与Docker命令行客户端使用的相同。
yaml模式
arangodb可能是无模式的,但是在一个更大的项目中,保持模式规范是最新的仍然是有意义的,既可以用于集合及其数据结构的概述,也可以作为验证的基础。
migrado在yaml中使用基于json模式的模式模型,并可以使用此模型为数据库中可用的集合生成初始迁移。
示例架构:
---all:&all_id:type:stringreadOnly:true_key:type:stringreadOnly:true_rev:type:stringreadOnly:trueedges:&edges_from:type:string_to:type:stringcollections:books:type:objectproperties:<<:*alltitle:type:stringisbn:type:stringrequired:-title-isbnauthors:# Note, you do not actually need to specify the object schema,# but they can be used in API specs (e.g. OpenAPI) and/or validation,# and may be handled by migrado in the future.edge_collections:# authors --> books author_of:type:objectproperties:<<:*all<<:*edgesrequired:-_from-_to
迁移脚本
迁移脚本是结构化的,因此migrado和arangodb都可以轻松地解析和运行它们。此外,它们是结构化的,因此可以使用arangosh
对arangob手动运行它们。
有两种脚本,数据和架构迁移脚本。
数据迁移
您需要使用语法//write collection_name
声明要执行写操作的所有集合,因为arangob在事务期间需要此信息进行锁定。我们已明确声明以减少错误。试图写入未以这种方式声明的集合将导致迁移失败。
一般来说,反向迁移应该做与正向迁移相反的逻辑操作。forward()
和reverse()
函数可以包含ArangoDB V8引擎可以理解的任何内容,但必须完全独立。运行迁移时,这些功能之外的任何内容都将被忽略并且不可用。
下面是一个迁移脚本示例,用于在集合中添加新字段
项
项
项
:
// write thingsfunctionforward(){vardb=require("@arangodb").dbdb._query(` FOR thing IN things UPDATE thing WITH { new_field: "some value" } IN things `)}functionreverse(){vardb=require("@arangodb").dbdb._query(` FOR thing IN things REPLACE thing WITH UNSET(thing, "new_field") IN things `)}
运行ArangoDB文档中的事务时,请确保阅读限制。尤其是,事务中不允许创建和删除数据库、集合和索引。 如果迁移包含此类操作,系统将询问您是否要通过Docker运行迁移。 架构迁移的结构与数据迁移相同,但在容器中针对 架构迁移的结构与数据迁移相同,但不需要声明。允许所有操作。 下面是从上面的yaml模式生成的迁移脚本示例: 反向运行架构迁移时请小心。如您所见,上面的 Migrado版权所有©2019 Protojour AS,由麻省理工学院授权。有关详细信息,请参见license.txt。架构迁移
arangosh
运行,该容器来自官方arangob docker image。运行架构迁移时没有事务安全性。functionforward(){vardb=require("@arangodb").dbdb._createDocumentCollection("books")db._createDocumentCollection("authors")db._createEdgeCollection("author_of")}functionreverse(){vardb=require("@arangodb").dbdb._drop("books")db._drop("authors")db._drop("author_of")}
reverse()
函数将删除您的集合,如果您要在这一点之后反转。目前,对于初始迁移,您将无法执行此操作。许可证
推荐PyPI第三方库