【问题标题】:Run ElasticSearch on top relational database在顶级关系数据库上运行 ElasticSearch
【发布时间】:2014-10-18 16:11:24
【问题描述】:

我的问题是,是否可以在关系数据库之上使用 ElasticSearch。 1、我在关系型数据库中插入或删除一条记录时,是否会反映在elasticsearch中? 2.如果我在弹性搜索中插入一个文档,它会被持久化到数据库中吗? 3. 它是使用缓存还是内存数据库来方便搜索?如果有,有什么用?

【问题讨论】:

    标签: java sql json elasticsearch


    【解决方案1】:

    在寻找类似的东西时遇到了这个问题。以为要更新了。

    我的发现:

    1. Elasticsearch 现已弃用 Rivers,但 above-mentioned jprante's River 仍然存在...
    2. 我发现的另一个选项是 Scotas Push Connector,它将插入、更新和删除从 RDBMS 推送到 Elasticsearch。详情在这里:http://www.scotas.com/product-scotas-push-connector

      此处的示例实现:http://www.scotas.com/blog/?p=90

    【讨论】:

      【解决方案2】:

      Elasticsearch 和关系数据库之间没有直接联系 - ES 拥有自己的基于 Apache Lucene 的数据存储。

      也就是说,正如其他人所说,您可以使用 Elasticsearch River JDBC 插件将数据从关系数据库加载到 Elasticsearch。请记住,这种方法有许多限制:

      1. 这只是一种方式 - 用于 ES 的 JDBC River 仅从源读取 数据库 - 它不会将数据从 ES 推送到源数据库中。

      2. 不处理删除 - 如果您删除源数据库中的数据 在它被索引到 ES 之后,将不会反映删除 在 ES。 ElasticSearch river JDBC MySQL not deleting recordshttps://github.com/jprante/elasticsearch-river-jdbc/issues/213

      3. 它并非旨在作为生产、可扩展的解决方案 关系数据库和 Elasticsearch 集成。从 JDBC River 的作者在 2014 年 1 月的评论中,它被设计为“ 单节点(不可扩展)解决方案” “用于演示目的。” http://elasticsearch-users.115913.n3.nabble.com/Strategy-for-keeping-Elasticsearch-updated-with-MySQL-td4047253.html

      直接回答您的问题(假设您使用 JDBC River):

      1. 新文档插入可由 JDBC River 处理,但现有 数据删除不是。

      2. 数据不会从 Elasticsearch 流入您的关系数据库。那需要定制开发工作。

      3. Elasticsearch 构建在 Apache Lucene 之上。 Lucene 反过来 很大程度上取决于操作系统级别的文件系统缓存(其中 这就是 ES 建议将堆大小保持在不超过 50% 的原因 总内存,为文件系统缓存留下很多)。此外 ES/Lucene 堆栈利用了许多内部缓存(例如 Lucene 字段缓存和过滤器缓存) http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-cache.htmlhttp://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-fielddata.html 在内部,过滤器缓存是使用 bitset 实现的: http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/

      【讨论】:

      • 感谢您的信息。正如我所见,有 3 种类型的缓存和过滤缓存似乎更有用。过滤器缓存是否仅存储位集或实际数据本身?如果它只存储位集,它可能需要查询数据库,所以对于实际数据。有没有办法缓存实际结果而不是索引(位集)?
      • 这是一个指向特定文档的位集,因此它避免了大部分工作的实际索引搜索。此外,ES 很大程度上依赖于文件系统缓存——因此即使它需要检索数据,它也可能已经在内存中。
      【解决方案3】:

      1)您应该查看 ElasticSearch jdbc River here 以进行插入(我相信已删除的行不再被管理,请参阅 developper comment)。

      2) 除非您手动执行,否则它不会由 ElasticSearch 本地管理。

      3)确实,ElasticSearch 使用缓存来提高性能,尤其是在使用过滤器时。存储位集(0/1 的数组)。

      【讨论】:

        猜你喜欢
        • 2021-04-20
        • 2018-08-12
        • 2010-11-29
        • 2011-04-11
        • 1970-01-01
        • 2020-11-06
        • 2015-08-31
        • 2019-04-15
        • 2015-04-28
        相关资源
        最近更新 更多