阅读1043 返回首页    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-阿里云