灵活的不可变实体数据库
savior的Python项目详细描述
救世主数据库
由lmdb支持的嵌入式无模式数据库库。
目前正在开发中,还不稳定。 接口和磁盘格式可能在以后的版本中更改,恕不另行通知。 你可能不应该用它来存储重要的数据。
以ISC License许可。
目标
- 提供语言中立的磁盘格式
- 利用lmdb的属性,如事务、仅追加写入和零拷贝读取
- 提供直观的无模式实体建模和查询界面
- 在数据库中存储所有值的不可变历史记录
开发人员界面
您可以对事务中的实体执行三个操作:
- 创建
- 获取
- 更新
- 查询
实体在概念上就像一个有属性和值的字典。
表是数据库中用于存储实体的独立部分, 通常具有相似的属性集。
磁盘格式
同一类型的所有实体都存储在一个内部lmdb数据库中 不能保证实体具有一致的架构。
实体作为一系列带时间戳的属性更改存储在磁盘上。
- 键值项的格式为
(uuid, timestamp, attribute) -> value
uuid
是自动生成的实体idtimestamp
是自动生成的条目附加时间戳attribute
和value
是更新的实体键值条目
不修改数据以进行更新,只追加数据以指示实体已更改。
存储格式版本作为整数存储在一个特殊的内部数据库中
名为_metadata
,位于名为version
的键上。
_metadata
表的键和值也用messagepack编码。
您可以通过Database.VERSION
访问存储格式版本。
更改日志
此文档遵循Keep a Changelog格式。
可在PyPI as ^{
0.2.2-2019-08-06
固定
- 修正了
created_at
日期都来自第一个实体的错误
0.2.1-2019-08-06
更改
- 打开数据库会向没有模式版本标识符整数的数据库添加模式版本标识符整数
添加了
- 添加了
Database.VERSION
以获取存储格式版本 - 向
query
添加了created_at
选项,以便向实体添加一个属性,指示它们是何时创建的
0.2.0-2019年7月15日
移除
- 已删除
Database.open_tables
,因为现在打开数据库时需要表
更改
- 为了与
Transaction.fetch
保持一致,将 - 将
Database.open
行为更改为在初始化时需要表名 - 更改了
Transaction
方法,如果使用的表名不是用
Transaction.create
重命名为Transaction.store
0.1.2-2019年7月15日
添加了
Database.create_tables
在数据库中创建表- ^ {CD15> }打开数据库 中的现有表
Database.close
手动关闭数据库
0.1.1-2019年7月15日
添加了
- 无法使用上下文管理器时手动关闭事务的选项
0.1.0-2019年7月15日
添加了
- LMDB上的初始无模式不可变接口