你能用 Datomic 急切地将所有数据加载到内存中吗?
Can you eagerly load all data into memory with Datomic?
我之前曾问过 this 关于如何使用 Datomic 提高性能的问题,但我还没有找到好的解决方案。让我印象深刻的一件事是,当使用 Datomic 控制台执行查询时,我得到的印象是查询速度快得多。但我也注意到,与独立启动应用程序相比,使用 Datomic 控制台时启动时间和内存消耗大大增加。这对我来说意味着 Datomic Console 在我探索内容之前将所有数据拉入内存。
- 我说的对吗?
- 如果是这样,这是我可以从同行那里以编程方式自己做的事情吗?
- 如果 (2) 那么如何在 Clojure 中完成?
如 Datomic 文档中所述here,对等库在获取索引段进行查询时将其加载到(进程中的)对象缓存中。
- Am I right that this is the case?
我怀疑 Datomic 控制台是否明确选择将所有数据拉入内存,但 Datomic 控制台可能急切地遍历大量数据以显示其仪表板。
- If so, is this something I could do myself programmatically from a peer?
好吧,我想您总是可以人为地扫描所有片段。一种简单的方法是通过 Datoms API.
- 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)))))
综上所述,我完全不确定您是否应该期望此策略会提高性能。你的对象缓存最好足够大!
我之前曾问过 this 关于如何使用 Datomic 提高性能的问题,但我还没有找到好的解决方案。让我印象深刻的一件事是,当使用 Datomic 控制台执行查询时,我得到的印象是查询速度快得多。但我也注意到,与独立启动应用程序相比,使用 Datomic 控制台时启动时间和内存消耗大大增加。这对我来说意味着 Datomic Console 在我探索内容之前将所有数据拉入内存。
- 我说的对吗?
- 如果是这样,这是我可以从同行那里以编程方式自己做的事情吗?
- 如果 (2) 那么如何在 Clojure 中完成?
如 Datomic 文档中所述here,对等库在获取索引段进行查询时将其加载到(进程中的)对象缓存中。
- Am I right that this is the case?
我怀疑 Datomic 控制台是否明确选择将所有数据拉入内存,但 Datomic 控制台可能急切地遍历大量数据以显示其仪表板。
- If so, is this something I could do myself programmatically from a peer?
好吧,我想您总是可以人为地扫描所有片段。一种简单的方法是通过 Datoms API.
- 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)))))
综上所述,我完全不确定您是否应该期望此策略会提高性能。你的对象缓存最好足够大!