大数据量更新

大数据量更新,第1张

已经建立唯一索引了,多个进程是没有问题的。服务器也是有交换量的。你可以在服务器上设置一下网络交换量,让更多的系统资源参与数据交换。然后进程数也不是越多越好,开太多了服务器拖不动反而慢。我感觉2~4个是最快的。

增量同步和全量同步是数据库同步的两种方式。全量同步是一次性同步全部数据,增量同步则只同步两个数据库不同的部分。

数据库简介:

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

C#利用update更新数据到oracle数据库:

第一步:打开oracle数据库

public static string connString = "";

public static OracleConnection conn = null;

//打开数据库连接

public static bool Open()

{

//从配置文件中获取连接字符串

//配置文件需要放在项目目录下的bin\Release中

connString = getXmlValue("connString");

conn = new OracleConnection(getXmlValue("connString"));

try

{

connOpen();

ConsoleWriteLine("数据库连接成功");

return true;

}

catch (SystemException ex)

{

ConsoleWrite(exMessage);

MessageBoxShow("未能连接到数据库");

return false;

}

第二步:执行更新方法:

public static int update(int ruleId, int equipmentId, String equipmentName, String propertyName, int ruleType, String ruleRequest, String ruleRequestOther, String ruleExplain)

{

String sql = "update Device_Attr t set tBASEID = :equipmentId, tBASENAME = :equipmentName,tCA_NAME = :propertyName,tCA_RULETYPE = :ruleType,tCA_RULETEXT = :ruleRequest,tCA_RULETEXT2 = :ruleRequestOther,tCONTENT = :ruleExplain where tCA_ID =:ruleId";

OracleCommand cmd = new OracleCommand(sql, conn);

OracleParameter param_1 = new OracleParameter(":equipmentId", equipmentId);

cmdParametersAdd(param_1);

OracleParameter param_2 = new OracleParameter(":equipmentName", equipmentName + "$");

cmdParametersAdd(param_2);

OracleParameter param_3 = new OracleParameter(":propertyName", propertyName);

cmdParametersAdd(param_3);

OracleParameter param_4 = new OracleParameter(":ruleType", ruleType);

cmdParametersAdd(param_4);

OracleParameter param_5 = new OracleParameter(":ruleRequest", ruleRequest);

cmdParametersAdd(param_5);

OracleParameter param_6 = new OracleParameter(":ruleRequestOther", ruleRequestOther);

cmdParametersAdd(param_6);

OracleParameter param_7 = new OracleParameter(":ruleExplain", ruleExplain);

cmdParametersAdd(param_7);

OracleParameter param_8 = new OracleParameter(":ruleId", ruleId);

cmdParametersAdd(param_8);

int result = cmdExecuteNonQuery();

return result;

}

需要将大量数据(大概5W条)插入MySQL数

据库,用普通的SQL

Statement执行,时间大概是几分钟。于是想到用PreparedStatement,但是改了之后发现效率并没有很大的提升。不成,想到了

load data local

infile命令,以前一直认为这条命令仅限MySQL终端上使用而不是标准的SQL语句,今天看了几篇文章之后有了很大的收获。

1 使用PreparedStatement batch operation

以前使用PreparedStatement性能没有很大提升的原因在于:

没有使用批处理方法

在语句执行之前应关闭事务自动提交,语句执行完之后再提交

public

void batchLoad(Connection connection)

{

try

{

connectionsetAutoCommit(false);

BufferedReader reader =

new BufferedReader(new

FileReader("tfacts_result"));

String sqlString =

"insert into test(node1, node2, weight) values(, , )";

PreparedStatement pstmt = connectionprepareStatement(sqlString);

String line =

null;

while(true)

{

line = readerreadLine();

if(line == null)

{

break;

}

String[] columns = linesplit("\t");

for(int

i = 1; i <= columnslength; i++)

{

pstmtsetString(i, columns[i-1]);

}

pstmtaddBatch();

}

pstmtexecuteBatch();

connectioncommit();

pstmtclose();

readerclose();

}

catch (FileNotFoundException e) {

eprintStackTrace();

}catch

(SQLException e){

eprintStackTrace();

}catch

(IOException e){

eprintStackTrace();

}

2使用load data local infile into tabel XXX(注意在文件中用\t将每列数据隔开)

public

void loadData(Connection connection)

{

long

starTime = SystemcurrentTimeMillis();

String sqlString =

"load data local infile into table test";

PreparedStatement pstmt;

try

{

pstmt = connectionprepareStatement(sqlString);

pstmtsetString(1,

"tfacts_result");

pstmtexecuteUpdate();

pstmtclose();

}

catch (SQLException e) {

eprintStackTrace();

}

long

endTime = SystemcurrentTimeMillis();

Systemoutprintln("program runs "

+ (endTime - starTime) + "ms");

}

测试了5W条数据,PreparedStatement耗时10s,而load data infile耗时3s。

在数据库的 *** 作中,更新数据,是很常见的情况。如下参考:

1创建一个临时表,用于演示sqlserver语法中的更新更新修改方法。

2 创建另一个临时表,以演示如何将数据从一个临时表更新到另一个临时表,如下图。

3在临时表中插入几行测试数据,但不在Total列中插入值。

4从#tblUpdate中查询临时表select 中的测试数据;从#tblTotal中选择。

5使用update更新临时表#tblUpdate中的Total结果,假设Total = num price update #tblUpdate set Total = Num Price。

6 再次查询临时表#tblUpdate的结果,您可以看到之前为NULL的Total列有值。

注意事项:

SQL的核心部分相当于关系代数,但又具有关系代数所没有的许多特点,如聚集、数据库更新等。它是一个综合的、通用的、功能极强的关系数据库语言。

以上就是关于大数据量更新全部的内容,包括:大数据量更新、数据库,增量同步和全量同步是什么、C#如何将datatable中的数据批量更新到MYSQL数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/10181468.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存