JanusGraph之Cache
- 2020 年 2 月 17 日
- 筆記
- Caching(緩存) JanusGraph employs multiple layers of data caching to facilitate fast graph traversals.(JanusGraph採用多層數據緩存,以方便快速圖形遍歷),緩存層按照從JanusGraph事務中訪問的順序列出。緩存越接近事務,緩存訪問越快,內存佔用和維護開銷也越高
- Transaction-Level Caching(事務級緩存) 2.1. Vertex Cache(頂點緩存):緩存訪問的頂點和它們的鄰接列表(或子集) 2.2. Index Cache(索引緩存):緩存索引查詢的結果,以便隨後的索引調用可以從內存中提供,而不是調用索引後端和(通常)等待一個或多個網絡往返。 事務緩存大小可以通過cache.tx-cache-size或基於每個事務來配置graph.buildTransaction(),setVertexCacheSize(int)方法是通過事務生成器打開事務 並使用該方法。
- Database Level Caching(數據庫級緩存) 3.1. Cache Expiration Time 性能和查詢行為最重要的設置是通過配置的緩存過期時間cache.db-cache-time。緩存將保存最多幾毫秒的圖形元素。如果元素過期,則將在下次訪問時從存儲後端重新讀取數據。 如果只有一個JanusGraph實例訪問存儲後端,或者如果此實例是修改圖形的唯一實例,則可以將緩存過期設置為0,從而禁用緩存過期。 如果有多個JanusGraph實例訪問存儲後端,則應將時間設置為另一個 JanusGraph實例修改圖形和此JanusGraph實例查看數據之間允許的最大時間。 3.2. Cache Size 配置選項cache.db-cache-size控制允許JanusGraph的數據庫級緩存佔用多少堆空間。緩存越大,效果就越好。但是,較大的緩存大小可能會導致GC過多和性能較差。 高速緩存大小是指由高速緩存專門佔用的堆空間量。 3.3. Clean Up Wait Time 當頂點被本地修改(例如添加邊)時,所有頂點的相關數據庫級高速緩存條目被標記為過期並最終被逐出。這將導致JanusGraph在下次訪問時刷新存儲後端的頂點數據並重新填充緩存。通過配置cache.db-cache-clean-wait,高速緩存將至少等待幾毫秒,然後使用從存儲後端檢索到的條目重新填充高速緩存。 如果JanusGraph在本地運行或對存儲後端運行,以保證修改立即可見,則可以將此值設置為0
- Storage Backend Caching(存儲後端緩存) 每個存儲後端都維護着自己的數據緩存層。這些緩存通過壓縮,數據緊湊,協調到期,並經常維護堆,可以使用大型緩存而不會陷入垃圾收集問題。但訪問速度也較慢。 緩存的確切類型及其屬性取決於特定的存儲後端。