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 ...
随机推荐
- 函数防抖节流的理解及在Vue中的应用
防抖和节流的目的都是为了减少不必要的计算,不浪费资源,只在适合的时候再进行触发计算. 一.函数防抖 定义 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时:典型的案例就是输入搜索:输入 ...
- 图解微信小程序---获取电影列表
图解微信小程序---获取电影列表 代码笔记 list跳转 第一步:编写前端页面获取相关的电影列表参数(对于显示参数不熟悉,可以先写js,通过console Log的方式获取我们电影的相关数据字段,后 ...
- NSSM部署.Net Core到 Windows 服务
NSSM 官网http://www.nssm.cc/,下载地址http://www.nssm.cc/download 简单点理解就是NSSM可以把一些exe程序封装成Windows服务,然后exe程序 ...
- microsoft.extensions.logging日志组件拓展(保存文本文件)
Microsoft.Extensions.Logging 日志组件拓展 文件文本日志 文件文本日志UI插件 自定义介质日志 Microsoft.Extensions.Logging.File文件文本日 ...
- 阿里云Centos7用putty ssh链接掉线
解决方法:修改云服务器 ssh 配置文件(修改前一定要先备份) (1)打开配置文件: vim /etc/ssh/sshd_config 1 (2)找到下面两行: ClientAliveInterval ...
- 微信页面script标签添加crossorigin=“anonymous”导致页面加载失败
公司一个微信企业号项目,突然出现页面数据加载失败,页面报错信息如下 意思是前端向服务端发送跨域资源请求访问这个js文件,但是服务端并不同意,所以服务端拒绝访问这个地址. 后来发现将crossorigi ...
- 详解:Java字符串类型"switch"的底层原理
前言: 最近更新得会比较频繁,希望大家见谅哦! 也感谢关注我的人,我会更加更加努力去做的! 基础 我们现在使用的Java的版本,基本上是都支持String类型的.当然除了String类型,还有int. ...
- Vue.js项目实战-打造线上商城
首先上一下完成后的效果: 首页: 商品详情页: 购物车页(其实还有个订单页,只是和购物车页基本类似,所以就不截图啦): 开始项目: 由于涉及的是前后端分离,所以我们的后台数据就模拟存储于浏览器端(co ...
- PowerShell:标记“&&”不是此版本中的有效语句分隔符
将命令行语句中的 && 改为分号 ; 就好了,就是这么简单.
- bugku insertsql
题目链接 0X00题目给出的PHP代码 error_reporting(0); function getIp(){ $ip = ''; if(isset($_SERVER['HTTP_X_FORWAR ...