复杂且正交的持久性

主要观点

  • 未保存的内容会丢失,编写编辑器时可实现“自动备份”功能但实现困难。
  • 有支持持久化的语言如 PS-algol、M(MUMPS)、Bank Python、COBOL 等,其持久化方式是将持久化代码写入程序源代码,可称为“复杂持久化”;还有“正交持久化”,即程序状态自动保存,无需程序员特殊工作。
  • 可将正交持久化应用于单个进程,需要支持原子访问、快照、系统调用跟踪和沙箱等的技术,如 ZFS、rr、bubblewrap 等,能实现进程状态快照、重放等功能。
  • 这种正交持久化系统可解锁多种工具,如协作终端、终端“保存/撤销”、查询文件修改等,且很多工具构建简单,虽可能有一定性能开销但可优化。
  • 实现进程内持久化有两种方式,各有优缺点,可根据内存和 CPU 使用情况选择。

关键信息

  • 实现自动备份困难,可序列化数据结构并写入 SQLite 数据库。
  • 1983 年的论文介绍 PS-algol 语言,MUMPS 等在医疗、金融等系统中工作方式类似。
  • 正交持久化的例子有 hibernation、虚拟虚拟机中的休眠。
  • 实现单个进程的正交持久化需要特定技术,如 ZFS、rr、bubblewrap。
  • 这种系统可解锁多种工具,且不同工具所需的持久化程度不同。
  • 实现进程内持久化的两种方式及优缺点。

重要细节

  • M 语言中持久化数据到数据库的代码为SET ^table("column","primary key")="value"
  • Bank Python 代码为db["/my_table"] = Table([("etf", str), ("shares", float)], ["SPY", 1200.0])
  • COBOL 代码为IDENTIFICATION DIVISION.PROGRAM-ID. FILES.ENVIRONMENT DIVISION...等。
  • 实现单个进程持久化所需技术的具体功能和作用,如 ZFS 的原子访问等。
  • 不同工具如协作终端、终端“保存/撤销”等的具体功能和使用场景。
  • 实现进程内持久化两种方式在内存和 CPU 使用情况不同时的表现。
阅读 10
0 条评论