同步寫兩個資料庫--多執行緒
接前文
http://blog.itpub.net/29254281/viewspace-2119080/
兩個資料庫假設在不同的伺服器,不同的例項
如果像前文那樣同步寫兩個庫,
那麼第一個庫的連線和鎖持有時間,都會翻倍.
可以嘗試多執行緒處理
501個Translog,用時29s
前文的處理時間為32s...似乎提高並不多...
這程式其實放生產,自己也沒有什麼把握.
有時候感覺壓力很大.新單位已經2年了.
資料庫還是一知半解.JAVA程式也忘的差不多了.其實原來JAVA也是一知半解.
希望2016年自己還能有一些突破吧.
http://blog.itpub.net/29254281/viewspace-2119080/
兩個資料庫假設在不同的伺服器,不同的例項
- drop database db1;
- drop database db2;
- create database db1;
- use db1;
- create table t(translog int primary key,ts timestamp default current_timestamp);
- create database db2;
- use db2;
- create table t(translog int primary key,ts timestamp default current_timestamp);
如果像前文那樣同步寫兩個庫,
那麼第一個庫的連線和鎖持有時間,都會翻倍.
可以嘗試多執行緒處理
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class Test {
- private static ExecutorService threadpool = Executors.newFixedThreadPool(10);
- public void shutdown() {
- threadpool.shutdown();
- }
- private synchronized static Connection getConnection(String dbName) {
- String URL = "jdbc:mysql://127.0.0.1:3306/" + dbName;
- String USERNAME = "xx";
- String PWD = "xx";
- Connection con = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- con = DriverManager.getConnection(URL, USERNAME, PWD);
- con.setAutoCommit(false);
- } catch (SQLException e) {
- } catch (ClassNotFoundException e) {
- }
- return con;
- }
- public void insertTranslogid(int translogid) {
- Connection db1 = getConnection("db1");
- Connection db2 = getConnection("db2");
- CountDownLatch latch = new CountDownLatch(2);
- Worker worker1 = new Worker(db1, translogid, latch);
- Worker worker2 = new Worker(db2, translogid, latch);
- threadpool.submit(worker1);
- threadpool.submit(worker2);
- try {
- latch.await();
- } catch (InterruptedException e1) {
- e1.printStackTrace();
- }
- try {
- if (worker1.isSuccessed() && worker2.isSuccessed()) {
- db1.commit();
- db2.commit();
- } else {
- db1.rollback();
- db2.rollback();
- }
- db1.close();
- db2.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) throws ClassNotFoundException, SQLException {
- long start=System.currentTimeMillis();
- Test t = new Test();
- for (int i = 0; i <= 500; i++) {
- t.insertTranslogid(i);
- }
- t.shutdown();
- long end=System.currentTimeMillis();
- System.out.println((end-start)/1000);
- }
- }
- class Worker implements Runnable {
- public Worker(Connection con, int translogid, CountDownLatch latch) {
- this.con = con;
- this.translogid = translogid;
- this.latch = latch;
- }
- private CountDownLatch latch;
- private Connection con;
- private int translogid;
- private boolean successed=false;
- public boolean isSuccessed() {
- return successed;
- }
- @Override
- public void run() {
- PreparedStatement pt;
- try {
- pt = con.prepareStatement("insert into t(translog) values(?)");
- pt.setInt(1, translogid);
- pt.execute();
- successed = true;
- } catch (SQLException e) {
- e.printStackTrace();
- successed = false;
- } finally {
- latch.countDown();
- }
- }
- }
501個Translog,用時29s
前文的處理時間為32s...似乎提高並不多...
這程式其實放生產,自己也沒有什麼把握.
有時候感覺壓力很大.新單位已經2年了.
資料庫還是一知半解.JAVA程式也忘的差不多了.其實原來JAVA也是一知半解.
希望2016年自己還能有一些突破吧.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2119274/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 同步寫兩個資料庫資料庫
- 多執行緒和多執行緒同步執行緒
- Core Data:多執行緒大量資料同步執行緒
- 多執行緒同步執行緒
- Java 共享資料讀寫(多執行緒)Java執行緒
- java 多執行緒 –同步Java執行緒
- java 多執行緒 --同步Java執行緒
- Java多執行緒13:讀寫鎖和兩種同步方式的對比Java執行緒
- 在兩個資料庫之間進行資料同步資料庫
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 4、Linux多執行緒,執行緒同步(2)Linux執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- java多執行緒–同步鎖Java執行緒
- 多執行緒 -- 同步器執行緒
- windows多執行緒同步--事件Windows執行緒事件
- 多執行緒同步的原理執行緒
- 非同步VS多執行緒非同步執行緒
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- C#多執行緒開發-執行緒同步 02C#執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- 多執行緒(2)-執行緒同步條件變數執行緒變數
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- 多執行緒下的程式同步(執行緒同步問題總結篇)執行緒
- 【Java】【多執行緒】兩個執行緒間的通訊、wait、notify、notifyAllJava執行緒AI
- 11. shell多執行緒備份資料庫執行緒資料庫
- python使用多執行緒備份資料庫Python執行緒資料庫
- Dart 非同步與多執行緒Dart非同步執行緒
- windows多執行緒同步--互斥量Windows執行緒
- 多執行緒靜態方法同步執行緒
- 多執行緒同步的開發執行緒
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- iOS多執行緒程式設計:執行緒同步總結iOS執行緒程式設計
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- 簡單的執行緒同步問題:兩個執行緒交替執行N次【Synchronized、Lock、ArrayBlockingQueue】執行緒synchronizedBloC
- openharmony 多執行緒的方式有哪些?兩個worker執行緒資料如何通訊、記憶體如何共享、與Java多執行緒有什麼區別?執行緒記憶體Java
- JAVA多執行緒共享資料Java執行緒