第 3.2 和 3.9 节要求 Always 策略下,如果 WAL Entry 引用 Value Log record,发布 WAL Batch 前被引用对象也必须已持久化。大值写入流程是先 append + fsync Value Log record,再写入并 fsync WAL Batch。
Always
该顺序能避免恢复后出现悬空 Value Log pointer,但大 value 写入会引入至少两次 fsync:
这与项目“写吞吐极致”的核心目标存在潜在冲突。
在大 value 或混合负载下,默认 Always 策略可能因双 fsync 显著降低写吞吐,并削弱 group commit 的收益。
在设计文档中明确这是有意取舍,或评估替代方案:
docs/design.md:130
docs/design.md:746
docs/design.md:760
No dependencies set.
The note is not visible to the blocked user.
背景
第 3.2 和 3.9 节要求
Always策略下,如果 WAL Entry 引用 Value Log record,发布 WAL Batch 前被引用对象也必须已持久化。大值写入流程是先 append + fsync Value Log record,再写入并 fsync WAL Batch。问题
该顺序能避免恢复后出现悬空 Value Log pointer,但大 value 写入会引入至少两次 fsync:
这与项目“写吞吐极致”的核心目标存在潜在冲突。
风险
在大 value 或混合负载下,默认
Always策略可能因双 fsync 显著降低写吞吐,并削弱 group commit 的收益。建议
在设计文档中明确这是有意取舍,或评估替代方案:
Always下优先保证无悬空指针参考
docs/design.md:130WAL Entry 引用外部持久化对象的发布要求docs/design.md:746Value Log 写入流程docs/design.md:760Value Log 与 WAL 的崩溃一致性