sqlserver->clickhouse迁移数据

这篇具有很好参考价值的文章主要介绍了sqlserver->clickhouse迁移数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网上看了很多cdc的方案,说实在的,flink也不好弄,主要是驱动。

        flink sql中的方案,好不容易弄到了所有的驱动,结果,字段非常难搞,例如uuid对应flink的String,结果执行flink sql的时候,字段类型不对。导入布尔值的时候,提示true不合法,哎,也是醉了!

        换一个方法,flink-cdc,按网上的配置弄好了,结果,提示找不到驱动,sqlserver都没有。

        用java写?很直白说,我不会!

        于是暂时放弃所有flink的方法,用net6写了一个搬运工具,这个搬运工具有个缺陷,只能用mergaTree!这个东东从官方文档说,排序有点慢,感觉是很慢,非常慢!没关系,先摸索一下,主要是说说这个工具的思路。

        sqlserver好几个表都是千万级的,只是7天的部分数据,试试水。

        总体方法:sqlserver->IDataReader->queue->bulk insert->clickhouse

        不要尝试一次性把数据从sqlserver中读出来再写到目标库,这个方案是最不可接受的:

第一:读取千万数据级的表,需要的时间不少,返回结果后,内存爆了!

第二:浪费大量的时间读取数据,即使硬件支撑得起,时间也等不起!

dataReader设置每1000条记录就返回一个结果列表

protected override (IEnumerable<object[]>, int Length) GetRows(string table, int count)
{
	var list = new object[count][];
	var i = 0;
	var _reader = GetDatabaseReader(table);
	if(_reader == null)
		return (new object[0][], 0);
	while (_reader.Read())
	{
		object[] data = new object[_reader.FieldCount];
		_reader.GetValues(data);
		list[i] = data;
		i++;
		if (i >= count)
		{
			break;
		}
	}

	return (list, i);
}

这里的reader是在读取完一个表之前,都是要保持的,通过GetDatabaseReader方法从内存中获取出来。list对象就是每次读取的数据包。

定义一个队列

var queue = new Queue<object[][]>();

 每读一个包,就往队列中推,这样就形成一个完整的数据队列。

注意的是,用多线程来执行GetRows方法,并没有什么用,速度不会快起来,于是就只用了单线程获取数据。

写入数据,驱动用的是clickhouse.client,nuget安装即可。文档也很清楚了,用bulk方法,支持object[]这样的数据,也支持DataTable对象。

用多线程从queue获取数据包,然后写入到ck,注意一下,有时候写入速度慢,例如网络,线程调度不优等各方面的问题,防止队列中的数据包过多占用内存,每次获取包的时候,如果队列数量大于5个包,就暂停一下获取数据,实际上,3个线程写一个线程读,是不会出现等待的情况的。

quue对象不需要线程安全,不会出问题的,放心。

        其实数据库之间迁移数据,最麻烦的就是字段类型的对应,所以需要建立一个映射对应表,理论上,把这个逻辑优化一下,大部分数据库的迁移都是可以的,只是驱动和字段不一样而已。

        这个工具写了两天,迁移了4个数据库,没报错,基本是一次成功,还是有点小满足的,有数据就可以玩一下clickhouse了,体验一下高速的查询。

        但是,还是要研究一下flink-cdc,否则自己写也很麻烦,主要是有点懒,呵呵,谁给个线程的库让我玩转flink-cdc,其实最理想的还是想sqlserver->flink cdc->rabbitmq->clickhouse,虽然同步会慢一点,但是这样更加灵活,可以同步到多个数据库中,中间环节用json传输。但是,也没搞定,flink官方的rabbitmq库不知道怎么用。文章来源地址https://www.toymoban.com/news/detail-809700.html

到了这里,关于sqlserver->clickhouse迁移数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sqlserver数据库错误码

    错误 严重性 是否记录事件 说明 -2 超时时间已到。 超时时间在操作完成或服务器没有响应之前已过。 (Microsoft SQL Server,错误: -2)。 -1 在建立与服务器的连接时出错。 连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接,这可能会导致此失败。 (提供程序:

    2024年02月05日
    浏览(112)
  • 数据库实训sqlserver

    一、数据库设计题 1、以“library”为名称创建一个数据库。该数据库中包含一个主数据文件tsdata.mdf,存放路径为“d:data”;一个事务日志文件tslog.ldf,存放路径为“d:data”。其他设置自定。  2、在上题创建好的数据库中,按如下要求创建三张表。 表1 书籍表:用来存储书

    2024年02月09日
    浏览(45)
  • SQLServer 数据库之锁

    SQL Server 数据库支持多个用户同时访问数据库,但当用户同时访问数据库时,就会造成 并发问题 ,锁的机制能很好地解决这个问题,保证数据的完整性和一致性; SQL Server 自带锁机制,若是简单的数据库访问机制,完全能满足用户的需求;但对于数据完全与数据完整性有特殊

    2024年02月13日
    浏览(49)
  • 如何远程连接SQLServer数据库

    1.打开  选中如下的连接方式  连接成功后就会出出现 2.连接成功后:右键设置属性 安全性设置:如下图所示 设置连接属性:     设置完成之后点击完成!!! 3.打开  启动sqlServer服务,必须启动!!  按照如下进行启动,右键即可启动!  设置本机的ip地址,ipconfig查看本

    2024年02月09日
    浏览(44)
  • SQLServer数据库备份与还原

            Microsoft SQL Server Management Studio,顾名思义,是微软 SQL Server的管理工具,说白了,就是微软官方管理自家数据库的软件。可以对数据库和表操作,本章我们用到它强悍的备份和还原功能。       (1)  选中需要备份的数据库,右键选择备份   (2)添加目标 (3)此

    2024年02月13日
    浏览(44)
  • Kettle连接SQLSERVER数据库

    下载驱动程序 微软官网下载 Microsoft SQL Server JDBC 驱动程序:https://www.microsoft.com/zh-cn/download/details.aspx?displaylang=enid=11774e6b34bbe-475b-1abd-2c51-b5034bcdd6d2=truea03ffa40-ca8b-4f73-0358-c191d75a7468=true44F86079-8679-400C-BFF2-9CA5F2BCBDFC=1 双击下载的软件进行解压,找到jre8文件夹底下的sqljdbc42.jar文件,

    2024年02月11日
    浏览(67)
  • Python连接SQLserver数据库

    前进四的状态出发! 学习Python 连接 数据库 解决问题: 1:如何连接数据库 2:如何进行简单查询 3:如何将查询中的中文乱码给修复 4:如何进行插入,更新,删除 主要在pymssql.connect 中添加charset = ‘cp936’ 原因:因为字符串字段类型为:varchar,造成读取数据乱码。 方法一的缺点: 如果

    2024年02月02日
    浏览(48)
  • Python数据库操作【三】—— SQLServer

    以下摘自百度百科: SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本

    2024年02月03日
    浏览(42)
  • C#实现SqlServer数据库同步

    实现效果: 设计思路: 1. 开启数据库及表的cdc,定时查询cdc表数据,封装sql语句(通过执行类型,主键;修改类型的cdc数据只取最后更新的记录),添加到离线数据表; 2. 线程定时查询离线数据表,更新远程库数据; 3. 远程库数据被更改又会产生cdc数据,对此数据进行拦截;

    2024年02月13日
    浏览(37)
  • sqlserver数据库导出到mysql

    爱到分才显珍贵,很多人都不懂珍惜拥有,只到失去才看到,其实那最熟悉的才最珍贵的。   这里只介绍一种方式,有很多的方式。 1.使用Navicat 安装 下载 2.工具 数据传输  3.选择源和目标 然后开始 4.最好导入前备份一下库

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包