閱讀1043 返回首頁    go 阿裏雲 go 技術社區[雲棲]


數據導入和導出__最佳實踐_分布式關係型數據庫 DRDS-阿裏雲

小數據量導入

數據量較小(千萬級別),且不需要增量的一次性數據導入,或者以測試兼容性為目的導入一些數據。推薦直接使用Mysql source或Navicat進行單線程遷移,或者手寫代碼多線程batch將數據寫入DRDS。

單線程導入數據,其劣勢是導入的速度會比較慢,無法發揮分布式數據庫非常高的係統並行度優勢,但實際使用相當方便。例如,使用mysql source命令導入數據:https://www.blogjava.net/hh-lux/archive/2007/05/05/115419.html 或使用navicat進行xxx.sql 或xxx.csv的數據導入

大數據導入

DRDS在數據散列均衡的時候是可以充分發揮下層存儲100%的讀寫能力的,您可以不用擔心。如果希望使用自己的數據進行寫入性能驗證,那麼我們建議您使用batch 方式進行寫入(同時多線程讀取效果更佳),如用java,可以使用jdbc api中有batch提交sql的接口,代碼如果要實現高效必須在jdbc url中加入參數rewriteBatchedStatements=true(代碼片段使用druid數據源 https://github.com/alibaba/druid ),允許mysql connector將多條insert語句 合並成multi values格式的一條insert語句提交給mysql server執行,並且需要是PrepareStatement執行sql。具體原理分析可以參考: https://www.cnblogs.com/xhan/p/3958521.html

代碼示例:

  1. //連接設置和創建
  2. ds = new DruidDataSource();
  3. ds.setUrl("jdbc:mysql://" + c.getHost() + ":" + c.getPort() + "/" + c.getSchema());
  4. ds.setConnectionProperties("autoReconnect=true;socketTimeout=600000;rewriteBatchedStatements=true");
  5. ds.setDriverClassName("com.mysql.jdbc.Driver");
  6. ds.setUsername(c.getUser());
  7. ds.setPassword(c.getPassword());
  8. ds.setMaxActive(16);
  9. ds.setMaxWait(5000);
  10. ds.init();
  11. //數據導入代碼
  12. import java.sql.Connection;
  13. import java.sql.PreparedStatement;
  14. import java.sql.SQLException;
  15. public class BatchedInsertDemo {
  16. public static void doBatchedInsert(Connection conn, int batchSize, int insertCount) throws SQLException {
  17. PreparedStatement ps = conn.prepareStatement("insert into Test (name,gmt_created,gmt_modified) values (?,now(),now())");
  18. for (int i = 0; i < insertCount; i++) {
  19. ps.setString(1, i+" ");
  20. ps.addBatch();
  21. if((i+1) % batchSize == 0) {
  22. ps.executeBatch();
  23. }
  24. }
  25. ps.executeBatch();
  26. ps.close();
  27. }
  28. }

DRDS對於數據導入的支持

對於應用正式上線,我們有專用的工具進行數據遷移。這種情況下通常需要準備一台或多台遷移機,具體部署方式根據用戶數據庫的網絡情況分為兩類:

1) 如果用戶數據庫可以從雲內直接訪問,此時推薦使用ECS作為遷移機器。由於ECS到DRDS通過內網傳輸數據,帶寬很高,同時ECS的公網帶寬可以彈性升級,可以使得數據遷移的效率達到最優。為了降低上雲的成本,我們已經部署好了一些專門用於遷移的ECS,一般情況下不需要額外準備。

2) 某些案例中出於安全或其他方麵的考慮,用戶網絡能夠訪問到阿裏雲,而阿裏雲環境中的機器無法訪問用戶網絡。這種場景下需要將遷移程序部署在用戶的機器上進行數據遷移。

數據導出

DRDS支持導出數據(mysqldump命令),也可以從DRDS控製台直接跳到底下數據節點RDS的控製台進行數據庫備份並下載備份文件。具體步驟參見 https://help.aliyun.com/view/13440586.html

最後更新:2016-11-23 17:31:29

  上一篇:go 應用連接池選擇__最佳實踐_分布式關係型數據庫 DRDS-阿裏雲
  下一篇:go SQL優化__最佳實踐_分布式關係型數據庫 DRDS-阿裏雲