解決海量數據的存儲,並且能夠實現海量數據的秒級查詢
Hbase是典型的nosql,是一種構建在HDFS之上的分布式、面向列的存儲系統,在需要的時候可以進行實時的大規模數據集的讀寫操作;但是hbase的語法非常固話,即便在hbase之上嫁接了phoneix在應對復雜查詢的時候,仍然力不從心;
所以說很多公司在歷史遺留問題,最開始數據存儲在hbase上,當業務越來越復雜,數據量越來越大的時候,使用hbase構建復雜的查詢就很吃力了,甚至很多指標無法完成;
這個時候,我們就是用elasticsearch架構在hbase之上;
海量的數據存儲使用hbase,數據的即席查詢(快速檢索)使用elasticsearch
通過elasticsearch+hbase就可以做到海量數據的復雜查詢;
在操作之前,我們還要考慮:一批數據在elasticsearch中構建索引的時候,針對每一個字段要分析是否存儲和是否構建索引;
實際生產中,一遍文章要分成標題和正文;但是正文的量是比較大的,那么我們一般會在,在hbase中存儲正文(hbase本身就是做海量數據的存儲);這樣通過es的倒排索引列表檢索到關鍵詞的文檔id,然后根據文檔id在hbase中查詢出具體的正文
(當然具體情況看具體需求)
分析,數據哪些字段需要構建索引:
文章數據(id、title、author、describe、conent)
字段名稱 | 是否需要索引 | 是否需要存儲 |
---|---|---|
Id | 默認索引 | 默認存儲 |
Title | 需要 | 需要 |
Author | 看需求 | 看需求 |
Dscribe | 需要 | 存儲 |
Content | 看需求(高精度查詢,是需要的 ) | 看需求 |
Time | 需要 | 需要 |
curl -XPUT http://hadoop01:9200/articles -d '
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"article":{
"dynamic":"strict",
"properties":{
"id":{"type": "string", "store": true},
"title":{"type": "string","store": true,"index" : "analyzed","analyzer": "ik_max_word"},
"from":{"type": "string","store": true},
"readCounts":{"type": "integer","store": true},
"content":{"type": "string","store": false,"index": "no"},
"times": {"type": "string", "index": "not_analyzed"}
}
}
}
} '
3: 架構設計