使用clojureql或STM +异步写入?

时间:2010-12-30 11:16:17

标签: caching clojure persistence

我正在使用clojure编写一个需要保留其数据的应用程序,但是如果丢失了一些数据,那么这不是灾难性的。我想知道每次我想访问数据时是否应该使用ClojureQL,或者我应该使用STM + ClojureQL,只是在更新/写入时异步保存数据。有谁知道每种方法的任何优点/缺点。有没有人尝试过异步持久化方法?

1 个答案:

答案 0 :(得分:6)

这是改善写入延迟的经典方法,通常称为后写。将更新捆绑在一起并在单独的异步线程中执行它们有几个好处:

  • 从更新路径中删除(可能很慢)对持久性存储的写入
  • 如果您可以批量更新,效率更高
  • 可能允许合并更新(如果您在同一批次中对同一个键进行多次写入,则可以删除除最后一个之外的所有键,并且根本不写中间值)

后写也有很多缺点:

    如果数据仅存储在内存中,
  • 写入可能会丢失
  • 有时候让后台异步线程与其他事务系统一起正确参与
  • 是一项挑战
  • 后台线程可以备份,因为它们正在处理操作的“慢”部分;当用于加速偶尔的峰值并且可以在低谷期间恢复时,后写效果最佳
  • 内存写入和存储写入之间的后续读取将看到旧值,除非您还检查内存中状态 - 这可能会导致混淆或读取时可能很昂贵。因此,后写通常与读取缓存一起使用,其中所有读取都通过缓存进行。

这些当然与ClojureQL或STM无关。 :)