灵活的不可变实体数据库

savior的Python项目详细描述


救世主数据库

由lmdb支持的嵌入式无模式数据库库。

目前正在开发中,还不稳定。 接口和磁盘格式可能在以后的版本中更改,恕不另行通知。 你可能不应该用它来存储重要的数据。

ISC License许可。

目标

  • 提供语言中立的磁盘格式
  • 利用lmdb的属性,如事务、仅追加写入和零拷贝读取
  • 提供直观的无模式实体建模和查询界面
  • 在数据库中存储所有值的不可变历史记录

开发人员界面

您可以对事务中的实体执行三个操作:

  • 创建
  • 获取
  • 更新
  • 查询

实体在概念上就像一个有属性和值的字典。

表是数据库中用于存储实体的独立部分, 通常具有相似的属性集。

磁盘格式

同一类型的所有实体都存储在一个内部lmdb数据库中 不能保证实体具有一致的架构。

实体作为一系列带时间戳的属性更改存储在磁盘上。

  • 键值项的格式为(uuid, timestamp, attribute) -> value
  • uuid是自动生成的实体id
  • timestamp是自动生成的条目附加时间戳
  • attributevalue是更新的实体键值条目

不修改数据以进行更新,只追加数据以指示实体已更改。

存储格式版本作为整数存储在一个特殊的内部数据库中 名为_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
  • 保持一致,将Transaction.create重命名为Transaction.store
  • Database.open行为更改为在初始化时需要表名
  • 更改了Transaction方法,如果使用的表名不是用

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上的初始无模式不可变接口

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中