可持续案例类序列化库
serium的Python项目详细描述
serium
固有地提供数据弹性的序列化库。 结构随时间演变。
这种弹性是通过提供 以保留版本信息的方式固有的可序列化,以及 在执行任务的同时动态无缝地迁移旧数据结构 反序列化。
这个库对数据结构演进采取的方法是 不同于许多其他序列化格式。而不是定义 协议级的演进(例如,添加新字段 空的、不推荐的字段、转换类型等),它定义了进化 在域级别。开发人员显式定义转换函数 在不同版本之间,基础结构按顺序使用这些功能 为应用程序代码提供每个对象的当前版本。 这种方法允许根据实际情况更改数据结构 业务/开发需求,不限于协议级别 变化:
与此方法相关的一个概念是,代码库本身充当 "模式存储库",保存所有"实时版本"的结构。 结合转换功能,可以管理 使用标准代码工具和实践来改进数据。
这个库的初始实现是在python中,它是 动态类型。这需要对 类型化的case类,在其他语言中可能是 由语言本身提供。
主要功能
- 严格类型的、不可变的、嵌套的case类(包括递归的 定义)
- 支持案例类版本管理和强大的模式 代码库内部的演进
- 固有的序列化功能(目前仅限json)
- 读取时动态数据迁移
- 支持子类型-用于模拟 序列化数据。超类型可以包含"选择器字段",其中 表示另一个字段的实际类型,与 库的版本管理功能。
设计假设
- CPU/内存比开发人员花费的时间和时间更便宜 功能
- 从任何维护/迁移工作中分离特性发布是 好事
- 在许多现实中,数据流的逻辑演化是必需的。 世界用例
- 代码库和编程语言可以作为 "分布式模式存储库",利用标准代码 管理工具
- 在许多情况下,迁移逻辑相对简单,而且成本 在读取期间应用它(CPU+延迟)如果它意味着更少的话是值得的 生产障碍
由于这些设计假设,库当前已优化 主要是为了便于开发和迭代,以及 开发人员的工作和devops的工作。显然,一旦这些概念 足够稳定,速度/空间优化将成为焦点。
未来计划
- 至少一个严格类型的实现(例如scala)
- 其他序列化格式
- 较高级别的类型(如URL、电话号码等)
- 作为类型定义的一部分,对数据进行更高级别的约束 (例如有效的URL、正值、非空、范围内等)
- 子类型的动态搜索范围
- 创建idl或重用现有idl,如protobuf
- 类型化枚举(当前仅为常规字符串)
- 键入的时间戳(当前仅为整数或长)
- 不太冗长的语法