使用clojureql或STM +异步写入?

Zub*_*air 3 persistence caching clojure

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

Ale*_*ler 6

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

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

后写也有很多缺点:

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

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