簡體   English   中英

多鍵和值對搜索

[英]Multiple key and value pair search

我們有一個計划在應用程序端緩存數據庫表(以避免數據庫調用)。 我們的緩存是鍵與值對的實現。 如果我將主鍵(column1)用作鍵,而將所有其他數據用作值,我們如何對緩存執行以下查詢?

從column1 =?的表中選擇*
從表中選擇*,其中column2 =? 和column3 =?
從表中選擇*其中column4 =? 和column5 =? 和column6 =?

一種最簡單的選擇是按以下方式構建3個緩存。

(第1欄)->數據
(column2 + column3)->數據
(column4 + column5)->數據

還有其他更好的選擇嗎?

關鍵點:

  • 表包含數百萬條記錄
  • 我們將Java ConcurrentHashMap用於緩存實現。

您提到必須緩存數百萬條記錄。 多數民眾贊成在很多。 我不建議您建立自己的緩存框架,特別是不要基於諸如HashMaps之類的簡單數據結構。 我強烈建議Redis-檢查http://redis.io Twitter,Stackoverflow等公司正在將Redis用於其緩存。

這是Redis的現場演示-http: //try.redis.io

看起來您想要一個內存中的緩存。 番石榴有很酷的緩存-您需要一個LoadingCache。

這是LoadingCache的鏈接

基本上,對於您的問題,想法是擁有三個LoadingCache。 LoadingCache具有您應實現的方法。 該方法告訴給定輸入的加載緩存,以防緩存未命中時如何獲取數據。 因此,當您第一次訪問query1的加載緩存時,會出現緩存未命中的情況。 加載緩存將使用您實現的方法(您的經典DAO方法)來獲取數據,將其放入緩存中,然后將其返回給您。 下次訪問它時,它將從內存中的番石榴緩存中提供。

所以如果你有三種方法

Data getData(Column1 column)
Data getData(Column2 column2, Column3 column3)
Data getData(Column4 column4, Column5 column5, Column6 column6)

您的三個LoadingCache將從您編寫的加載實現中調用這些方法。 就是這樣。 我發現獲得所需的東西非常干凈簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM