public static void insert() {
// 开时时间
Long begin = new Date().getTime()
// sql前缀
String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES "
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer()
// 设置事务为非自动提交
conn.setAutoCommit(false)
// Statement st = conn.createStatement()
// 比起st,pst会更好些
PreparedStatement pst = conn.prepareStatement("")
// 外层循环,总提交事务次数
for (int i = 1 i <= 100 i++) {
// 第次提交步长
for (int j = 1 j <= 10000 j++) {
// 构建sql后缀
suffix.append("(" + j * i + ", SYSDATE(), " + i * j
* Math.random() + "),")
}
// 构建完整sql
String sql = prefix + suffix.substring(0, suffix.length() - 1)
// 添加执行sql
pst.addBatch(sql)
// 执行 *** 作
pst.executeBatch()
// 提交事务
conn.commit()
// 清空上一次添加的数据
suffix = new StringBuffer()
}
// 头等连接
pst.close()
conn.close()
} catch (SQLException e) {
e.printStackTrace()
}
// 结束时间
Long end = new Date().getTime()
// 耗时
System.out.println("cast : " + (end - begin) / 1000 + " ms")
}
如果是实时的数据,自己写程序总数最方便的。常见解决方案:所有保存任务扔到一个队列,由后台的线程池执行队列中的保存任务。如果会java或者C#这种高级语言,啥都好办,队列可以放在内存中,如果只会shell或者php,可以用文件作为队列。如果不会写程序,可以考虑在内存盘中创建一个数据库,将实时数据写到这里,作为缓存,然后通过类似mysql主从数据库这种结构将数据同步到硬盘上,不过这种方案设置起来非常麻烦。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)