Java代码:

  1. package com.zifeiy.snowflake.handle.etl.mongodb;
  2. import java.sql.Connection;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import org.bson.Document;
  8. import com.mongodb.MongoClient;
  9. import com.mongodb.client.FindIterable;
  10. import com.mongodb.client.MongoCollection;
  11. import com.mongodb.client.MongoCursor;
  12. import com.mongodb.client.MongoDatabase;
  13. import com.zifeiy.snowflake.handle.etl.dbconnection.DatabaseConnectionFactory;
  14. /*
  15. * 这个类用于将MySQL中的一张表的数据原模原样地传输到MongoDB中
  16. */
  17. public class MySQLtoMongoDBDataTransfer {
  18. public boolean transfer(String databaseName, String tableName) {
  19. try {
  20. // mysql connection
  21. Connection connection = DatabaseConnectionFactory.createConnection(databaseName);
  22. Statement statement = connection.createStatement();
  23. ResultSet resultSet = statement.executeQuery("select * from " + tableName);
  24. // mongo connect
  25. MongoClient mongoClient = new MongoClient();
  26. MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
  27. MongoCollection<Document> collection = mongoDatabase.getCollection(tableName);
  28. // 首先清空collection
  29. FindIterable<Document> deleteDocuments = collection.find();
  30. MongoCursor<Document> deleteIterator = deleteDocuments.iterator();
  31. while (deleteIterator.hasNext()) {
  32. collection.deleteOne(deleteIterator.next());
  33. }
  34. // begin transfer
  35. int columnCount = -1, count = 0;
  36. List<Document> documents = new ArrayList<Document>();
  37. while (resultSet.next()) {
  38. if (columnCount == -1) {
  39. columnCount = resultSet.getMetaData().getColumnCount();
  40. }
  41. Document document = new Document();
  42. for (int i = 1; i <= columnCount; i ++) {
  43. String columnName = resultSet.getMetaData().getColumnName(i);
  44. Object value = resultSet.getObject(i);
  45. document.append(columnName, value);
  46. }
  47. documents.add(document);
  48. count ++;
  49. if (count % 1000 == 0) { // 每1000条数据执行一次插入
  50. collection.insertMany(documents);
  51. documents = new ArrayList<Document>();
  52. System.out.println("transfer " + count + " lines from mysql to mongodb ...");
  53. }
  54. }
  55. System.out.println("total transfer " + count + " lines!");
  56. DatabaseConnectionFactory.closeConnection(connection);
  57. return true;
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. return false;
  61. }
  62. }
  63. // main for test
  64. public static void main(String[] args) {
  65. new MySQLtoMongoDBDataTransfer().transfer("naturaldb", "NAT_IMBS_T_SIGN");
  66. }
  67. }

其中:

  • databaseName对应MySQL数据库的database,对应MongoDB的database;

    tableName`对应MySQL数据库的表,对应MongoDB的collection。

将MySQL一张表的数据迁移到MongoDB数据库的Java代码示例的更多相关文章

  1. mysql 一张表的数据插入另一张表的sql语句

    1. 表结构完全一样 insert into 表1 select * from 表2 2. 表结构不一样(这种情况下得指定列名) insert into 表(列名1,列名2,列名3) select 列 ...

  2. mysql 两张表的数据设置主外健关联删除

    image_group 主表 image 副表 alter table image add constraint fk_group_idforeign key (group_id)references ...

  3. 用navicat把MYSQL一张表的数据批追加到另外一张表

    1. 表结构完全一样 insert into 表1 select * from 表22. 表结构不一样(这种情况下得指定列名) insert into 表1 (列名1,列名2,列名3) select ...

  4. mysql一张表到底能存多少数据?

    前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...

  5. 通过mapreduce把mysql的一张表的数据导到另外一张表中

    怎么安装hadoop集群我在这里就不多说了,我这里安装的是三节点的集群 先在主节点安装mysql 启动mysql 登录mysql 创建数据库,创建表格,先把数据加载到表格 t ,表格t2是空的 mys ...

  6. 【mybatis】mysql级联更新两个表或多张表的数据

    例如 info表和relation表有关联,现在要在一个sql语句中同时级联更新两张表的数据 update security_code_info info LEFT JOIN security_cod ...

  7. 关于跨DB增量(增、改)同步两张表的数据小技巧

    有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...

  8. 一条sql解决.一张表的数据复制到另外一张表

    如何把一个表的数组复制到一张表?也许很多人会把这个表查出来的数据再插入到另外一张表里面,这样很麻烦又要写代码逻辑去处理,其实一条sql语句就可以把一张表的数据复制到另外一张表,或者一张表的某一条数据复 ...

  9. ADO.NET事务处理,初始回调函数,多张表的数据在同一个DataGridView中展示

    执行ADO.NET事务包含四个步骤,接下来以Transaction对象为例介绍. (1)调用SQLConnection对象的BeginTransaction()方法,创建一个SQLTransactio ...

随机推荐

  1. Requset作用域

    案例:当登陆密码或账号不正确时 提示 使用Requset对象中的作用域存储数据 语法:req.setAttribute(key, value);//键值对存在 当密码不存在时,设置作用域 else { ...

  2. C++语言第一课的学习

    // HelloApp.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include ...

  3. Problem 2 线段树

    $des$ 一个无限长的 01 序列,初始全为 0,每次选择一个区间 [l,r] 进行操作,有三种操作:1. l r 将 [l,r] 中所有元素变成 1.2. l r 将 [l,r] 中所有元素变成 ...

  4. 交互设计算法基础(2) - Selection Sort

    int[] selection_sort(int[] arr) { int i, j, min, temp, len=arr.length; for (i=0; i<len-1; i++) { ...

  5. 机器学习实战(1)- KNN

    KNN:k近邻算法-在训练样本中找到与待测样本距离相近的N个样本,并用这N个样本中所属概率最大的类别作为待测样本的类别. 算法步骤: 1.对训练中的样本数据的不同属性进行归一化处理. 2.计算待测样本 ...

  6. Pyspark 最近使用的一些有趣姿势的梳理

    之前对 SQL 还是不是非常熟悉的,但是现在或多或少还是会写一些计算任务.比如最近在推送将所有天级的耗时任务都从传统关系型数据库迁移至 Spark 集群当中进行计算,中间遇到一些有趣的小问题在这里记录 ...

  7. .netFramework 升级NetCore 问题汇总及解决方案

    升级版本: NetCore sdk 2.2.108 .AspNetCore 2.2.0.EFCore 2.2.6 所有程序引用均从NuGet上下载,并支持NetCore 问题: 问题1:No coer ...

  8. Web Worker 使用教程【转】

    原文:http://www.ruanyifeng.com/blog/2018/07/web-worker.html 一.概述 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个 ...

  9. springIoC注解

    一.通过注解注入Bean @Component:组件(spring扫描包下有该注解的类) @ComponentScan(包名):组件扫描(spring扫描该包名下的类) @Configuration: ...

  10. Mosquitto配置----日志设置

    https://blog.csdn.net/u012377333/article/details/71101725 # ======================================== ...