【发布时间】:2016-11-08 04:27:08
【问题描述】:
在 datomic 中,如果我正在寻找一个不存在于 DB 中的键,我想它总是会导致缓存未命中(即使整个 DB 都缓存在对等方的内存中)。所以我猜这样的请求(寻找一个不存在的密钥)总是会命中后端数据库(网络访问)并且不返回任何结果。这是正确的吗?
【问题讨论】:
在 datomic 中,如果我正在寻找一个不存在于 DB 中的键,我想它总是会导致缓存未命中(即使整个 DB 都缓存在对等方的内存中)。所以我猜这样的请求(寻找一个不存在的密钥)总是会命中后端数据库(网络访问)并且不返回任何结果。这是正确的吗?
【问题讨论】:
根据我对 Datomic 内部结构的理解,没有必要在找不到元素时与存储通信。
Datomic 的覆盖索引以排序集的形式实现,查询引擎通过二分搜索遍历这些索引。二进制搜索的平均和最差情况都是 O(log n),因此搜索不在数据库中的元素不会对性能造成很大影响。
查询(对等体)是否必须与存储对话与该项目是否存在于数据库中无关。当查询引擎遍历数据库时,对等点中不存在的任何段都必须从存储加载到对等点。
【讨论】: