流行是一种简单的技术,可基于二进制序列化和预写日志记录为内存中的对象模型提供ACID属性。它是这样的:
- 从快照开始。序列化对象模型并将其写入文件。
- 创建日记文件。对于对对象模型的每次调用,请序列化该调用及其参数。
- 当日志太大时,您将要关闭,或者它很方便,请执行检查点:编写新快照并截断日志。
- 要回滚或从崩溃或停电中恢复,请加载上一个快照并重新执行日志中记录的所有调用。
进行此工作所需的预防措施为:
- 不要让易变的对象引用转义或进入流行层。您需要某种代理或OID方案,就像在进行RPC一样。(这是一个常见的新手错误,被昵称为“ 洗礼问题 ”。)
- 调用可到达的所有逻辑都必须是完全确定性的,并且不得执行对业务逻辑有意义的I / O或OS调用。写入诊断日志可能没问题,但是获取系统时间或启动异步委托通常不行。这样一来,即使在不同的计算机上或在不同的时间还原日志,日志也可以相同地重放。(大多数流行代码提供备用时间调用以获取事务时间戳记。)
- 作者并发在日记解释中引入了歧义,因此被禁止。
是因为...
- 人们试图在一个不太适合*的项目中使用它之后,对他们产生了不良品味?
- 克劳斯·威斯特费尔德(Klaus Wuestefeld)的强烈倡导 使人们无法接受?
- 喜欢命令式编程模型的人不喜欢将I / O与计算分离,而宁愿将计算与I / O和线程调用交错?
- 流行层在概念上是如此简单,并且与它们所居住的框架的特性紧密相关,以至于它们通常是针对项目定制的,这使它们过于陌生/不合标准/充满风险?
- 保持直截了当是很困难的,您必须注意不要这样做?
- 新手的脑袋似乎在遇到与他们在学校学会编写的不是两层数据库驱动的应用程序相同的东西时爆炸吗?;)
*在RAM中整个数据集拟合,你不需要作家的并发,并且你不需要做即席查询,报表,或导出到数据仓库。通过对SQLite的歉意,普遍性是对保存文件的一种改进,而不是Oracle的替代。
啊哈 我想知道它是否有名字。这对我来说总是很有意义,我只是没有一个名字而已。
—
greyfade
你在说什么?
—
TheLQ's
这是我第一次听说。它是什么?
—
琼(Jonn)2010年
添加说明。
—
杰弗里·汉汀
哦,我知道这个概念,但是我从来没有做过。对我来说看起来很漂亮。我很确定这不是很多开发人员“绝对讨厌”的东西。
—
乔恩2010年