2016-11-05 91 views
1

在datomic中,如果我正在查找一個不存在於DB中的密鑰,我猜它總是會導致緩存未命中(即使整個DB緩存在對等內存中)。所以我想這樣的請求(尋找一個非現存的鍵)將始終擊中後端數據庫(網絡訪問)並返回任何結果。它是否正確?datomic緩存和緩存未命中

回答

1

基於我對Datomic內部的理解,當沒有找到元素時與存儲交談不應該是必要的。

Datomic的覆蓋指數被實現爲分類設置和查詢引擎走這些用二進制搜索。而二進制搜索是O(log n),因爲平均和最差的情況下,所以你不會通過搜索不在數據庫中的元素來獲得大的性能點擊。

查詢(對等)是否必須與存儲進行通信與項目是否存在於數據庫中無關。當查詢引擎遍歷數據庫時,對等體中不存在的任何段都必須從存儲裝載到對等體。

+0

如果什麼DB是巨大的說,同行10 TB和可用緩存只有100 GB在這種情況下,整個數據庫將不適合在高速緩存?試圖加載缺失的數據將導致疏散舊數據? – sunillp

+0

是啊,有一個LRU緩存,試圖保持工作在同行中樹立但它會在並根據需要進行交換的東西。但是,根據搜索存在的東西還是不存在的東西,交換進出的數量並沒有真正改變太多,這只是一個普遍的工作集問題,適用於任何不能保留的數據庫其內存中的工作集。 –