由Git和Elastic Search支持的JSON对象存储
项目描述
在Git支持下使用Elasticsearch作为查询后端的对象式声明性事物的冒险。
使用方法
from elasticgit import EG
from elasticgit.models import Model, IntegerField, TextField
workspace = EG.workspace('/Users/sdehaan/Desktop/test-repo/')
workspace.setup('Simon de Haan', 'simon@praekeltfoundation.org')
"""
# The model looks like this
class Person(Model):
age = IntegerField('The Age')
name = TextField('The Name')
"""
from elasticgit.tests.base import TestPerson as Person
person1 = Person({'age': 10, 'name': 'Foo'})
workspace.save(person1, 'Saving Person 1')
person2 = Person({'age': 20, 'name': 'Bar'})
workspace.save(person2, 'Saving Person 2')
person3 = Person({'age': 30, 'name': 'Baz'})
workspace.save(person3, 'Saving Person 3')
数据现在持久化在git存储库中,可以通过elasticsearch进行查询。
>>> from elasticgit import EG
>>> from elasticgit.tests.base import TestPerson as Person
>>> workspace = EG.workspace('/Users/sdehaan/Desktop/test-repo/')
>>> for person in workspace.S(Person).filter(age__gte=20):
... print person.name, person.age
...
Bar 20
Baz 30
请查看examples/目录以获取更多代码示例。
$ python -m examples.basic_usage
e6cb25f00870472fa5223d76dc361667 Baz 30
2bd470372243411c9abd8fdcb969dcf5 Bar 20
模式管理
在模式演变方面,我们遵循了Apache Avro 的示例。可以从命令行生成与Avro兼容的模式。
可以从Avro JSON模式文件重建模型定义。
示例模型文件
class TestFallbackPerson(Model):
age = IntegerField('The Age')
name = TextField('The name', fallbacks=[
SingleFieldFallback('nick'),
SingleFieldFallback('obsolete'),
])
nick = TextField('The nickname', required=False)
obsolete = TextField('Some obsolete field', required=False)
生成Avro规范文件
$ python -m elasticgit.tools dump-schema \
> elasticgit.tests.base.TestFallbackPerson > avro.json
$ python -m elasticgit.tools load-schema avro.json > models.py
生成的模型文件
# NOTE:
#
# This is an automatically generated Elasticgit Model definition
# from an Avro schema. Do not manually edit this file unless you
# absolutely know what you are doing.
#
# timestamp: 2014-10-14T18:51:23.916194
# namespace: elasticgit.tests.base
# type: record
# name: TestFallbackPerson
#
from elasticgit import models
class TestFallbackPerson(models.Model):
name = models.TextField(u"""The name""", fallbacks=[models.SingleFieldFallback('nick'),models.SingleFieldFallback('obsolete'),])
age = models.IntegerField(u"""The Age""")
obsolete = models.TextField(u"""Some obsolete field""")
_version = models.ModelVersionField(u"""Model Version Identifier""")
nick = models.TextField(u"""The nickname""")
uuid = models.TextField(u"""Unique Identifier""")
我们正在使用ConfModel的回退功能,并将其编码在Avro的模式中作为别名。这允许您回退到字段的旧名称
>>> TestFallbackPerson({'obsolete': 'oldest name', 'age': 10}).name
'oldest name'
>>> TestFallbackPerson({'nick': 'older name', 'age': 10}).name
'older name'
>>> TestFallbackPerson({'name': 'current name', 'age': 10}).name
'current name'
项目详情
关闭
弹性git-1.5.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1d2dbf18ac88d5abd3ad0a46a576a9462c1aa7aa9e98caa278b100ced481c9b2 |
|
MD5 | 1fd4cea0ae6b3c51ad211e1b85e2ef97 |
|
BLAKE2b-256 | 2d77c0fbc01fc80f8a3de60c1cfa73fe935b47c3ccc9d9d1c3c3467b3e0ecb9b |