%20%E5%BC%95%E6%93%8E%E3%80%81MyISAM%20%E6%88%96%E5%85%B6%E4%BB%96%E5%BC%95%E6%93%8E%EF%BC%88%E4%BE%8B%E5%A6%82%20MemCached%EF%BC%89.png)
目前正在進行一個以醫學詞彙 SNOMED 為中心的計畫。 snomed 的核心是一個長度為 350,000 個術語/記錄的(關係)資料集。我們希望能夠快速查詢該資料集的資料輸入部分,我們希望在其中具有某種形狀或形式的自動完成/建議。
目前它位於 MySQL MyISAM DB 中,僅用於開發目的,但我們希望開始使用一些記憶體選項。目前包括索引在內,大小為 30MB。 MEMORY MySQL Engine 和 MemCached 是顯而易見的,所以我的問題是您會建議其中哪一個,或者有更好的嗎?如果這有影響的話,我們主要在應用程式層級使用 Python 進行工作。
附註:資料集有一個單獨的關係,將這些概念映射到常見的別名和縮寫,大約有 130 萬筆記錄…最終我們也想在這裡使用其中的子集。
答案1
目前尚不清楚您的特定要求是什麼,但對於如此小的資料庫,查詢在任何引擎上都可能很快,因為所有資料都適合記憶體。
像 MyISAM 和 InnoDB 這樣的東西需要一些調整才能運作。只有當您需要擴展到非常高負載的基於讀取的工作負載時,Memcached 才有用,即那些對於單一伺服器而言太高而無法從傳統記憶體資料庫中提供服務的工作負載(Memcached 的主要功能是跨池擴展的能力)伺服器)。但memcached不能進行常規查詢,例如範圍掃描,只能查找特定鍵,因此它不是通用資料庫。
我建議使用 innodb 和比您的資料集更大的緩衝池,並正確選擇主鍵。主鍵範圍掃描應該表現得非常好,並且應該能夠用於前綴匹配(例如完成用例)。
在普通硬體上,您將能夠擴展到每秒 1000 個查詢。如果您需要更多,請添加複製從站或考慮諸如 memcached 之類的東西。
考慮在 StackOverflow 上詢問嗎?
答案2
您可以將表格保留為 MEMORY 類型。它會非常快,但需要您在使用前播種。我有一種感覺,你可以從中獲得很多表現。由於在記憶體中,它的讀取操作肯定比 InnoDB 和 MyISAM 更快。
我會說嘗試幾種不同的方法,然後使用 ApacheBench 進行超載搜索,看看什麼在壓力下最快屈服。