选择索引策略很困难。 Elasticsearch 文档的确有一些一般性建议 ,并且有其他公司的 一些技巧 ,但这也取决于特定的用例。 在典型情况下,您有一个数据库作为事实的来源,并且有一个使事物可搜索的索引。 您可以采用以下策略:

  • 随着数据的到来而建立索引–您可以同时插入数据库并建立索引。 如果没有太多数据,这是有道理的。 否则索引将变得非常低效。
  • 存储在数据库中,并与计划的作业一起建立索引–这可能是最常见的方法,并且易于实现。 但是,如果要索引的数据很多,则可能会出现问题,因为必须使用数据库中的(从,到)条件来精确地获取该数据,并且索引落后于实际数据的秒数(或分钟)在计划的作业运行之间
  • 推送到消息队列并编写索引使用方–您可以运行RabbitMQ之类的东西,并让多个使用方轮询数据并为其编制索引。 这不是容易实现的,因为您必须轮询多个项目才能利用批处理索引,然后仅在成功执行批处理时将它们标记为已使用-有点交易行为。
  • 对内存中的项目进行排队并定期对其进行刷新–这可能是好的且高效的,但是如果节点死亡,则可能会丢失数据,因此您必须根据数据库中的数据进行某种运行状况检查
  • 混合-结合以上内容; 例如,如果需要在以后充实原始数据并更新索引,则可以在内存中对项目进行排队,然后使用“存储在数据库中,具有计划作业的索引”来更新索引并填写任何缺失的项目。 或者,您可以在数据的某些部分出现时建立索引,并对更活跃的数据类型使用另一种策略

我们最近决定实施“内存中队列”方法(与另一方法结合使用,因为无论如何我们都必须进行一些计划的后处理)。 最初的尝试是使用Elasticsearch客户端提供的类BulkProcessor 。 逻辑很清晰–如果达到一定限制或以固定的时间间隔,将索引请求存储在内存中并批量将其刷新到Elasticsearch。 因此,最多每隔X秒,最多每隔Y个记录将有一个批处理索引请求。 这样就可以实现近实时索引,而不会给Elasticsearch带来太大的压力。 根据Elasticsearch的建议,它还允许同时多个批量索引请求。

但是,我们使用了BulkProcessor不支持的REST API(通过Jest )。 我们试图堵塞,而不是当前的本地一个REST索引逻辑,虽然它几乎工作,在这个过程中,我们发现了一些令人担忧-在internalAdd方法,该方法被调用每一个索引请求加入到大宗时间,是synchronized 。 这意味着线程将阻塞,等待彼此添加内容。 对于生产环境来说,这听起来不太理想且有风险,因此我们进行了单独的实施。 可以在这里看到– ESBulkProcessor 。

它允许多个线程同时刷新到Elasticsearch,但是只有一个线程(使用锁)要从队列中使用以形成批处理。 由于这是一项快速的操作,因此最好对其进行序列化。 并不是因为并发队列无法处理从中读取的多个线程,而是可以; 但是达到同时由多个线程形成批量的条件将导致几个小批量而不是一个大批量,因此一次只需要一个消费者。 这不是一个大问题,因此可以将其删除。 但重要的是要注意它没有阻塞。

这已经生产了一段时间了,似乎没有任何问题。 如果由于负载增加或边缘情况而发生更改,我将报告任何更改。

如果这是唯一的索引逻辑,则必须重申该问题–您的应用程序节点可能会失败,并且最终可能会导致Elasticsearch中的数据丢失。 我们不在那种情况下,我不确定哪种方法是最好的补救方法–是在服务器发生故障的情况下对近期数据进行部分重新索引,或者通过批处理检查是否没有数据库和索引之间不匹配。 当然,我们还应该说您可能并不总是拥有一个数据库–有时,Elasticsearch就是您用于数据存储的全部,在这种情况下,需要某种队列持久性。

最终目标是实现近乎实时的索引编制,因为用户期望尽快看到他们的数据,同时又不影响Elasticsearch集群。

“什么是对数据建立索引的最佳方法”这一主题非常重要,我希望至少已经澄清了一点,并且我们的贡献对于其他情况也很有意义。

翻译自: https://www.javacodegeeks.com/2019/12/near-real-time-indexing-with-elasticsearch.html

使用ElasticSearch进行近实时索引相关推荐

  1. 剖析Elasticsearch集群系列第三篇 近实时搜索、深层分页问题和搜索相关性权衡之道...

    http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03?utm_source=infoq&utm ...

  2. ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并

    文章目录 集群内部原理 集群与节点 分片 选举 分片内部原理 索引不变性 动态更新索引 近实时搜索 事务日志 段合并 集群内部原理 集群与节点 一个运行中的Elasticsearch实例称为一个节点, ...

  3. es mysql延迟_ES 近实时搜索 更新延迟问题

    一.问题发现 有段代码更新 ES中的数据状态,将未读置成已读.是查一批,更新一批,再查再更新. public Boolean updateDealStatus(WarningQuery warning ...

  4. ElasticSearch近实时搜索的实现

    ElasticSearch近实时搜索的实现 1.近实时搜索 1.1 实时与近实时 实时搜索(Real-time Search)很好理解,对于一个数据库系统,执行插入以后立刻就能搜索到刚刚插入到数据.而 ...

  5. 【Elasticsearch】Elasticsearch 优化写入流程实现NRT近实时(filesystem cache,refresh)

    现有流程的问题,每次都必须等待fsync将segment刷入磁盘,才能将segment打开供search使用,这样的话,从一个document写入,到它可以被搜索,可能会超过1分钟!!!这就不是近实时 ...

  6. ElasticSearch基础杂烩-配置-索引-优化

    2019独角兽企业重金招聘Python工程师标准>>> ElasticSearch基础杂烩-配置-索引-优化 博客分类: java 前言 ElasticSearch是一个基于Luce ...

  7. lucene4.5近实时搜索

    近实时搜索就是他能打开一个IndexWriter快速搜索索引变更的内容,而不必关闭writer,或者向writer提交,这个功能是在2.9版本以后引入的,在以前没有这个功能时,必须调用writer的c ...

  8. Coreseek:部门查询和增量索引代替实时索引

    1.行业调查 索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作).同时, ...

  9. 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步

    转载自 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步 近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台.优先 ...

最新文章

  1. 漫画:5分钟弄懂分治算法!它和递归算法的关系!
  2. 2017计算机考研统考大纲,2017年考研计算机大纲详解(六):计算机网络
  3. 砍掉九成代码,重构并简化YOLOv5图像目标检测推理实现
  4. hihoCoder 1369 网络流一·Ford-Fulkerson算法 (网络流学习#1 记录)
  5. 机械设计(机电)_简要问答_复习笔记
  6. python绘制彩色地震剖面断层解释_地震剖面上断层的识别标志主要有哪些
  7. uni-app注册 page-head
  8. speedoffice(Excel)如何设置纸张大小
  9. MIT6.824_2021_学习总结 分布式常见知识点
  10. getopt.h及相应的函数
  11. R语言安装ggcor包
  12. Task 05:样式色彩秀芳华
  13. 怒江java培训班_智慧树知到答案Java项目实战(黑龙江联盟)查题公众号
  14. TCP_CA_Open状态到TCP_CA_CWR状态
  15. scriptx.cab下载
  16. 常见胸肌问题解答(四):胸肌块形不够宽
  17. Matlab:船舶航向舵数学模型构建
  18. stm32 薄膜键盘原理_stm32 diy 机械键盘
  19. Unity游戏开发之UGUI设计——制作一个游戏内置的控制台界面/作弊菜单(详细流程,附代码)
  20. 宝妈们,你们老公一个月给你们多少生活费?

热门文章

  1. nssl1270-创世纪【树形dp,基环树】
  2. BZOJ 3513: [MUTC2013]idiots [FFT]
  3. 基于消息中间件RabbitMQ实现简单的RPC服务
  4. 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题
  5. Oracle入门(十三)之SQL的DML
  6. 阿里巴巴对Java编程【代码格式】的规约
  7. 通往大神之路,百度Java面试题前200页。
  8. 简化得最没道理的6个汉字,让人大跌眼镜
  9. 三国志战略版360区S4服务器合并信息,三国志战略版pk赛季怎么转区?s4转区规则[多图]...
  10. android 枚举类型比较大小写,Spring 3.0 MVC绑定枚举区分大小写