數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)機構(gòu)
- 結(jié)構(gòu)化:指具有固定格式池充,或者有限長度的數(shù)據(jù)坑匠,如數(shù)據(jù)庫咽瓷,元數(shù)據(jù)等
- 非結(jié)構(gòu)化:指無定長的或者無固定格式的數(shù)據(jù)围来,如郵件航唆,或者word文檔,文本文檔等
非結(jié)構(gòu)化數(shù)據(jù)的檢索
- 順序掃描法(Serial Scanning):從頭到尾的檢索再榄,適合小數(shù)據(jù)型的數(shù)據(jù)
- 操作系統(tǒng)索索文件
- Linux上的wrapper方法
- 全文索索(Full-text Search)
- 將非結(jié)構(gòu)化的數(shù)據(jù)中的一部分信息提取出來剑按,重新進行組織,使其變得有一定的結(jié)構(gòu)姑荷,然后對這部分數(shù)據(jù)進行搜索撇叁,以達到快速搜索的目的
- 索引:就是上述說的被提取出來的信息,重新進行組織后變成的結(jié)構(gòu)化數(shù)據(jù)
- 相當(dāng)于字典
全文搜索的實現(xiàn)原理
- 建立文本庫(把所有的漢字收集起來)
- 建立索引(把漢字的規(guī)律提取出來)
- 執(zhí)行搜索(對要查詢的漢字進行查找)
- 過濾結(jié)果(去掉其他不是自己檢索的字)
全文搜索的實現(xiàn)技術(shù)
- 基于java的開源實現(xiàn)
- Lucene 全文搜索的引擎
- ElasticSearch :基于Lucene建立起來的
- Solr :全文檢索系統(tǒng)君账,跟ElasticSearch差不多
- 對比:solr利用了第三方的分布式管理系統(tǒng),在傳統(tǒng)的應(yīng)用中solr要好一點,而ElasticSearch自身有割以。目前ElasticSearch應(yīng)用的更多一點
ElasticSearch的簡介
- 高度可擴展的開源全文搜索和分析引擎
- 快速的消玄,可近實時地對大數(shù)據(jù)進行存儲嗜桌、搜索和分析
- 用來支撐有復(fù)雜的數(shù)據(jù)搜索需求的 企業(yè)應(yīng)用
- 特點:
- 分布式:會把數(shù)據(jù)存儲的索引分開到多個分片去的
- 高可用:由于是分布式系統(tǒng),就算是若干臺主機崩潰了桦卒,系統(tǒng)服務(wù)還是可以正常使用裕偿,所以是高可用的。
- 多類型
- 多API
- 面向文檔:不用事先定義模式挥吵,每個類型可以定義模式和自定義索引
- 異步導(dǎo)入
- 進實時
- 基于Lucene
- Apache協(xié)議
ElasticSearch核心概念
-
近實時
- 其實可以做到實時的脉幢,需要犧牲索引的效率:每次搜索的時候,都要進行刷新,如果犧牲查詢的效率髓废,每次查詢之前都需要刷新
- 而ElasticSearch做了一個折中的方案,每隔N秒去自動做一次刷新冈爹,在創(chuàng)建索引之后因痛,最多就是在N秒之內(nèi)就能查詢到较性。
- 索引創(chuàng)建后不會直接寫入磁盤,而是存放到了文件系統(tǒng)緩存當(dāng)中歹垫,會與刷新策略設(shè)置定期的同步到磁盤去。
- 一般刷新策略的參數(shù)設(shè)置在1秒,因為延遲會有一秒的原因
-
集群:它是一個或者多個節(jié)點的集合砾莱,用來保存應(yīng)用的所有數(shù)據(jù) 魔策,并提供基于全部節(jié)點的集成式的索引和搜索功能
- 每個集群的名稱都是唯一的,默認的就是ElasticSearch访锻。
- 節(jié)點要加入集群褪尝,需要根據(jù)這個名稱來河哑,盡量不要使用相同的名稱佳吞,以避免節(jié)點在加入集群的時候產(chǎn)生錯誤容达,
- 每個集群需 的名稱
-
節(jié)點
-是指集群中算芯,單臺的服務(wù)器届囚,用來保存數(shù)據(jù)迎瞧,并參與整個集群的索引和搜索- 用UUID通用分的唯一標(biāo)識符來表示扰才,名稱在節(jié)點啟動的時候允懂,分配給節(jié)點的,可以自定義名稱
索引:用來加快搜索的速度的衩匣。相似文檔的集合蕾总,內(nèi)容與義務(wù)本身的業(yè)務(wù)是相關(guān)的粥航,可以利用索引保存數(shù)據(jù)每個索引都有一個名稱,通過這個名稱可以對索引中包含的文檔來進行添加更新生百,刪除和搜索等等操作递雀。再單個集群中可以根據(jù)需要定義任意數(shù)量的索引。
類型:是對索引包含的文檔要進一步的細分蚀浆。 根據(jù)文檔的公共屬性進行劃分
文檔:進行索引的基本單位缀程,與索引中的類型是相對應(yīng)的。文檔使用的是json的格式來表示市俊;在非結(jié)構(gòu)化數(shù)據(jù)中杨凑,文檔對應(yīng)的是結(jié)構(gòu)化數(shù)據(jù)中的一個實體。文檔的一個實例對應(yīng)的就是關(guān)系型數(shù)據(jù)庫中的實體的一個實例摆昧,也就是具體的某條數(shù)據(jù)
分片:需要水平分割或者縮放內(nèi)容卷撩满,通過分片分配到多個節(jié)點上,進行并行绅你,從而提高性能和吞吐量
副本:分片可以設(shè)置不同的副本伺帘,故障不可避免,所以需要設(shè)置副本忌锯。增加副本其實可以增加吞吐量和搜索量
總體來說伪嫁,索引可以分配多個分片,而分片又可以設(shè)置多個副本汉规,默認情況下礼殊,ElasticSearch的每個索引會分配5個分片和1個副本,意味著每個集群至少有2個節(jié)點, 擁有5個分片和5個副本针史,這樣就有10個分片晶伦。