【转载】高效能,大数据量存储方案SqlBulkCopy
前些日子,公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储。于是在网上进行查找,发现了一个比较好的解决方案,就是采用SqlBulkCopy来处理存储数据。SqlBulkCopy存储大批量的数据非常的高效,就像这个方法的名字一样,可以将内存中的数据表直接的一次性的存储到数据库中,而不需要一次一次的向数据库Insert数据。初次实验,百万级别的数据表,也只需几秒时间内就可以完全的存入数据库中,其速度,比传统的Insert方法不止快很多倍。下面,我将用代码,介绍其用法。
/// LaborReport Data Import To Database
/// </summary>
/// <param name="laborReport">laborReport data table</param>
/// <param name="laborReportDetail">laborReportDetail data table</param>
public void LaborReportInsert(DataTable laborReport, DataTable laborReportDetail)
{
using (SqlConnection conn = new SqlConnection(this.Connection))
{
if (conn.State != ConnectionState.Open)
conn.Open();
using (SqlBulkCopy sqlBCLaborReport = new SqlBulkCopy(conn))
{
sqlBCLaborReport.BatchSize = laborReport.Rows.Count;
sqlBCLaborReport.BulkCopyTimeout = 60;
sqlBCLaborReport.DestinationTableName = "LaborReport";
sqlBCLaborReport.WriteToServer(laborReport);
}
using (SqlBulkCopy sqlBCLaborReportDetails = new SqlBulkCopy(conn))
{
sqlBCLaborReportDetails.BatchSize = laborReportDetail.Rows.Count;
sqlBCLaborReportDetails.BulkCopyTimeout = 60;
sqlBCLaborReportDetails.DestinationTableName = "LaborReportDetails";
sqlBCLaborReportDetails.WriteToServer(laborReportDetail);
}
if (conn.State != ConnectionState.Closed)
conn.Close();
}
}
上边的示例代码,将内存中的两个DataTable 数据一次性的存入数据库中,只要内存中的数据表格的结构跟数据库中的表格结构一样,就可以了,如果数据库中包含自增列字段,我们可以不需要在内存表中定义,当数据保存到数据库中的时候,自增列会自动生成数据的。
转载于:https://www.cnblogs.com/fx2008/archive/2011/12/08/2280210.html
【转载】高效能,大数据量存储方案SqlBulkCopy相关推荐
- 我国成功研制EB级云存储系统:可满足大数据量存储落地需求
国家863计划云计算关键技术与系统(二期)项目课题验收会11月29日在天津召开,由我国高性能计算领军企业中科曙光承担的"EB级云存储系统研制"课题通过技术验收. 为促进我国云计算核 ...
- MySQL数据库如何解决大数据量存储问题
FROM http://blog.csdn.net/likika2012/article/details/38816037 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存 ...
- oracle大数据量删除方案
oracle进行大数据量删除的时候,容易报错表temp表空间空间不够导致删除失败,此时的处理方案有: 方案一: 分批删除,提交之后继续执行 方案二: 当剩下的数据量小于待删除的数据量时,可以使用转表的 ...
- 高并发大数据量的数据库的设计与优化
1.可以使用静态页面的地方,使用静态页面,减少页面解析时间. 2.尽量使用缓存技术来做.用户缓存.页面缓存等一切缓存,使用特定的机制进行刷新.利用消耗内存空间来换取用户的效率.同时减少数据库的访问次数 ...
- mysql大数据量迁移方案
使用navicat等客户端软件功能进行同步 使用mysqldump进行导出导入同步 使用mysq命令的into file,load file进行同步命令 数据量不大可以用navicat,mysqldu ...
- 优化大数据量查询方案——SpringBoot(Cloud)整合ES
一.Elasticsearch简介 实际业务场景中,多端的查询功能都有很大的优化空间.常见的处理方式有:建索引.建物化视图简化查询逻辑.DB层之上建立缓存.分页-然而随着业务数据量的不断增多,总有那么 ...
- B端大数据量查询优化方案
文章目录 背景 解决方案 方案1:分库分表+搜索能力 方案2:分区+搜索能力 分区 搜索 整体方案 总结 背景 在一些业务场景中,一开始业务量并不大,可见性的几年内不会突破非常大的数量,所以一开始设计 ...
- G6展示网络拓扑图,适配大数据量的方案
接手之初,整体样式: 但当数据量变大时,渲染速度慢,且容易卡死浏览器,导致崩溃.大概支持500个节点. 通过浏览器performance工具分析得知,是由于comboForce(分组力导布局)算法冗余 ...
- 大数据量高并发的数据库优化(转载)
对其进行处理是一项艰巨而复杂的任务.原因有以下几个方面: 一.数据量过大,数据中什么情况都可能存在.如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千 ...
最新文章
- 毒霸主程序集成反流氓
- FAST选址与三维仿真模拟研究
- js实现横向跑马灯效果
- Java Learning:并发中的同步锁(synchronized)
- 下面有关java类加载器牛客网_下面有关java classloader说法错误的是?
- php启用openssl,php怎么开启openssl模块
- python语句结束符_python中判断文件结束符的具体方法
- 记录一次网盘资源不给提取码的经历!另类编程思维,Python破之!
- p1292监狱(动态规划)
- PHP中header和session_start前不能有输出的原因
- Linux/Unix下ODBC的安装、配置与编程
- Linux基金会宣布成立Ceph基金会
- 【Unity项目优化宝典】Unity3D手游开发客户端开发经验总结
- java 中 isb啥意思_isb官网-新版下载
- 签证者的武林秘笈(一)—-来自太傻的签证哲学
- SAP 业务技术平台(BTP) Workflow(工作流)功能介绍
- GitCode上手使用体验
- P2234 [HNOI2002]营业额统计 (Java)
- 攻防世界 xctf wtc_rsa_bbq writeup
- 随机信号处理的一些归纳