es+hbase學習

第一步:搞清楚這個框架(技術)是幹什麼的,解決了什麼問題和痛點,同類「競品」還有哪些css

第二步:怎麼用html

第三步:瞭解原理web

Elasticsearch

WHAT

Elasticsearch 是一個基於 Lucene搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。數據庫

Elasticsearch 是用 Java 語言開發的,是一種流行的企業級搜索引擎。數組

Elasticsearch 的底層是開源庫 Lucene。咱們沒有辦法直接使用 Lucene ,必須本身寫代碼去調用它的接口。

ElasticsearchLucene 的封裝,提供了 RESTful API 的操做接口,開箱即用。服務器

WHY

使用數據庫 來作搜索業務,不能很好的知足需求。框架

雖然某一程度上也能夠視爲數據庫,可是它更主要的身份仍是一個優秀的全文搜索引擎。它的出現解決了一部分傳統關係型數據庫和NoSQL非關係型數據庫所沒有辦法高效完成的一些工做,好比高效的全文檢索,結構化檢索,甚至是數據分析。curl

響應時間

eg:數據庫在作模糊查詢時,如LIKE 語句,它會遍歷整張表,同時進行字符串匹配。elasticsearch

es 是基於 倒敘索引 的 ,檢索速度很是快。分佈式

分詞

Elasticsearch支持中文分詞插件

相關性

Elasticsearch 支持全文搜索和相關度評分。這樣在返回結果就會根據分數由高到低排列。分數越高,意味着和查詢語句越相關。

可視化界面

MySQL的Navicat

ElasticsearchKibana

HOW

入門使用

基礎知識

Elasticsearch

Java API

Java客戶端是經過 9300端口 並使用Elasticsearch 的原生傳輸協議和集羣交互。

集羣中的節點經過端口 9300彼此通訊。若是這個端口沒有打開,節點將沒法造成一個集羣。

RESTful API with Json over HTTP

基於HTTP的 Json RESTful API

全部其它語言可使用 RESTful API 經過端口 9200 和 Elasticsearch 進行通訊,

也可使用 curl 命令來和 Elasticsearch 交互。

curl 是經常使用的命令行工具,用來請求 web服務器。它的名字就是客戶端(client)的URL工具的意思。

面向文檔

Elasticsearch 是面向文檔的,意味着它存儲整個對象或 文檔。

Elasticsearch 不只存儲文檔,並且索引每一個文檔的內容,使之能夠被檢索。

(好比說,存儲員工文檔,一個文檔表明一個員工,存儲數據到Elasticsearch的行爲叫作索引。)

在Elasticsearch中,咱們對文檔進行索引、檢索、排序和過濾,而不是對行列數據。

這是一種徹底不一樣的思考數據方式,也是Elasticsearch能支持複雜全文檢索的緣由。

Elasticsearch 使用 JSON(JavaScript Object Notation)做爲文檔的序列化格式。

索引

  • 名詞:一個 索引 相似於傳統關係型數據庫中的一個 數據庫,是一個存儲關係型文檔的地方
  • 動詞:索引一個文檔,就是存儲一個文檔到一個 索引(名詞)中,以便被檢索和查詢,這很是相似於SQL語句中的INSERT關鍵字

倒排索引

關係型數據庫經過增長一個索引,好比一個B-Tree索引 到指定的列上,以便提高數據檢索的速度。

Elasticsearch 和 Lucene 使用一個叫作 倒排索引的結構來達到相同的目的。

默認的,一個文檔中的每個屬性都是 被索引的 (有一個倒排索引) 和可搜索的。

一個沒有倒排索引的屬性是不能被搜索到的。

搜索

檢索所有數據

GET _search
{
"query": {
"match_all": {}
}
}

檢索指定索引數據

GET /indexName/_search{}

檢索指定索引的指定字段

GET /indexName/_search
{
"query": {
"match": {
"field":"text"
//"title": "elasticsearch"
}
}
}

短語搜索

精確查詢一個短語 「Time is money」

//使用 match_phrase
GET /indexName/_search
{
"query": {
"match_phrase": {
"field": "Time is money"
}
}
}

高亮搜索

新增 highlight參數,組合查詢

GET /indexName/_search
{
"query": {
"match": {
"field": "text"
}
},
"highlight": {
"fields": {
"field": {}
}
}
}

//高亮部分 以 HTML 標籤 封裝

分析

Elasticsearch 有一個功能叫作聚合(aggregations),容許咱們基於數據生成一些精細的分析結果。

聚合與SQL中的GROUP BY 相似但更強大。

GET /indexName/_search
{
"aggs": {
"NAME": {
"AGG_TYPE": {}
}
}
}

Elasticsearch天生分佈式,而且在設計時,屏蔽了分佈式的複雜性。

Hbase

WHTA

Hadoop Database

HBase 是Apache的 Hadoop 項目的子項目。

HBase 是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統

HBase 不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫, HBase基於列的而不是基於行的模式.

HBase的原型是Google的BigTable論文。

WHY

MySQL沒法知足海量的數據存儲,

MySQL -> 面向行存儲

HBase -> 面向行存儲

HOW

HBase概念視圖

表名:webtable

兩行:com.cnn.wwwcom.example.www

三個列族:contentsanchorpeople

對於第一行com.cnn.www

anchor列族包含兩列:anchor:cssnsi.comanchor:my.look.ca

{
"com.cnn.www": {
contents: {
t6: contents:html: "<html>..."
t5: contents:html: "<html>..."
t3: contents:html: "<html>..."
}
anchor: {
t9: anchor:cnnsi.com = "CNN"
t8: anchor:my.look.ca = "CNN.com"
}
people: {}
}
"com.example.www": {
contents: {
t5: contents:html: "<html>..."
}
anchor: {}
people: {
t5: people:author: "John Doe"
}
}
}

HBase物理視圖

HBase 概念視圖中顯示的空單元根本不存儲

HBase表、行與列族

建立一個HBase表:

create ‘<table name>’,’<column family>’

HBase中的行是邏輯上的行,物理模型上行時按列族(column family)分別存取的。

列族

Hbase表中的每一個列都歸屬於某個列族,

列名由其 列族前綴 和 限定符 組成,

列的限定符是列族中數據的索引。

eg

列族:course

列名:course:mathcourse:english

cell

由行和列的座標交叉決定;

單元格是有版本的;

單元格的內容是未解析的字節數組

單元格是由行、列族、列限定符、值和表明值版本的時間戳組成的,({row key,column( =<family>+<qualifier>),version})惟一肯定單元格。cell中的數據是沒有類型的,所有是字節碼形式存儲。

相關文章
相關標籤/搜索