你能用 Datomic 急切地将所有数据加载到内存中吗?

Can you eagerly load all data into memory with Datomic?

我之前曾问过 this 关于如何使用 Datomic 提高性能的问题,但我还没有找到好的解决方案。让我印象深刻的一件事是,当使用 Datomic 控制台执行查询时,我得到的印象是查询速度快得多。但我也注意到,与独立启动应用程序相比,使用 Datomic 控制台时启动时间和内存消耗大大增加。这对我来说意味着 Datomic Console 在我探索内容之前将所有数据拉入内存。

  1. 我说的对吗?
  2. 如果是这样,这是我可以从同行那里以编程方式自己做的事情吗?
  3. 如果 (2) 那么如何在 Clojure 中完成?

如 Datomic 文档中所述here,对等库在获取索引段进行查询时将其加载到(进程中的)对象缓存中。

  1. Am I right that this is the case?

我怀疑 Datomic 控制台是否明确选择将所有数据拉入内存,但 Datomic 控制台可能急切地遍历大量数据以显示其仪表板。

  1. If so, is this something I could do myself programmatically from a peer?

好吧,我想您总是可以人为地扫描所有片段。一种简单的方法是通过 Datoms API.

  1. If (2) then how can this be done in Clojure?
(defn scan-whole-db [db]
  (doseq [index [:eavt :aevt :avet :vaet]]
    (dorun (seq (d/datoms db index)))))

综上所述,我完全不确定您是否应该期望此策略会提高性能。你的对象缓存最好足够大!