繁体   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