偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

把ElasticSearch當(dāng)成是NoSQL數(shù)據(jù)庫(kù)

開(kāi)發(fā) 前端 其他數(shù)據(jù)庫(kù)
Elasticsearch 可以被當(dāng)成一個(gè) "NoSQL"-數(shù)據(jù)庫(kù)來(lái)使用么? NoSQL 意味著在不同的環(huán)境下存在不同的東西, 而erestingly 它并不是真的跟 SQL 有啥關(guān)系. 我們開(kāi)始只會(huì)覺(jué)得 "可能"而已, 所以細(xì)細(xì)研究了 Elasticsearch 的各種屬性,包括它已經(jīng)為了成就最具靈活性,可伸縮性和性能優(yōu)異的分析查詢(xún)引擎的那些屬性。

Elasticsearch 可以被當(dāng)成一個(gè) "NoSQL"-數(shù)據(jù)庫(kù)來(lái)使用么? NoSQL 意味著在不同的環(huán)境下存在不同的東西, 而erestingly 它并不是真的跟 SQL 有啥關(guān)系. 我們開(kāi)始只會(huì)覺(jué)得 "可能"而已, 所以細(xì)細(xì)研究了 Elasticsearch 的各種屬性,包括它已經(jīng)為了成就最具靈活性,可伸縮性和性能優(yōu)異的分析查詢(xún)引擎的那些屬性。

NoSQL 數(shù)據(jù)庫(kù)是什么?

NoSQL-數(shù)據(jù)庫(kù) 將 NoSQL 定義為“下一代主要解決如下問(wèn)題的數(shù)據(jù)庫(kù): 非關(guān)系型的,分布式的,開(kāi)元的并且可以扁平擴(kuò)展.”. 換言之,它并不是一個(gè)精確的定義.

它尤其與SQL無(wú)關(guān). 比方說(shuō), Hive 查詢(xún)語(yǔ)言的靈感顯然來(lái)自 SQL.  Esper查詢(xún)語(yǔ)言同樣如此, 只是它操作的是流而不是關(guān)系. 還有你知道 PostgreSQL 過(guò)去被命名為 “Postgres” 并使用 “Quel” 作為它的查詢(xún)語(yǔ)言么? 而首先作為一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)( ORDBMS), 它現(xiàn)在同樣有許多的特性使其具備無(wú)模式文檔存儲(chǔ)的能力.

它同樣也和ACID-特性無(wú)關(guān). Hyperdex 就是一個(gè) NoSQL-數(shù)據(jù)庫(kù)的例子,它的目標(biāo)就是提供 ACID-事務(wù)能力. MySQL, 確實(shí)是一個(gè) SQL-數(shù)據(jù)庫(kù), 歷史上它有一段解釋 ACID 的真正意義的曖昧?xí)r期.

關(guān)系型的? 雖然大多數(shù)的 NoSQL-數(shù)據(jù)庫(kù)并不支持加入傳統(tǒng)關(guān)系型數(shù)據(jù)意義相同的功能,但還是有一些那樣做了,并將其留給用戶(hù)當(dāng)做練習(xí)使用. RethinkDB, Hive 還有 Pig, 等等. Neo4j, 面向圖形的數(shù)據(jù)庫(kù), 確實(shí)是處理關(guān)系用的 - 它擅于遍歷圖中的關(guān)系 (比如,圖中的邊) . Elasticsearch 有一個(gè)概念叫做加入父子關(guān)系的“查詢(xún)時(shí)間”和加入嵌套類(lèi)型的“索引時(shí)間“.

分布式的? 已經(jīng)有一些分布式的 SQL-數(shù)據(jù)庫(kù) 了, 并以 一些項(xiàng)目 旨在做一些像一個(gè)NoSQLite那樣的事情, 更新一代的數(shù)據(jù)庫(kù)趨向于在某些方式上具備分布式能力.

總而言之, 既沒(méi)有道理給 NoSQL 做出精確的定義, 也不能簡(jiǎn)單的說(shuō) Elasticsearch 是一個(gè)“文檔存儲(chǔ)”-類(lèi)型的NoSQL-數(shù)據(jù)庫(kù). 在我寫(xiě)這篇文章的時(shí)候, nosql-database.org 列出了超過(guò)20 個(gè)那樣的東西.

在下一節(jié),我們將關(guān)注一些重要的屬性并且看看 Elasticsearch 為什么要實(shí)現(xiàn)或者不去實(shí)現(xiàn)它們。

無(wú)事務(wù)

Lucene, 是 Elasticsearch 的構(gòu)建的基礎(chǔ), 它是由一個(gè)事務(wù)的概念的. 而Elasticsearch在另外的方面, 并沒(méi)有典型意義的事務(wù). 對(duì)于已經(jīng)提交的文檔并沒(méi)有辦法回滾, 而你也不能提交一組文檔并且為它們所有或者其中一些建立索引. 然而它所具備的, 是一個(gè)用來(lái)確保業(yè)務(wù)過(guò)程持久性而不用做昂貴的Lucene提交的預(yù)寫(xiě)日志. 你也可以指定索引操作的一致性級(jí)別, 以確保在返回之前有多少副本可以拿來(lái)確認(rèn)操作條件. 默認(rèn)的是法定人數(shù), 例如 ⌊n2⌋

在逐個(gè)切片進(jìn)行處理的方式中,當(dāng)一個(gè)索引被刷新時(shí),默認(rèn)是一秒鐘一次,就需要對(duì)變更的可見(jiàn)性進(jìn)行控制。

通過(guò)制定提交文檔的版本,可以進(jìn)行樂(lè)觀(guān)并發(fā)控制。

Elasticsearch追求的是速度。支持分布式事務(wù)是一大塊工作。不支持分布式事務(wù)會(huì)使得很多事情變得容易起來(lái)。只要我們能接受讀取到的數(shù)據(jù) 有些陳舊,而且所有人看到的是同一時(shí)間點(diǎn)的數(shù)據(jù),那么Elasticsearch就可以利用緩存提供很多服務(wù) - 這對(duì)于我們鐘愛(ài)的極速性能來(lái)說(shuō)是至關(guān)重要的。

模式靈活

Elasticsearch 不要求你先指定模式。扔給它一個(gè) JSON 文檔,它就會(huì)進(jìn)行一些訓(xùn)練有素的猜測(cè)來(lái)推斷其類(lèi)型。對(duì)于數(shù)值、布爾、時(shí)間戳它可以做的很好。對(duì)于字符串,它會(huì)使用“標(biāo)準(zhǔn)化”的分析,這通常是良好的開(kāi)始。

它是有商榷的“無(wú)模式”,在這個(gè)意義上你不必指定一個(gè)模式,我們更愿意把它認(rèn)做是“模式靈活”。為了開(kāi)發(fā)大規(guī)模的搜索、分析,你確實(shí)需要對(duì)模式進(jìn)行 微調(diào)。Elasticsearch 有大量的強(qiáng)大工具可以幫助你,例如動(dòng)態(tài)模板、多字段對(duì)象等。這在我們關(guān)于映射的文章里會(huì)談及更多。

關(guān)系和約束

Elasticsearch是一種面向文檔的數(shù)據(jù)庫(kù)。你想要對(duì)之進(jìn)行搜索的整個(gè)對(duì)象關(guān)系圖,都需要進(jìn)行索引,在對(duì)文檔進(jìn)行索引之前,它們必須先被反規(guī)范化。反規(guī)范化提升了查詢(xún)性能(因?yàn)椴辉傩枰M(jìn)行關(guān)聯(lián)查詢(xún)),使用了更多存儲(chǔ)空間(因?yàn)閿?shù)據(jù)必須被存儲(chǔ)多次),但是,要保持?jǐn)?shù)據(jù)一致性和實(shí)時(shí)性則更加困難(因?yàn)槿魏螖?shù)據(jù)改變都必須被寫(xiě)入到所有實(shí)例中去)。不過(guò),對(duì)于一次寫(xiě)入頻繁讀取的工作場(chǎng)景,它的表現(xiàn)相當(dāng)優(yōu)異。

舉例來(lái)說(shuō),假設(shè)你在數(shù)據(jù)庫(kù)中存儲(chǔ)了客戶(hù)、訂單和產(chǎn)品等數(shù)據(jù),現(xiàn)在你想要通過(guò)產(chǎn)品名字和客戶(hù)姓名來(lái)查找訂單??梢赃@樣來(lái)解決這個(gè)問(wèn)題:在對(duì)訂單進(jìn)行索引時(shí), 把客戶(hù)和產(chǎn)品的所有必要信息都加進(jìn)來(lái)。這樣的話(huà),查詢(xún)就非常簡(jiǎn)單,但是當(dāng)你想要改變某個(gè)產(chǎn)品的名字時(shí)會(huì)出現(xiàn)什么情況呢? 在進(jìn)行了良好規(guī)范化的關(guān)系型模型中,你只需要修改該產(chǎn)品對(duì)應(yīng)的單條記錄就搞定了。這是關(guān)系型數(shù)據(jù)庫(kù)所擅長(zhǎng)的。而在反規(guī)范化的文檔數(shù)據(jù)庫(kù)中,將不得不更新與 該產(chǎn)品有關(guān)的所有訂單。

換句話(huà)說(shuō),在面向文檔類(lèi)型的數(shù)據(jù)庫(kù)中,比如Elasticsearch, 我們對(duì)文檔進(jìn)行映射和存儲(chǔ)設(shè)計(jì)只是為了優(yōu)化查詢(xún)和信息獲取的性能。

在介紹中已經(jīng)提到,Elasticsearch中可以使用父/子-關(guān)系進(jìn)行“查詢(xún)時(shí)”連結(jié),也可以使用內(nèi)嵌類(lèi)型進(jìn)行“索引時(shí)”連結(jié)。我們會(huì)在以后的文章中對(duì)該主題進(jìn)行深入介紹。我們推薦Martijn van Groningen的一篇文章“Document relations with Elasticsearch”.

大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)也會(huì)允許你指定約束關(guān)系,來(lái)定義什么需要保持一致性,什么不需要保持一致性。比如,參照完整性和唯一性都是強(qiáng)制性的。你可以要求賬戶(hù)變更金額必須是正數(shù),等等。而面向文檔的數(shù)據(jù)庫(kù)不傾向于這么做,Elasticsearch就是如此。

魯棒性

一個(gè)數(shù)據(jù)庫(kù)應(yīng)當(dāng)是魯棒的,尤其是當(dāng)它是你權(quán)威的記錄系統(tǒng)時(shí)。理想情況下,一個(gè)耗費(fèi)資源的查詢(xún)應(yīng)當(dāng)可以被撤銷(xiāo),你肯定不希望數(shù)據(jù)庫(kù)停止工作,除非你命令它停下來(lái)。

不幸的是,Elasticsearch (以及它的組件)目前并沒(méi)有很好的處理OutOfMemory錯(cuò)誤。我們?cè)贓lasticsearch in Production, OutOfMemory-Caused Crashes一文中進(jìn)行了更加深入的討論。所以,給Elasticsearch配置足夠多的內(nèi)存就顯得非常重要,而且在生產(chǎn)集群中要謹(jǐn)慎運(yùn)行那些無(wú)法預(yù)知將會(huì)耗費(fèi)多少內(nèi)存的查詢(xún)。

不過(guò),隨著Elasticsearch越來(lái)越成熟,這個(gè)問(wèn)題很可能會(huì)得到改善,記住Elasticsearch的目標(biāo)是追求速度,所以它假設(shè)內(nèi)存永遠(yuǎn)是充足的。

分布式

另請(qǐng)參考: Elasticsearch in Production, Networking.

Shay Banon在創(chuàng)建Elasticsearch之前,在Compass工作過(guò)。由于意識(shí)到它很難轉(zhuǎn)變成一個(gè)分布式的搜索引擎,他就從頭開(kāi)始創(chuàng)建了Elasticsearch1。 Elasticsearch被設(shè)計(jì)成分布式的且易于擴(kuò)展,用來(lái)在商用硬件上處理海量數(shù)據(jù)。

作為一個(gè)分布式的系統(tǒng),Elasticsearch的上手和使用都令人難以置信的簡(jiǎn)單,但是分布式系統(tǒng)本身是很復(fù)雜的。關(guān)于這一點(diǎn),我們?cè)贓lasticsearch in Production, Networking有更多討論,所以下面只是一個(gè)簡(jiǎn)短的摘要。

分布式系統(tǒng)天生的特性,意味著很多事情都可能會(huì)出錯(cuò)。同樣的,不同的數(shù)據(jù)庫(kù)系統(tǒng)致力于擁有不同強(qiáng)項(xiàng): 有些力爭(zhēng)強(qiáng)大的安全保證,另外一些則致力于高可用性,即使某些時(shí)候(甚至多數(shù)時(shí)候)出現(xiàn)錯(cuò)誤也在所不惜。而且,正如Kyle Kingsbury在他杰出的網(wǎng)絡(luò)分區(qū)的風(fēng)險(xiǎn)系列文章中所指出的那樣,當(dāng)問(wèn)題發(fā)生時(shí),實(shí)際上數(shù)據(jù)庫(kù)系統(tǒng)并沒(méi)有像它們所宣稱(chēng)的那樣來(lái)處理問(wèn)題。簡(jiǎn)言之,他發(fā)現(xiàn)當(dāng)分布式數(shù)據(jù)庫(kù)運(yùn)行良好晴空萬(wàn)里時(shí),絕大部分?jǐn)?shù)據(jù)庫(kù)在遭受到大量可能的問(wèn)題時(shí)所做的努力,都會(huì)以失敗而告終。

在一致性,可用性,以及分區(qū)容錯(cuò)性方面,Elasticsearch 是一個(gè)CP系統(tǒng),一個(gè)相當(dāng)不靠譜的“一致性”定義。如果你有一個(gè)只讀的工作負(fù)載, Elasticsearch 允許你通過(guò)不嚴(yán)格的“最小主節(jié)點(diǎn)”要求(如不需要quorum)實(shí)現(xiàn)AP行為。然而,通常你需要集群中大量節(jié)點(diǎn)是可用的。寫(xiě)入一個(gè)配置錯(cuò)誤的沒(méi)有大量節(jié)點(diǎn) 的集群,像“split brain”集群,可能引起無(wú)法恢復(fù)的數(shù)據(jù)丟失。這不只是特定于Elasticsearch的。

Elasticsearch 選擇自己的主節(jié)點(diǎn)。然而這是一個(gè)相當(dāng)簡(jiǎn)單但不是非??煽康乃惴ǎ@在現(xiàn)實(shí)世界的網(wǎng)絡(luò)壓力下可能導(dǎo)致很多問(wèn)題。事實(shí)上,我們管理成百上千的集群,經(jīng)常看到主節(jié)點(diǎn)選擇問(wèn)題,因此我們主動(dòng)將主節(jié)點(diǎn)移入ZooKeeper, 當(dāng)然我們也有其他目的。

在拓展性方面,索引被分到了一個(gè)或多個(gè)碎片中。這在索引創(chuàng)建時(shí)就指定了并且不能改變。因此,隨著預(yù)期的增長(zhǎng),一個(gè)索引應(yīng)該被合理的分割。隨著越來(lái)越 多的節(jié)點(diǎn)添加到Elasticsearch集群中來(lái),它在重新分配和移動(dòng)碎片上表現(xiàn)良好。因此,Elasticsearch很容易拓展。

安全

另請(qǐng)參閱: Elasticsearch in Production, Security.

Elasticsearch沒(méi)有提供授權(quán)和認(rèn)證特性。你可以認(rèn)為,任何人只要能連接到你的Elasticsearch集群,就擁有了“超級(jí)用戶(hù)”權(quán)限,尤其是當(dāng)Elasticsearch的強(qiáng)大腳本功能被激活時(shí)。

總結(jié)

如果本文描述的這些限制都不能阻止你,你當(dāng)然可以使用Elasticsearch作為主存儲(chǔ)庫(kù)。一個(gè)不錯(cuò)的例子是,當(dāng)你使用Logstash時(shí)。Logstash是一個(gè)神奇的工具,用來(lái)管理日志并把它們導(dǎo)入到Elasticsearch中,你可以只是對(duì)日志進(jìn)行備份以防萬(wàn)一。日志都是一次寫(xiě)入,多次讀取的。不需要升級(jí),不需要事務(wù)支持,沒(méi)有完整性約束,等等。

那么像Postgres那樣的系統(tǒng)怎么樣呢,它有全文檢索和ACID-事務(wù)。 (其它例子包括MySQL, MongoDB, Riak等等的全文檢索能力) 你當(dāng)然可以通過(guò)Postgres來(lái)實(shí)現(xiàn)基本的檢索,但是在性能上和功能上與ElasticSearch都有巨大的差距。正如我們?cè)谑聞?wù)那 一節(jié)中所提到的,Elasticsearch會(huì)做很多緩存,所以有可能會(huì)“欺騙”我們,而且不關(guān)心多版本之間的并發(fā)控制以及其它復(fù)雜的事情。搜索遠(yuǎn)不止在 一段文本中找到一個(gè)關(guān)鍵字那么簡(jiǎn)單:它是利用領(lǐng)域特定知識(shí)來(lái)實(shí)現(xiàn)良好的相關(guān)度模型,由此給出整個(gè)結(jié)果空間的一個(gè)全貌,并且能做拼寫(xiě)檢查和自動(dòng)補(bǔ)全之類(lèi)的工 作。而且所有這些工作都要保證速度。

Elasticsearch通常被用作其它數(shù)據(jù)庫(kù)的補(bǔ)充。那樣的數(shù)據(jù)庫(kù)系統(tǒng)要有強(qiáng)大的數(shù)據(jù)約束保證、容錯(cuò)性和魯棒性、高可用性和帶事務(wù)支持的數(shù)據(jù)更 新能力,它維護(hù)著核心數(shù)據(jù) - 這些數(shù)據(jù)隨后會(huì)被異步推送到Elasticsearch中去(也可能是抽取,前提是你使用了Elasticsearch的某一種“rivers”)。 保持?jǐn)?shù)據(jù)同步是我們打算將來(lái)撰文深入探討的話(huà)題。這里,在Found網(wǎng)站的文章中,我們使用具有代表性的PostgreSQL和ZooKeeper來(lái)提供 源數(shù)據(jù),并把這些數(shù)據(jù)輸入給Elasticsearch來(lái)提供強(qiáng)大的搜索。

像其它所有事情一樣,沒(méi)有包治百病的靈丹妙藥,沒(méi)有一個(gè)數(shù)據(jù)庫(kù)可以做到所有的事情。也許這種情況會(huì)永遠(yuǎn)持續(xù)下去,所以一定要了解你的數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)和弱點(diǎn)!

原文鏈接:https://www.found.no/foundation/elasticsearch-as-nosql/

譯文鏈接:http://www.oschina.net/translate/elasticsearch-as-nosql

責(zé)任編輯:陳四芳 來(lái)源: 開(kāi)源中國(guó)編譯
相關(guān)推薦

2013-09-22 13:25:54

MongoDB內(nèi)存數(shù)據(jù)庫(kù)

2024-02-02 10:51:53

2021-09-28 09:25:05

NoSQL數(shù)據(jù)庫(kù)列式數(shù)據(jù)庫(kù)

2011-10-09 09:38:03

OracleNoSQL

2025-01-03 08:13:08

2011-07-19 09:08:50

JavaNoSQL

2019-03-20 15:59:11

NoSQLRedis數(shù)據(jù)庫(kù)

2019-07-08 10:36:34

數(shù)據(jù)庫(kù)WebNoSQL

2010-04-01 09:45:38

NoSQL

2024-03-28 09:00:00

NoSQL數(shù)據(jù)庫(kù)

2020-04-25 21:04:09

NoSQL數(shù)據(jù)庫(kù)大數(shù)據(jù)

2011-04-14 11:14:21

OracleNoSQLMySQL

2011-05-16 10:29:44

HandlerSockNoSQL

2011-07-13 09:58:15

HBase

2019-07-23 11:41:45

數(shù)據(jù)庫(kù)SQLDocker

2011-03-25 14:40:29

Trinity數(shù)據(jù)庫(kù)

2020-10-31 22:01:40

NoSQL數(shù)據(jù)庫(kù)

2017-05-25 10:11:46

數(shù)據(jù)庫(kù)令牌節(jié)點(diǎn)

2010-08-13 16:40:27

CouchDBAndroid SDKAndroid

2023-03-05 16:25:38

NoSQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)