2017-10-09 32 views
0

我们使用Postgres的存储和使用的应用程序数据的工作,应用程序的数据主要包括:通过替换Postgres,我们可以使用Elastic Search作为后端数据存储吗?

  1. 我们需要将传入的请求JSON存储处理,经过。
  2. 我们需要使用的标识符字段,为此,我们正在创建一个单独的列来搜索特定的JSON,每一行表中的
  3. 客户,他们可能需要搜索JSON栏,我的意思是客户想要一个在JSON

所有这些都是目前在Postgres,确定基于特定键值JSON当我阅读一些博客文章,他们提到,我们可以使用ElasticSearch作为后端数据存储也,而不是只作为搜索服务器,如果我们可以这样使用,我们可以用ElasticSearch替换Postgres吗?我可以得到什么好处,与ElasticSearch相比,postgres的优点是什么?我的情况是什么?

任何人都可以给一些建议,请。

回答

1

响应的问题一个接一个:

  1. 我们需要将传入的请求JSON存储处理,经过。

是和否ElasticSearch允许store JSON objects。如果事先知道JSON结构并且/或者是稳定的(即JSON中的相同键始终具有相同类型),这将起作用。

默认情况下,映射(即集合的模式)为dynamic,意味着它允许基于插入的值推断模式。假设我们插入此文件:

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

紧接着尝试插入这一个:

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

ES将错误消息回复:如果你有一个JSON对象

Current token (START_OBJECT) not numeric, can not use numeric value accessors\n at [Source: org.elasticsear[email protected]757a68a8; line: 1, column: 13] 

未知结构仍然可以将它们存储在ES中,可以通过使用objectsetting property enabled: false类型来完成;这不会允许你对这些领域的内容进行任何类型的查询。

  • 我们需要使用标识符字段来搜索特定JSON,为此我们创建一个单独的列,对于每行中的表
  • 是。如果标识符是任意字符串,则可以使用keyword类型的字段完成,如果是整数,则可以使用integer

  • 对于客户端,它们可能需要搜索JSON柱,我的意思是客户希望基于在JSON某些关键值的一个JSON。
  • 按照1),是和否。如果JSON模式是已知的并且是严格的,那么可以完成。如果JSON结构是任意的,它可以被存储但不会被查询。

    虽然我会说ElasticSearch是不适合你的情况,也有一些一些人,使JDBCODBC驱动ElasticSearch,显然在某些情况下ElasticSearch可以作为关系数据库。

    0

    elasticsearch是Apache Lucene的HTTP包装器。 Apache Lucene以列式方式存储对象以加快搜索速度(Lucene段)。

    我完成了很好的尼古拉的回答:

    好:

    坏:

    我的意见是使用elasticsearch作为一种诉查看数据库,只读访问。

    相关问题