试图计数datomic实体与此查询Datomic超出GC开销限制
(d/q '[:find (count ?a) . :where [?a :type]] (d/db (conn)))
OutOfMemoryError GC overhead limit exceeded [trace missing]
工作想如果我试着算像
(d/q '[:find (count ?a) :where [?a :type "psp"]] (d/db (conn)))
[[400541]]
较小的子集使用开发后端。
它是我做错了什么,或者我应该尝试不同的后端,还是别的?
这里是堆栈跟踪http://pastebin.com/C76mEhEJ这导致datomic.datalog
内的某处。
你的堆设置是什么?这看起来像你没有足够的内存用于中间表示(仍然是一组元组,尽管你已经集合了它)。 –
@BenKamphaus如果我正确地理解了jvm选项,我的初始和最大堆大小是2Gb和4Gb,这里是jvm输出http://pastebin.com/eRpEXEuv,试图用“-Xmx6g”“-Xms4g”运行,结果和这几乎是我所有的公羊。顺便说一句,你是什么意思的中间结果,'?a'(整个数据集)在我的情况? – cvb
是的,Datomic中的查询是渴望的,查询中的聚合对所有匹配[_:type _ _ _]的元组进行操作。你可以尝试使用datoms进行数据库扫描的懒序列操作,例如:(count(dedupe(map#(:e%)(seq(d/datoms(d/db conn):aevt:type)))) )' –