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

时间:2017-04-25 05:59:45

标签: clojure datomic

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

  1. 我是对的,情况确实如此吗?
  2. 如果是这样,我可以通过编程方式从同伴那里做点什么吗?
  3. 如果(2)那么如何在Clojure中完成?

1 个答案:

答案 0 :(得分:2)

如同Datomic Documentation中的here所述,Peer Library在获取查询时会在(进程内)对象缓存中加载索引段。

  
      
  1. 我是对的,情况确实如此吗?
  2.   

我怀疑Datomic Console是否明确选择将所有数据都存入内存,但Datomic控制台可能会急切地遍历大量数据以显示其信息中心。

  
      
  1. 如果是这样,我可以通过编程方式从同伴那里做点什么吗?
  2.   

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

  
      
  1. 如果(2)那么如何在Clojure中完成?
  2.   
(defn scan-whole-db [db]
  (doseq [index [:eavt :aevt :avet :vaet]]
    (dorun (seq (d/datoms db index)))))

尽管如此,我不确定你应该期待这一策略的性能提升。你的对象缓存最好足够大!