七、ElasticSearch之批量操作API

_mget

一條一條的查詢助琐,比如說要查詢100條數(shù)據(jù)吴藻,那么就要發(fā)送100次網(wǎng)絡(luò)請求,這個開銷還是很大的
如果進(jìn)行批量查詢的話弓柱,查詢100條數(shù)據(jù)沟堡,就只要發(fā)送1次網(wǎng)絡(luò)請求,網(wǎng)絡(luò)請求的性能開銷縮減100倍

(1)mget批量查詢不同index

GET /_mget
{
    "docs": [{
        "_index": "test_index",
        "_type": "test_type",
        "_id": 1
    }, {
        "_index": "test_index2",
        "_type": "test_type2",
        "_id": 2
    }]
}

(2)如果查詢的document是一個index下的不同type

GET /test_index/_mget
{
    "docs": [{
        "_type": "test_type",
        "_id": 1
    }, {
        "_type": "test_type",
        "_id": 2
    }]
}

(3)如果查詢的數(shù)據(jù)都在同一個index下的同一個type下矢空,最簡單了

GET /test_index/test_type/_mget
{
  "ids": [1, 2]
}

bulk語法

POST /_bulk
{ "delete": { "_index": "test_index", "_type": "test_type", "_id": "3" }} 
{ "create": { "_index": "test_index", "_type": "test_type", "_id": "12" }}
{ "test_field":    "test12" }
{ "index":  { "_index": "test_index", "_type": "test_type", "_id": "2" }}
{ "test_field":    "replaced test2" }
{ "update": { "_index": "test_index", "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} }
{ "doc" : {"test_field2" : "bulk test1"} }

每一個操作要兩個json串航罗,語法如下:

{"action": {"metadata"}}
{"data"}

舉例,比如你現(xiàn)在要創(chuàng)建一個文檔屁药,放bulk里面粥血,看起來會是這樣子的:

{"index": {"index": "test_index", "type", "test_type", "_id": "1"}}
{"test_field1": "test1", "test_field2": "test2"}

有哪些類型的操作可以執(zhí)行呢?

(1)delete:刪除一個文檔酿箭,只要1個json串就可以了
(2)create:PUT /index/type/id/_create复亏,強(qiáng)制創(chuàng)建
(3)index:普通的put操作,可以是創(chuàng)建文檔缭嫡,也可以是全量替換文檔
(4)update:執(zhí)行的partial update操作

注意:

(1)bulk api對json的語法缔御,有嚴(yán)格的要求,每個json串不能換行妇蛀,不同json串間耕突,必須有一個換行;
(2)bulk操作中评架,任意一個操作失敗眷茁,是不會影響其他的操作的,但是在返回結(jié)果里纵诞,會告訴你異常日志上祈;
(3)bulk request會加載到內(nèi)存里,如果太大的話浙芙,性能反而會下降登刺,因此需要反復(fù)嘗試一個最佳的bulk size。一般從10005000條數(shù)據(jù)開始茁裙,嘗試逐漸增加塘砸。另外,如果看大小的話晤锥,最好是在515MB之間掉蔬。

為什么bulk有換行的奇怪格式要求?

如果是任意換行的格式

可讀性好。bulk中的每個操作都可能要轉(zhuǎn)發(fā)到不同的node的shard去執(zhí)行

但es必須要按照下述流程去進(jìn)行處理
(1)將json數(shù)組解析為JSONArray對象矾瘾,這個時候女轿,整個數(shù)據(jù),就會在內(nèi)存中出現(xiàn)一份一模一樣的拷貝壕翩,一份數(shù)據(jù)是json文本蛉迹,一份數(shù)據(jù)是JSONArray對象
(2)解析json數(shù)組里的每個json,對每個請求中的document進(jìn)行路由
(3)為路由到同一個shard上的多個請求放妈,創(chuàng)建一個請求數(shù)組
(4)將這個請求數(shù)組序列化
(5)將序列化后的請求數(shù)組發(fā)送到對應(yīng)的節(jié)點上去

耗費更多內(nèi)存(bulk size會翻倍北救,因為每個請求的json都copy一份為jsonarray對象)荐操,更多的jvm gc開銷

現(xiàn)在的奇特格式

{"action": {"meta"}}\n
{"data"}\n
{"action": {"meta"}}\n
{"data"}\n

(1)不用將其轉(zhuǎn)換為json對象,不會出現(xiàn)內(nèi)存中的相同數(shù)據(jù)的拷貝珍策,直接按照換行符切割json
(2)對每兩個一組的json托启,讀取meta,進(jìn)行document路由
(3)直接將對應(yīng)的json發(fā)送到node上去

最大的優(yōu)勢在于攘宙,不需要將json數(shù)組解析為一個JSONArray對象屯耸,形成一份大數(shù)據(jù)的拷貝,浪費內(nèi)存空間蹭劈,盡可能地保證性能

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疗绣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铺韧,更是在濱河造成了極大的恐慌多矮,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祟蚀,死亡現(xiàn)場離奇詭異工窍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)前酿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門患雏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罢维,你說我怎么就攤上這事淹仑。” “怎么了肺孵?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵匀借,是天一觀的道長。 經(jīng)常有香客問我平窘,道長吓肋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任瑰艘,我火速辦了婚禮是鬼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘紫新。我一直安慰自己均蜜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布芒率。 她就那樣靜靜地躺著囤耳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上充择,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天德玫,我揣著相機(jī)與錄音,去河邊找鬼聪铺。 笑死化焕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铃剔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼查刻,長吁一口氣:“原來是場噩夢啊……” “哼键兜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起穗泵,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤普气,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佃延,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體现诀,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年履肃,在試婚紗的時候發(fā)現(xiàn)自己被綠了仔沿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡尺棋,死狀恐怖封锉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膘螟,我是刑警寧澤成福,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站荆残,受9級特大地震影響奴艾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜内斯,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一蕴潦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘿期,春花似錦品擎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春秀菱,著一層夾襖步出監(jiān)牢的瞬間振诬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工衍菱, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赶么,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓脊串,卻偏偏與公主長得像辫呻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子琼锋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容