2016-11-05 74 views
1

在datomic中,如果我正在查找一个不存在于DB中的密钥,我猜它总是会导致缓存未命中(即使整个DB缓存在对等内存中)。所以我想这样的请求(寻找一个非现存的键)将始终击中后端数据库(网络访问)并返回任何结果。它是否正确?datomic缓存和缓存未命中

回答

1

基于我对Datomic内部的理解,当没有找到元素时与存储交谈不应该是必要的。

Datomic的覆盖指数被实现为分类设置和查询引擎走这些用二进制搜索。而二进制搜索是O(log n),因为平均和最差的情况下,所以你不会通过搜索不在数据库中的元素来获得大的性能点击。

查询(对等)是否必须与存储进行通信与项目是否存在于数据库中无关。当查询引擎遍历数据库时,对等体中不存在的任何段都必须从存储装载到对等体。

+0

如果什么DB是巨大的说,同行10 TB和可用缓存只有100 GB在这种情况下,整个数据库将不适合在高速缓存?试图加载缺失的数据将导致疏散旧数据? – sunillp

+0

是啊,有一个LRU缓存,试图保持工作在同行中树立但它会在并根据需要进行交换的东西。但是,根据搜索存在的东西还是不存在的东西,交换进出的数量并没有真正改变太多,这只是一个普遍的工作集问题,适用于任何不能保留的数据库其内存中的工作集。 –