MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒

这里采用.NET Framework 4.0以上版本中新出现的 ConcurrentQueue<T> 类

MSDN是这样描述的:

ConcurrentQueue<T> 类是一个线程安全的先进先出 (FIFO) 集合。

ConcurrentQueue<T> 的所有公共且受保护的成员都是线程安全的,可从多个线程同时使用。

共采用两个线程,一个读一个写。

ConcurrentQueue<T>的实现方法:

(FIFO) 集合:

ConcurrentQueue<DataTable> DataTableList = new ConcurrentQueue<DataTable>();

读:


 1 private void MainThread()
2 {
3 if (DataTableList.Count < _pageCount)//小于队列最大值后即可再次获取一次
4 {
5 for (int index = 0; index < _pageCount; index++)
6 {
7 DataTable dt = null;
8 try
9 {
10 int counts = index == 0 ? index : (index * PageSize - 1);
11 dt = MySql.GetDataTable(counts, PageSize);
12 DataTableList.Enqueue(dt);
13 Console.WriteLine("Read {0}\t{1}/{2}", DateTime.Now.ToString("HH:mm:ss.fff"), index, counts);
14 }
15 catch (Exception)
16 { }
17 ThreadPool.QueueUserWorkItem(Thread1, dt);
18 }
19 }
20 }

写:


 1 private void Thread1(object state)
2 {
3 var dt = (DataTable)state;
4 MsSql.Insert(dt);
5 Console.WriteLine("Write {0}", DateTime.Now.ToString("HH:mm:ss.fff"));
6 OK_WORK_COUNT++;//已处理任务数+1
7 //从任务队列移除
8 if (DataTableList.Count > 0)
9 {
10 DataTableList.TryDequeue(out dt);
11 }
12 }

读取MySQL数据库的方法很简单:

MySqlDataAdapter.Fill(DataTable dataTable)方法填充数据。

写入MSSQL数据库的方法也很简单:

SqlBulkCopy.WriteToServer(DataTable dataTable)方法批量插入数据。

经过多次测试,程序上的优化,基本到位了,但我知道肯定还有可以改进的地方,请各路大神不惜赐教。

主要性能瓶颈还是在I/O上,就拿我自己的例子来说吧:

本机上用HHD存放MySQL和MSSQL数据库,不管三七二之一,连同数据迁移程序也放在HHD。

一次读写5000条数据,单线程测试结果是:41分31秒。

本机上创建一个RAM DISK用来存放MySQL和MSSQL数据库,照旧,数据迁移程序也放在这里。

一次读写20W条数据,单线程测试结果:3分11秒

而改为ConcurrentQueue<T>多线程同步线程安全后,一次读写20W条数据,多线程测试结果:2分11秒

如果读写数据不需要按顺序的话,完全可以抛弃掉ConcurrentQueue<T>,从而获得更高的效率,更快的读写速度。

如果SqlBulkCopyOptions不设置为UseInternalTransaction (事务),又可以再快上一点点。

如果写入目标是Oracle数据库,和MSSQL相比,Oracle的平均写入速度比MSSQL要快上0.1~0.35秒。

当然,无论怎样,实际测试数据和我公布的测试数据是有差异的,毕竟使用环境不同。

这个测试结果并不专业,请各位多多见谅。

范例源码https://gitcandy.com/Repository/Tree/MySQLToMSSQL-MultiThread-Queue-Safey

注释:

FIFO:“先进先出法”是一种排程算法。它描述了一个伫列所使用的先到先得服务方式:先进入伫列的工作将先被完成,之后进来的则必须稍候。

参见英文版维基百科:http://en.wikipedia.org/wiki/FIFO_(computing)

中文版维基百科太简洁了:http://zh.wikipedia.org/zh-cn/先进先出

HHD:全称Hard Disk Drive,详见:硬盘-百度百科

RAM Disk:详见:RAM驱动器-百度百科

MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒,布布扣,bubuko.com

时间: 2024-10-12 03:22:50

MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒的相关文章

mysql数据迁移

一. 数据迁移简介所谓的数据迁移,就是指将原有的数据库系统迁移到另外一个业务系统上数据迁移的原因是多种多样的,有可能是业务变更.硬件升级.平台切换或升级mysql数据库 迁移的注意事项:(1).相同版本可以迁移(2).注意版本可以使用的引擎(3).低版本可以向高版本进行数据迁移,高版本一般兼容低版本的特性(4).高版本的数据不能向低版本进行数据迁移,会出现数据不兼容的情况(5).迁移是请注意导出数据和备份数据,出现迁移失败时,立即启动备份方案,保证公司业务的正常运行(6).在数据迁移时,要选择用

阿里云 CentOS下面 Mysql 数据迁移

本次Mysql数据迁移, 只是从阿里云的CentOS系统盘中,把mysql的data数据, 迁移到非系统盘中. 起因: 由于购买阿里云时候,  默认的系统盘只有20G.  后又购买了100G磁盘空间, 这时, 需要把原mysql数据, 迁移到新的磁盘分区中. 所有的操作步骤记录如下: 1. 新挂载磁盘分区: mount, 并设置为重启后自动加载. 2. 暂时关闭nginx服务器. 再关闭mysql服务器. 3. 修改/etc/my.cnf配置文件, 将里面的路径, 修改为新磁盘中的, 需要保存m

MySQL数据迁移问题

最近尝试了一下小型数据迁移.本地迁移,windows平台,修改配置文件中的data_dir项,然后将旧的data文件下的数据文件全部拷贝过去. 之后登陆数据库,竟然1145错误.可以看到数据库的结构,各个表的名称,但是想深入表看其中数据却看不了. 不知道为什么,搜了一下,有人说拷贝的时候原SQL服务没有停下,有的说InnoDB引擎创建的表不支持这种直接拷贝,而MyISAM则可以. 没办法,只能采取笨办法咯~先在原来数据库上进行备份,然后再导入. mysqldump -u root -p data

mysql数据迁移到sql server(微软的迁移工具)

系统环境:win7 64位旗舰版 Mysql数据库:5.5版本  64位 Sql Server 2008: 64位 Odbc驱动程序版本:5.1 64位 迁移数据库:aimsv22 迁移工具: SSMA 2008 forMySQL 数据迁移时必须下载好对应的odbc驱动程序 (此处为odbc for mysql). 在微软官方网站下载SSMA 2008 forMySQL mysql数据库   sql server数据库

centos下mysql数据迁移方法

第一种: 原始数据库不需要重新安装: 默认mysql会安装在/var/lib/mysql这里,若将数据迁移到/data/mysql目录下,步骤如下: 1.停止mysql服务 2.#cp /var/lib/mysql/* /data/mysql/ #chown -R mysql.mysql /data/mysql 3.修改my.cnf文件 basedir = /usr datadir = /data/mysql socket = /data/mysql/mysql.sock pid-file =

MySQL数据转移至MSSQL详解

一.安装MySQL ODBC驱动 为MySQL安装Connector/ODBC驱动.在此需要注意的一点是Connector/ODBC驱动与MySQL Server的版本对应问题. 二.创建系统DSN DSN为ODBC定义了一个确定的数据库和必须用到的ODBC驱动程序.每个ODBC驱动程序定义为该驱动程序支持的一个数据库创建DSN需要的信息. 创建系统DSN步骤如下: 开始->设置->控制面板->管理工具->数据源(ODBC),按该流程打开ODBC数据源管理器. 切换至系统DSN选项

Mysql 数据迁移后 启动出错

今天上班后不知道为什么,mysql一直无法启动,折腾了半天于是决定重装 我本地的服务器用的是wamp , 重装的时候, 要进行数据备份 , 我使用的最简单粗暴的备份方式, 就是直接进入到mysql的安装目录下, 把data拷贝一份就可以了. 然后卸载wamp后重装,数据迁移就是把data贴到相同位置替换下就ok了 但是今天迁移完后,mysql怎么也启动不了,查看log,显示各种错误 2014-11-13 13:40:29 5196 [Note] Plugin 'FEDERATED' is dis

MySQL数据迁移实战

一.背景: 公司因为机器资源紧张,需要给测试部分腾出几台机器做测试用,需要把现有机器上的应用全部迁移到别的机器上. 经过讨论,采用Xtrabackup工具对对InnoDB做数据备份. 二.准备工作 1.安装Xtrabackup工具 1)安装依赖包 yum install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel p

MySQL数据迁移到SQL Server

数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持. 此博客主要介绍MySQL到SQL Server数据迁移的工具:SQL Server Migration Assistant for MySQL 的使用. 从上面链接的官网下载安装. 需要注意的是你需要选择迁移到的SQL Server数据库的版本,目前支持:SQL Azure,SQL Server 2005,SQL Server2008,SQL Server 2012