我们正在使用Postgres存储和处理应用数据,应用数据主要包含:
目前所有这些东西都适用于Postgres,当我正在阅读一些博客文章时,他们提到我们也可以使用ElasticSearch作为后端数据存储,而不仅仅是作为搜索服务器,如果我们可以这样使用,可以我们用ElasticSearch取代Postgres?我能做到这一点有什么好处,与我的情况相比,与ElasticSearch相比,postgres的优点是什么?
请有人给出一些建议吗。
答案 0 :(得分:2)
逐一回答问题:
- 我们需要在处理之后存储传入的请求json。
醇>
是和否.ElasticSearch允许store JSON objects。如果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
和setting property enabled: false
完成;但是,这不允许您对此类字段的内容进行任何类型的查询。
- 我们需要使用Identifier字段搜索特定的JSON,我们为表中的每一行创建一个单独的列
醇>
是。如果标识符是任意字符串,则可以使用类型keyword
的字段完成此操作,如果是整数,则可以使用integer
。
- 对于客户端,他们可能需要搜索JSON列,我的意思是客户端希望根据json中的某个键值来获取一个json。
醇>
按照1),是和否。如果JSON模式是已知且严格的,则可以完成。如果JSON结构是任意的,则可以存储但不可查询。
虽然我会说ElasticSearch不适合你的情况,但是有一些人为ElasticSearch制作了JDBC和ODBC个驱动程序,显然在某些情况下ElasticSearch可以用作关系数据库。 / p>
答案 1 :(得分:1)
elasticsearch是Apache Lucene的HTTP包装器。 Apache Lucene以列式方式存储对象以加速搜索(Lucene段)。
我正在完成非常好的尼古拉回答:
好处:
坏事:
我的观点是使用elasticsearch作为数据库的一种视图,具有只读访问权限。