需求

在我们的实际业务中,业务数据大部分是通过传统DB做持久化,但有时会使用Solr/Elastic Search等做搜索、缓存等其他服务,那么如何将数据同步到这些异构的存储系统中呢?

这就是我最近在学习的一个东西,要想让数据非常稳定、高效、低延时的同步,并非一件易事(对于我来说是这样,如果你有非常成熟的方案,请务必要推荐给我!!!)。

这个系列将会以SQL SEVER同步到ELK为例,尝试一下各种不同的方案,在写本篇时,还只是理论研究阶段,所以未来这篇文章如果写不下去了,希望大家谅解,毕竟SQL SERVER的方案实在太少了。

常见思路

一般来说,解决该问题的常见思路有以下几种(欢迎补充):

  1. 利用数据库触发器,在需要监听的字段或表上创建触发器
  2. 使用数据库的一些特性,比如本篇想说的SQL Server CDC,或者MySQL的Bin Log等
  3. 在程序中修改DB数据的地方,同时修改搜索引擎中的数据
  4. 利用DB中的LastModifyTime之类的字段来追踪变更

但上述方案均有不同程度的优势和不足:

方案1:

优:简单,而且主流数据库都支持触发器,方案较为通用。

劣:触发器这三个字一说出来,就会想到性能差。没错,该方案虽然简单,但性能是个大问题,基本上DBA是不允许你在PRD搞触发器这种东西的。

方案2:

优:可靠性较高,而且大部分数据库有办法对数据变化进行排序,不需要额外处理顺序问题

劣:不同的数据库机制不一致,如果一套系统涉及多种存储方式,那就得考虑和研究多种变更监测方式,如果数据库不支持或支持的不好,这种方式也基本上就不太容易往下进行了。

而且这种方式有时候也会带来一些额外的DB开销,比如SQL SERVER的CDC可能会导致DB死锁和DB文件占用空间变大的问题。

方案3:

优:能轻松应对不同数据库和多份额外存储(存储到多种大数据、缓存等产品中),实时性较高,甚至可以牺牲性能来保证多种产品同时存储完成。

劣:需要对程序进行较大的实现方案调整,而且该方式会导致无法直接修改DB中的数据,会给运维带来一定的麻烦,除非有比较完善的运维工具来协助。

方案4:

优:方案非常简单,任何一种数据库都能支持,也能满足运维时直接对DB中数据的操作需求。

劣:需要依赖DB中的特定字段,可能会涉及到原有表结构的修改。在删除数据时无法通过这种方式获得数据的变更

现有方案情况

MySQL的数据库同步方案,有阿里巴巴开源的比较成熟的Canal(https://github.com/alibaba/canal),其他国内的大厂也有不少的开源产品。

BUT,SQL SERVER就尴尬了,除了微软的一些文档,其他的方案少之又少,更别说像阿里这样的大厂的方案了,所以本着尝试的态度,开了这样一篇博客,希望对后人研究有些帮助吧~

BUT,还是有一些通用的基于JDBC的产品,比如ELK系列中的L(LogStash), SQL SERVER可以凑合的使用,接下来我将会做一些尝试,来同步SQL SERVER和ELK中的数据。

SQL数据同步到ELK(一)- 日常开篇的更多相关文章

  1. SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)

    一.相关文档 老规矩,为了避免我的解释误导大家,请大家务必通过官网了解一波SQL SERVER的相关功能. 文档地址: 整体介绍文档:https://docs.microsoft.com/en-us/ ...

  2. SQL数据同步到ELK(二)- Elastic Search 安装

    开篇废话 没错,前面扯了一堆SQL SERVER,其实我连Elastic Search根本没动手玩过(是不是与时代有点脱节了?),那今天我就准备尝试安装一个ELK的简单集群出来(这个集群是使用我的小米 ...

  3. SQL数据同步到ElasticSearch(三)- 使用Logstash+LastModifyTime同步数据

    在系列开篇,我提到了四种将SQL SERVER数据同步到ES中的方案,本文将采用最简单的一种方案,即使用LastModifyTime来追踪DB中在最近一段时间发生了变更的数据. 安装Java 安装部分 ...

  4. SQL数据同步之发布订阅

    发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅.发布可以发布一张表的部分数据,也可以对整张表进行发布.下面分别 ...

  5. SQL Server数据同步的研究(单向/双向)

    思路: 1.做中间件(简单:定时采集:复杂:分布式,订阅中心的形式,如微信的中间件:https://github.com/tencent-wechat/phxsql) 2.采用触发器的形式,有数据触发 ...

  6. 两台SQL Server数据同步解决方案

    复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可 ...

  7. ORACLE和SQL SERVER的数据同步常用方法

    ORACLE和SQL SERVER的数据同步常用方法 1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在or ...

  8. SQL Server 复制 - 发布订阅(SQL Server 数据同步)

    原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...

  9. sql server作业实现数据同步

    作业介绍  SQL SERVER的作业是一系列由SQL SERVER代理按顺序执行的指定操作.作业可以执行一系列活动,包括运行Transact-SQL脚本.命令行应用程序.Microsoft Acti ...

随机推荐

  1. Docker 快速安装&搭建 MongDB 环境

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  2. 在Visual studio上发布web项目,并添加到IIS服务器上。

    1.首先发布到IIS上 https://blog.csdn.net/kydkong/article/details/49563193 2.NET4.0部署出错HTTP 错误500.21 - Inter ...

  3. jq处理动画累加

    问题:日程提醒(跟日历一样的切换效果),只用一个div来展示当天日程数据,每次清空div里的数据再加载数据,导致切换日期时,数据展示div有闪动,于是采用动画来进行过渡,这样就巧妙地避免了闪动: $( ...

  4. C# vb .NET读取识别条形码线性条码UPC-A

    UPC-A是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的 ...

  5. RFID相关知识总结(超高频UHF)

    RFID标签分类 1.LF(Low frequency) 低频 频段范围: 125 KHz-135KHz(ISO18000-2) 常见应用:该频段特点是具有良好的物体穿透能力.广泛应用于进出管理.门禁 ...

  6. Java初学者推荐学习书籍PDF免费下载

    场景 Effective Java 中文版Java核心技术 卷Ⅰ 基础知识(第8版)Java语言程序设计-进阶篇(原书第8版)疯狂Java讲义Java从入门到精通 第三版Java编程思想第4版重构-改 ...

  7. java request.getInputStream中文乱码解决方案

    请求时要指定为UTF-8,中文码码完美解决 /** * * 得到请求body字符串,一般用于content-type:application/json * */ public static Strin ...

  8. tcp 3次握手和4次挥手

    TCP标志位 (参考来源:https://blog.csdn.net/ltstud/article/details/73995933和 https://blog.csdn.net/weixin_308 ...

  9. XSS相关有效载荷及绕道的备忘录(下)| 文末有打包好的负载

    前言: 今天发布的是下半部分 进入正题 过滤的绕过和一些奇异的有效载荷 大小写绕过 <sCrIpt>alert(1)</ScRipt> 绕过标签黑名单 <script x ...

  10. 串口 PLC 编程FAQ

    1. 不要频繁打开关闭串口,这是个耗时的过程,如果多个工位都争夺串口资源,则会出现卡顿,死锁. 2. PLC 的读写估计100毫秒,如果并发的写,有的写操作会失败,需要Delay或重试. 3. 通常一 ...