[英]Can we use Elastic Search as Backend Data Store by replacing Postgres?
我们使用Postgres存储和处理应用数据,应用数据主要包含:
所有这些东西都可以和Postgres一起使用,当我正在阅读一些博客文章时,他们提到我们也可以使用ElasticSearch作为后端数据存储,而不仅仅是作为搜索服务器,如果我们可以这样使用,我们可以取代Postgres与ElasticSearch? 我能做到这一点有什么好处,与我的情况相比,与ElasticSearch相比,postgres的优点是什么?
请有人给我一些建议。
逐一回答问题:
- 我们需要在处理之后存储传入的请求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
; 但是,这不允许您对此类字段的内容进行任何类型的查询。
- 我们需要使用Identifier字段搜索特定的JSON,我们为表中的每一行创建一个单独的列
是。 如果identifier是任意字符串,则可以使用type keyword
字段来完成,如果是integer
,则可以使用整数。
- 对于客户端,他们可能需要搜索JSON列,我的意思是客户端想要基于json中的某个键值的一个json。
按照1),是和否。 如果JSON模式是已知且严格的,则可以完成。 如果JSON结构是任意的,则可以存储但不可查询。
虽然我会说ElasticSearch不适合你的情况,但有些人为ElasticSearch制作JDBC和ODBC驱动程序,显然在某些情况下ElasticSearch可以用作关系数据库。
elasticsearch是Apache Lucene的HTTP包装器。 Apache Lucene以列式方式存储对象以加速搜索(Lucene段)。
我正在完成非常好的尼古拉答案:
好处:
坏事:
我的观点是使用elasticsearch作为数据库的一种视图,具有只读访问权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.