elasticsearch超省存儲空間的配置

最近在研究elasticsearch 5.x版本的新特性的時(shí)候,偶爾翻到一篇es的測試文章,對于mapping的配置直接干掉了_all和_source選項(xiàng)。

對于_all選項(xiàng)的關(guān)閉我倒是可以理解,但是如果關(guān)掉_source選項(xiàng)的話,那返回?cái)?shù)據(jù)就是一堆空的字典了。

所以看到這篇文章,我的第一感覺是: 臥草,還有這樣的騷操作?!這是完全是把es當(dāng)索引用了啊。

但是對于Hbase和mongodb存儲的數(shù)據(jù),這樣搞也沒什么壞處。通過索引拿到rowkey/_id, 然后直接從Hbase/mongodb里取數(shù)據(jù)。

這里我做了如下實(shí)驗(yàn),首先配置mapping:

mapping_body = {
    "article": {
        "_all": {"enabled": False},
        "_source": {"enabled": False},
        "properties": {
            # 各種字段。。。
        },
    },
}

然后把mongo中的數(shù)據(jù)導(dǎo)入到es中。一共666380條數(shù)據(jù),id為數(shù)據(jù)的唯一字段ac_no, 存儲空間占了18M。

首先進(jìn)行普通查詢:

search_result = es.search(index=index_name,
                          body=search_body, preference="primary")

由_source禁止掉了,所以返回的數(shù)據(jù)內(nèi)容都是空,所以只能拿到id。通過id再在mongodb中進(jìn)行$in查詢:

result = search_result[u'hits'][u'hits']
id_list = [int(i["_id"]) for i in result]
query = list(coll.find({"ac_no":{"$in":id_list}}, {"_id": 0}))

最后得到所有數(shù)據(jù)。要得到跟_source關(guān)閉前一樣的結(jié)果,還需要做點(diǎn)處理,保證結(jié)果排序的一致,這里不再贅述。

如果_source開啟,存儲同樣的數(shù)據(jù)需要28M,節(jié)省的空間還是比較顯著的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容