未知
项目描述
一个用于Python的分布式、版本化数据存储
python-gitmodel是一个使用Git进行版本控制和远程同步来持久化对象的框架。
为什么?
根据Git的README,Git是一个“愚蠢的内容跟踪器”。这意味着您不仅限于在git中存储源代码。本项目旨在提供一个对象级接口,以将git用作无模式的数据存储,并提供利用git强大版本控制功能的工具。
python-gitmodel允许您使用Python建模您的数据,并提供一个易于使用的接口来将数据存储为git对象。
python-gitmodel基于libgit2,Git核心方法的纯C实现。这意味着我们不是通过shell调用git命令,而是以git的本地速度使用git。
它的优点是什么?
无模式数据存储
永不丢失数据。历史永远保留,并可以使用git工具恢复。
分支和合并您的生产数据
python-gitmodel可以与不同的分支一起工作
对您的数据进行分支或标签快照
使用分支在生产数据上进行实验,例如,测试迁移
非常适合内容驱动型应用程序
示例用法
下面我们将介绍一个基本平面页CMS的使用场景。
基本模型创建
from gitmodel.workspace import Workspace
from gitmodel import fields
ws = Workspace('path/to/my-repo/.git')
class Page(ws.GitModel):
slug = fields.SlugField()
title = fields.CharField()
content = fields.CharField()
published = fields.BooleanField(default=True)
工作区可以看作是你的git工作目录。它还充当pygit2“管道”的“陶瓷”层。与工作目录不同,Workspace类不使用仓库的INDEX和HEAD文件,而是将这些文件在内存中跟踪。
保存对象
page = Page(slug='example-page', title='Example Page')
page.content = '<h2>Here is an Example</h2><p>Lorem Ipsum</p>'
page.save()
print(page.id)
# abc99c394ab546dd9d6e3381f9c0fb4b
默认情况下,对象会获得一个自动ID字段,保存为Python UUID十六进制(不要将这些与git哈希混淆)。您可以轻松地自定义模型中哪个字段作为ID字段,例如
class Page(ws.GitModel):
slug = fields.SlugField(id=True)
# OR
class Page(ws.GitModel):
slug = fields.SlugField()
class Meta:
id_field = 'slug'
对象默认不会提交到仓库。但是,它们将被写入对象数据库作为树和blob。Workspace.index对象是一个pygit2.Tree,它包含未提交的数据。它与Git的索引类似,但指针存储在内存中。
创建提交很简单
oid = page.save(commit=True, message='Added an example page')
commit = ws.repo[oid] # a pygit2.Commit object
print(commit.message)
您可以使用pygit2访问之前的提交,甚至查看对象两个版本之间的差异。
# walking commits
for commit in ws.walk():
print("{}: {}".format(commit.hex, commit.message))
# get a diff between two commits
head_commit = ws.branch.commit
prev_commit_oid = head_commit.parents[0]
print(prev_commit.diff(head_commit))
可以通过id轻松检索对象
page = Page.get('example-page')
print(page.content)
买者注意
Git本身性能并不出色。如果您需要您的基于git的数据在生产环境中表现良好,您需要给它一个“伙伴”。由于python-gitmodel可以以多种方式使用,因此如何优化它取决于您。
状态
该项目正在进行大量开发,API在1.0版本发布前可能会发生巨大变化。目前,只能使用基本模型创建和保存实例。
待办事项
缓存?
索引?
查询API?
完整文档
python-gitmodel受到了Rick Olson的演讲“Git,一个愚蠢的NoSQL数据库”和Paul Downman的GitModel(用于Ruby)的启发。
项目详情
praekelt-python-gitmodel-0.1.3.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | be16519646cae0593dd67d8ce171d06a320d42e35265a92a443f8d4a6cd80c81 |
|
MD5 | 8867676a879bf250255c73f5a475abe7 |
|
BLAKE2b-256 | af7a5d000fa117d22c024f194302c772987263f4e43749ba3ea316fa1ae4b990 |