【问题标题】:datomic caching and cache miss数据缓存和缓存未命中
【发布时间】:2016-11-08 04:27:08
【问题描述】:

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

【问题讨论】:

    标签: caching datomic


    【解决方案1】:

    根据我对 Datomic 内部结构的理解,没有必要在找不到元素时与存储通信。

    Datomic 的覆盖索引以排序集的形式实现,查询引擎通过二分搜索遍历这些索引。二进制搜索的平均和最差情况都是 O(log n),因此搜索不在数据库中的元素不会对性能造成很大影响。

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

    【讨论】:

    • 如果数据库很大,比如 10 TB,而对等方的可用缓存只有 100 GB,在这种情况下,整个数据库将无法放入缓存中怎么办?尝试加载丢失的数据会导致旧数据撤出?
    • 是的,有一个 LRU 缓存试图将工作集保留在对等体上,但它会根据需要交换内容。但是,根据您是搜索存在的东西还是不存在的东西,交换东西的数量并没有真正改变太多,这只是一个普遍的工作集问题,适用于任何无法保留的数据库它在内存中的工作集。
    猜你喜欢
    • 2012-04-21
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多