SQL数据同步到ELK(一)- 日常开篇
需求
在我们的实际业务中,业务数据大部分是通过传统DB做持久化,但有时会使用Solr/Elastic Search等做搜索、缓存等其他服务,那么如何将数据同步到这些异构的存储系统中呢?
这就是我最近在学习的一个东西,要想让数据非常稳定、高效、低延时的同步,并非一件易事(对于我来说是这样,如果你有非常成熟的方案,请务必要推荐给我!!!)。
这个系列将会以SQL SEVER同步到ELK为例,尝试一下各种不同的方案,在写本篇时,还只是理论研究阶段,所以未来这篇文章如果写不下去了,希望大家谅解,毕竟SQL SERVER的方案实在太少了。
常见思路
一般来说,解决该问题的常见思路有以下几种(欢迎补充):
- 利用数据库触发器,在需要监听的字段或表上创建触发器
- 使用数据库的一些特性,比如本篇想说的SQL Server CDC,或者MySQL的Bin Log等
- 在程序中修改DB数据的地方,同时修改搜索引擎中的数据
- 利用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(一)- 日常开篇的更多相关文章
- SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)
一.相关文档 老规矩,为了避免我的解释误导大家,请大家务必通过官网了解一波SQL SERVER的相关功能. 文档地址: 整体介绍文档:https://docs.microsoft.com/en-us/ ...
- SQL数据同步到ELK(二)- Elastic Search 安装
开篇废话 没错,前面扯了一堆SQL SERVER,其实我连Elastic Search根本没动手玩过(是不是与时代有点脱节了?),那今天我就准备尝试安装一个ELK的简单集群出来(这个集群是使用我的小米 ...
- SQL数据同步到ElasticSearch(三)- 使用Logstash+LastModifyTime同步数据
在系列开篇,我提到了四种将SQL SERVER数据同步到ES中的方案,本文将采用最简单的一种方案,即使用LastModifyTime来追踪DB中在最近一段时间发生了变更的数据. 安装Java 安装部分 ...
- SQL数据同步之发布订阅
发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅.发布可以发布一张表的部分数据,也可以对整张表进行发布.下面分别 ...
- SQL Server数据同步的研究(单向/双向)
思路: 1.做中间件(简单:定时采集:复杂:分布式,订阅中心的形式,如微信的中间件:https://github.com/tencent-wechat/phxsql) 2.采用触发器的形式,有数据触发 ...
- 两台SQL Server数据同步解决方案
复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可 ...
- ORACLE和SQL SERVER的数据同步常用方法
ORACLE和SQL SERVER的数据同步常用方法 1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在or ...
- SQL Server 复制 - 发布订阅(SQL Server 数据同步)
原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...
- sql server作业实现数据同步
作业介绍 SQL SERVER的作业是一系列由SQL SERVER代理按顺序执行的指定操作.作业可以执行一系列活动,包括运行Transact-SQL脚本.命令行应用程序.Microsoft Acti ...
随机推荐
- Prometheus 一条告警的触发流程、等待时间
Prometheus 一条告警的触发流程.等待时间 报警处理流程如下:1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过上述Promethes配置的'sc ...
- Redis(一) redis安装、启停
Redis是开源的内存数据存储,常被用作为内存数据库.缓存.全局队列.计数器等等. Redis安装 Redis分为多种模式:单机模式.高可用模式.集群模式.这篇中主要简介单机版的安装方式. 源码构建式 ...
- vb Replace 实现
今天改一个VB程序时发现程序自带的replace 函数不知什么原因竟然不好用了 所以就自己写了一个玩玩 记录一下 'XGZ '替换字符 Private Function Replace1(ByVal ...
- ansible简易使用
一.本地环境: centos 7 192.168.10.10 主控机 centos 7 192.168.10.130 被控机 Windows7 192.168.10.13 ...
- PHP之面向对象(下)
1,类的创建 class 2,对象的创建 new关键字 3,成员的添加 修饰符 添加成员需要三个修饰符 public 公开的 定义公共的属性和方法,类的外部,内部,子类都可以使用 protected ...
- 判读是不是对象字面量(纯对象)。对象字面量创建方式有{}、new Object()创建
//判读是否是自身属性 function isHasPro(obj,pro){ return obj.hasOwnProperty(pro) ? true : false; } //判读是不是对象字面 ...
- 关于less的一些入门用法
less 变量(Variables) @nice-blue: #5B83AD; @light-blue: @nice-blue + #111; #header { color: @light-blue ...
- QT多线程中使用QTcpSocket遇到的读写数据问题
多线程中使用QTcpSocket在run()方法中new QTcpSocket;然后监听readyRead()信号connect(m_pTcpSocket,SIGNAL(readyRead()),th ...
- 移动4G插卡注网
本文根据插入移动4G单卡到注册4G网络过程的mtklog分析. 插卡动作: 从以上信息无法区分单卡还是双卡,通过ATR参数判断: 注网流程,此过程未开启4G数据连接: [MS->NW] ESM_ ...
- JVM常见面试题及答案
11.JVM内存分哪几个区,每个区的作用是什么? java虚拟机主要分为以下一个区: 方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区 ...