1. Es中10億級別的數據量,如何提高查詢效率
(1) 性能優化關鍵:file system cache
a. 不要期待隨手挑一個參數,就可以萬能的應對所有性能慢的場景
b. es依賴於底層的file system cache,如果給file system cache更多的內存,盡量讓內存容納所有的idx segment file索引數據文件,則搜索時均走內存,性能很高。如果內存較少,其他索引將存入磁盤,從磁盤搜索的性能可能是數秒。
c. 生產環境的最佳情況,是僅僅在es中存少量屬性字段,即需要用於搜索的那些索引,額外的屬性存入其他數據庫中,如mysql/mongo/hbae。
d. 如果內存確實是瓶頸,可以采用數據預熱,即單獨做一個專門的緩存預熱子系統,存儲比較熱門的數據到file system cache。
e. 也可以采用冷熱分離,i將冷數據寫入一個索引,熱數據寫入另一個索引,確保熱數據在被預熱之后,盡量留在file system cache中,別讓冷數據給沖刷掉。
f. 不要讓es做數據關聯查詢等數據,在document模型設計時考慮,將關聯后的數據存入es中
g. 分頁查詢性能較差,因此不允許深度分頁,可以用scroll api不斷下拉一頁一頁展示, scroll一次性生成所有數據的一個快照,缺點是不適於隨意跳到任何一頁的情景