同步数据至ES时,数据丢失问题处理

ops/2024/12/12 13:39:02/

问题背景:

数据同步到es过程中,发现数据丢失问题,原因正是因为写入索引前会先删除索引导致!

总体流程:

  • 使用别名索引E
  • redis获取当前索引B(即E指向B),获取新索引A
  • 初始化新索引A,将数据存储到新索引A
  • redis存储当前索引A,别名索引E指向A

代码实现:

  1. redis获取当前索引B
java">    public Class<?> getCurrentIndexByAlias(@NonNull String alias, Class<?> defaultClass) {String value = stringRedisTemplate.boundValueOps(INDEX_ALIAS +"_"+ alias).get();if (value == null) {return defaultClass;}return Class.forName(value);}
  1. 获取新索引A,存储数据
java">     Method method = currentIndex.getMethod("other");//执行方法获取新索引Class<?> newIndex = (Class<?>) method.invoke(currentIndex.getDeclaredConstructor().newInstance());//初始化索引initIndex(newIndex);//存储数据...........
  1. redis存储当前索引A
java">	redisRepository.switch2IndexOfAlias("E", newIndex);public void switch2IndexOfAlias(String alias, Class<?> clazz) {stringRedisTemplate.boundValueOps(INDEX_ALIAS +"_"+ alias).set(clazz.getName());}
  1. 别名索引E指向A
java"> esRepository.switchIndex("E",newIndex.getAnnotation(Document.class).indexName(),currentIndex.getAnnotation(Document.class).indexName());
java">    public <T> void switchIndex(String alias, String newIndexName, String oldIndexName) {AliasActions aliasActions = new AliasActions();//更新新索引if (existsIndex(newIndexName)) {AliasAction.Add addAction = new AliasAction.Add(AliasActionParameters.builder().withIndices(newIndexName).withAliases(alias).build());aliasActions.add(addAction);}//删除旧索引if (existsIndex(oldIndexName)) {AliasAction.Remove removeAction = new AliasAction.Remove(AliasActionParameters.builder().withIndices(oldIndexName).withAliases(alias).build());aliasActions.add(removeAction);}//绑定别名elasticsearchOperations.indexOps(IndexCoordinates.of(newIndexName)).alias(aliasActions);}

http://www.ppmy.cn/ops/141252.html

相关文章

uniapp 微信小程序webview 和 h5数据通信

项目是uniapp编写&#xff0c;因为是先开发了h5和app&#xff0c;小程序是突然要用的&#xff0c;做兼容开发已经来不及&#xff0c;由于微信小程序webview载入h5 因为通信必须要特殊限制&#xff08;网页向小程序 postMessage 时&#xff0c;会在以下特定时机触发并收到消息&a…

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。 首先来了解几个概念: CPython 是 Python 编…

22.在Vue3中使用OpenLayers加载远程 KML 文件示例

前言 OpenLayers 是一个功能强大的开源地图库&#xff0c;广泛应用于前端 GIS&#xff08;地理信息系统&#xff09;开发中。 而 KML&#xff08;Keyhole Markup Language&#xff09;是一种用于表示地理空间数据的标准文件格式&#xff0c;通常用于存储点、线、多边形等地理要…

单片机:实现生日快乐歌(附带源码)

单片机实现《生日快乐歌》 实现一个“生日快乐歌”是单片机应用中的一个经典项目&#xff0c;通过它可以学习如何控制声音输出、使用定时器、以及如何处理按键输入等功能。本项目将利用单片机生成《生日快乐歌》的音频信号&#xff0c;并通过蜂鸣器播放出来。 项目目标 本项…

自然语言处理:从入门到精通全指引

一、引言 自然语言处理&#xff08;NLP&#xff09;作为人工智能领域的关键分支&#xff0c;旨在让计算机理解、生成和处理人类语言&#xff0c;近年来取得了令人瞩目的成就&#xff0c;在智能客服、机器翻译、文本分析、语音助手等众多领域发挥着重要作用。从入门到精通自然语…

java中的数组(3)

大家好&#xff0c;今天给大家继续讲解数组这部分内容&#xff0c;有助于大家对数组的理解更深&#xff0c;那么我们就来看看接下来的内容。 4.认识.null int[] array null;(代表这个引用不指向任何对系) System. out.println (array); array [0] 1; err. NulLPointer …

前端文件下载

这里写自定义目录标题 前端文件下载方法使用a标签使用iframe标签二进制流 前端文件下载方法 使用a标签 /*** 文件下载方法 使用a标签* 存在浏览器下载时&#xff0c;太快的话&#xff0c;会取消上次的下载请求* param {*} href* param {*} filename*/ export function downlo…

Github 2024-12-11C开源项目日报Top10

根据Github Trendings的统计,今日(2024-12-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10Netdata: 开源实时监控平台 创建周期:4020 天开发语言:C协议类型:GNU General Public License v3.0Star数量:68982 个Fork数量:577…