gpt4 book ai didi

java - 在顶级关系数据库上运行ElasticSearch

转载 作者:行者123 更新时间:2023-12-01 22:45:03 25 4
gpt4 key购买 nike

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

最佳答案

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

也就是说,正如其他人指出的那样,您可以使用 JDBC 的 Elasticsearch River 插件将数据从关系数据库加载到 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 集成。来自 JDBCRiver的作者在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在内部,过滤器缓存是使用位集实现的: http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/

关于java - 在顶级关系数据库上运行ElasticSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25487113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com