【发布时间】:2014-08-27 13:00:36
【问题描述】:
我惊讶地发现,datomic 中的查询结果并不是惰性的,而实体是惰性的。
我缺少这个选择是否有明显的理由?有人可能想要(映射 some-fn(获取 100 个包含数百万个查询结果的查询))似乎是合理的,但这会强制评估整个实体 ID 集,不是吗?
有没有办法直接从查询中获取惰性序列(实体 ID),还是必须先将它们加载到内存中,而惰性只能通过实体获得?
【问题讨论】:
-
我看不到明显的理由,但这看起来是一个微妙的问题。根据文档,即使底层数据集不需要,查询中的每个中间步骤都必须适合内存。这似乎是结果也必须适合内存的原因。我猜这与数据记录的工作方式或他们如何实现它有关。这个要求和缺少惰性查询 API 是否相关尚不清楚,但这是我最好的猜测。另请注意,即使聚合功能仍被标记为 beta。
-
至于您的第二个问题,
datoms和seek-datoms是您最接近的:它们提供对原始数据的惰性访问。
标签: clojure lazy-evaluation datomic