oracle入库的速度能到多少_Oracle入库速度测试(Java版)

CREATE TABLE TEST

(

TEST_ID NUMBER(10, 0),

TEST_NAME VARCHAR2(50),

TEST_TIME TIMESTAMP,

TEST_VALUE NUMBER(10, 3)

);

连接Oracle过程略。

一个测试用的类:

public class Util {

public static Random rand = new Random();

public static String atoz = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

public static String genString(int length)

{

StringBuilder re = new StringBuilder(length);

for (int i = 0; i < length; i++)

{

re.append(atoz.charAt(rand.nextInt(52)));

}

return re.toString();

}

public static double genDouble()

{

double d1 = 2500 * rand.nextDouble();

double d2 = 500000 * rand.nextDouble();

return d1 + d2;

}

}

拼sql入库:

public static void simpleInsert(int total) throws Exception {

Thread.sleep(3000);

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Timestamp current = new Timestamp(System.currentTimeMillis());

String currentStr = dateFormat.format(current);

Connection conn = DriverManager.getConnection(dbURL, user, password);

try {

long begin = System.currentTimeMillis();

Statement s = conn.createStatement();

for (int i = 1; i <= total; i++) {

String sql = String.format("INSERT INTO TEST (TEST_ID, TEST_NAME, TEST_TIME, TEST_VALUE) VALUES (%s, '%s', to_date('%s','yyyy-MM-dd HH24:mi:ss'), %s)", i, Util.genString(5), currentStr, Util.genDouble());

s.executeUpdate(sql);

}

long end = System.currentTimeMillis();

System.out.printf("Count:%d Time:%d\n", total, (end - begin));

} catch (Exception ex) {

ex.printStackTrace();

} finally {

conn.close();

}

}

测试结果:

Count:10240 Time:25203

Count:10240 Time:23891

Count:10240 Time:24516

Count:10240 Time:24891

Count:10240 Time:25063

Count:10240 Time:24359

Count:10240 Time:23547

Count:10240 Time:24312

Count:10240 Time:23938

Count:10240 Time:24687

总结:

平均入库速度每1万条23.87秒

绑定参数法入库:

public static void traditionalInsert(int total) throws Exception {

Thread.sleep(3000);

Timestamp current = new Timestamp(System.currentTimeMillis());

Connection conn = DriverManager.getConnection(dbURL, user, password);

try {

long begin = System.currentTimeMillis();

conn.setAutoCommit(false);

PreparedStatement ps = conn.prepareStatement("INSERT INTO TEST (TEST_ID,TEST_NAME,TEST_TIME,TEST_VALUE) VALUES (?, ?, ?, ?)");

for (int i = 1; i <= total; i++) {

ps.setInt(1, i);

ps.setString(2, Util.genString(5));

ps.setTimestamp(3, current);

ps.setBigDecimal(4, new BigDecimal(Util.genDouble()));

ps.addBatch();

if ((i % 500) == 0) {

ps.executeBatch();

}

}

ps.executeBatch();

conn.commit();

long end = System.currentTimeMillis();

System.out.printf("Count:%d Time:%d\n", total, (end - begin));

} catch (Exception ex) {

ex.printStackTrace();

conn.rollback();

} finally {

conn.close();

}

}

测试结果:

Count:512000 Time:33000

Count:512000 Time:31344

Count:512000 Time:31407

Count:512000 Time:31281

Count:512000 Time:31891

Count:512000 Time:31219

Count:512000 Time:31844

Count:512000 Time:32125

Count:512000 Time:32047

Count:512000 Time:33141

总结:

平均入库速度每100万条62.36秒

绑定参数法虽然比较快,但是还有没有挖掘的空间?

每500条执行一次executeBatch是不是最合适的?

Java中有没有数组绑定法?

有待进一步考察……

分享到:

2008-08-26 19:08

浏览 2623

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用中的描述,ORACLE入库数据重复的处理步骤如下: 1. 首先,需要将重复的数据提取出来。可以使用SQL查询语句来查找重复记录,并将查询结果保存到一个临时表中。 2. 接下来,需要在数据表中删除所有重复的数据。可以使用SQL的DELETE语句来删除重复记录。 3. 在处理完重复数据后,可以将处理后的数据重新入库。可以使用INSERT语句将数据插入到目标表中。 根据引用和的描述,如果使用ELK及其插件抓取ORACLE数据库中的数据,可能会出现数据重复的问题。这可能是由于logstash的retry逻辑问题导致的。logstash在爬取数据时可能会重复爬取同一条数据多次。这种情况下,可以考虑以下解决办法: 1. 配置logstash的retry逻辑,确保同一条数据只被爬取一次。 2. 检查logstash的配置文件,确保每天自动新建一个索引的规则不会导致同一条数据被分配到不同的索引下。 3. 可以考虑使用唯一标识符来确保数据的唯一性。可以使用ORACLE数据库的内置机制(例如主键、唯一索引)来防止重复数据的插入。 综上所述,处理ORACLE入库数据重复的方法是先将重复数据提取出来并删除,然后重新插入处理后的数据。对于使用ELK及其插件抓取ORACLE数据库的情况,可以配置logstash的retry逻辑和检查索引规则,同时使用唯一标识符来确保数据的唯一性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ORACLE 处理重复数据](https://blog.csdn.net/u012972294/article/details/124699873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [logstash爬数据库总是异常,数据重复](https://blog.csdn.net/weixin_42601608/article/details/116513012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值