簡體   English   中英

我們可以通過替換Postgres將彈性搜索用作后端數據存儲嗎?

[英]Can we use Elastic Search as Backend Data Store by replacing Postgres?

我們使用Postgres存儲和處理應用數據,應用數據主要包含:

  1. 我們需要在處理之后存儲傳入的請求json。
  2. 我們需要使用Identifier字段搜索特定的JSON,我們為表中的每一行創建一個單獨的列
  3. 對於客戶端,他們可能需要搜索JSON列,我的意思是客戶端想要基於json中的某個鍵值的一個json

所有這些東西都可以和Postgres一起使用,當我正在閱讀一些博客文章時,他們提到我們也可以使用ElasticSearch作為后端數據存儲,而不僅僅是作為搜索服務器,如果我們可以這樣使用,我們可以取代Postgres與ElasticSearch? 我能做到這一點有什么好處,與我的情況相比,與ElasticSearch相比,postgres的優點是什么?

請有人給我一些建議。

逐一回答問題:

  1. 我們需要在處理之后存儲傳入的請求json。

是和否.ElasticSearch允許存儲JSON對象 如果JSON結構事先已知和/或穩定(即JSON中的相同鍵始終具有相同類型),則此方法有效。

默認情況下,映射(即集合的模式)是dynamic ,意味着它允許根據插入的值推斷模式。 假設我們插入此文檔:

{"amount": 1.5}  <-- insert succeeds

在嘗試插入這個之后立即:

{"amount": {"value" 1.5, "currency": "EUR"]} <-- insert fails

ES將回復一條錯誤消息:

Current token (START_OBJECT) not numeric, can not use numeric value accessors\n at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@757a68a8; line: 1, column: 13]

如果你有未知結構的JSON對象,你仍然可以將它們存儲在ES中,可以通過使用類型object設置屬性enabled: false ; 但是,這不允許您對此類字段的內容進行任何類型的查詢。

  1. 我們需要使用Identifier字段搜索特定的JSON,我們為表中的每一行創建一個單獨的列

是。 如果identifier是任意字符串,則可以使用type keyword字段來完成,如果是integer ,則可以使用整數。

  1. 對於客戶端,他們可能需要搜索JSON列,我的意思是客戶端想要基於json中的某個鍵值的一個json。

按照1),是和否。 如果JSON模式是已知且嚴格的,則可以完成。 如果JSON結構是任意的,則可以存儲但不可查詢。

雖然我會說ElasticSearch不適合你的情況,但有些人為ElasticSearch制作JDBCODBC驅動程序,顯然在某些情況下ElasticSearch可以用作關系數據庫。

elasticsearch是Apache Lucene的HTTP包裝器。 Apache Lucene以列式方式存儲對象以加速搜索(Lucene段)。

我正在完成非常好的尼古拉答案:

好處:

壞事:

我的觀點是使用elasticsearch作為數據庫的一種視圖,具有只讀訪問權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM