الطريقة الأولى:
كود جافا
انسخ رمز الكود كما يلي:
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt=conn
.prepareStatement("أدخل في قيم اختبار التحميل (المعرف، البيانات) (؟، ?)");
لـ (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
}
MyISAM: 246.6 ثانية، InnoDB: 360.2 ثانية
الطريقة الثانية: استخدام المعاملات دون الالتزام التلقائي
كود جافا
انسخ رمز الكود كما يلي:
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt=conn
.prepareStatement("أدخل في قيم اختبار التحميل (المعرف، البيانات) (؟، ?)");
لـ (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
إذا (أنا % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 31.5 ثانية
الطريقة الثالثة: تنفيذ الدفعة
كود جافا
انسخ رمز الكود كما يلي:
conn = DriverManager.getConnection(JDBC_URL
+ "?rewriteBatchedStatements=true"، JDBC_USER، JDBC_PASS)؛
conn.setAutoCommit(false);
pstmt=conn
.prepareStatement("أدخل في قيم اختبار التحميل (المعرف، البيانات) (؟، ?)");
لـ (int i = 1; i <= COUNT; i += BATCH_SIZE) {
pstmt.clearBatch();
لـ (int j = 0; j < BATCH_SIZE; j++) {
pstmt.setInt(1, i + j);
pstmt.setString(2, DATA);
pstmt.addBatch();
}
pstmt.executeBatch();
إذا ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 5.2 ثانية
يجب استخدام ما سبق
1) إعادة كتابة BatchedStatements = صحيح
2) useServerPrepStmts=true
الطريقة الرابعة: التحميل أولاً ثم الالتزام
كود جافا
انسخ رمز الكود كما يلي:
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("تحميل البيانات المحلية إلى الملف '' "
+ "في حقول اختبار التحميل التي تم إنهاؤها بواسطة '،'")؛
StringBuilder sb = new StringBuilder();
لـ (int i = 1; i <= COUNT; i++) {
sb.append(i + ""،" + DATA + "/n");
إذا (أنا % COMMIT_SIZE == 0) {
InputStream هو = جديد ByteArrayInputStream(sb.toString())
.getBytes());
((com.mysql.jdbc.Statement) pstmt)
.setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();
sb.setLength(0);
}
}
InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();