搜尋

首頁  >  問答  >  主體

memcached - 使用mongodb搭配memcache

網站預計會有很大的查詢量,相較之下寫入資料庫的操作要少很多。
我想的是把資料庫內容分成兩種,一種是用來索引的內容,內容包含各種所需資訊對應的索引項,另一種是其他所要查詢的具體資料內容。
先將具體內容存入memcache,查詢時透過從資料庫中得到的索引值再從memcache中取得對應資料;
寫入資料時則直接寫在mongodb中;
不知道這種做法有什麼不妥,來這尋求下建議~~

PHPzPHPz2796 天前850

全部回覆(3)我來回復

  • 天蓬老师

    天蓬老师2017-04-24 16:01:35

    這是一個典型的快取使用場景,基於你使用的技術方案,有幾點是需要考慮清楚的:

    1. 既然選用mongodb,那你這個查詢場景應該是盡量用一個key能獲取到整個文檔的數據,這種查詢正是mongodb最擅長的,理論上都不需要再做任何優化了。
    2. 如果你除了上面這個情況,會有多次查詢才能得到想要結果的情況,可以考慮使用緩存,現在感覺使用Redis會比Memcached更靈活一點。具體一點處理步驟:
      (1) 每次查詢先去快取找是否已經有value
      (2) 如果沒有,就是把你的查詢條件依照一定的規則當作key,查詢結果當作value,存入快取並回傳本次查詢結果。
      (3) 如果有就直接返回(根據業務需求還要做快取的失效控制,例如有效時長或有新的寫入)

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-04-24 16:01:35

    「先將具體內容存入memcache,查詢時透過從資料庫中得到的索引值再從memcache中取得對應資料;」這句話,沒太理解,資料要保存到快取中嗎,要是宕機資料不就沒了。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-24 16:01:35

    我覺得不知道樓主業務量有多少, mongodb是個混合型數據庫, 就是mongodb也有內存數據庫部分, 寫入瓶頸mongodb並不差, 所以讀的業務應該放到redis這種純的內存數據庫中, 寫的業務就沒必要在費事直接存mongo不是更好?

    回覆
    0
  • 取消回覆