1. 预先准备有效数据单号池,通过单号拉取数据处理

单号表默认为1

01 使用findAndModify 更新单号表状态为 2 读取单号 循环读取100 条

02 通过运单号批量查询 Aladin_WayBillStatus 表 获取数据

03 拼接 新增 SQL语句

04 批量提交给 Hbase

05 批量更新 单号表 状态 为 3

方式优点

简单粗暴,开发简单 不超过200行代码,应为findAndModify 的原子性可以部署N个节点。

方式缺点

  执行效率不高,并且提升优化空间几乎没有,使用多线程获取单号反而会更加耗时。

  执行效率得看获取数据的表的承受能力。

  对现有数据库照成压力

2.预支时间段表,通过时间段刷数据。

01 使用findAndModify  随机获取一个时段

02 通过时间段拉取一批数据

03 拼接 新增 SQL语句

04 批量提交给 Hbase

05 批量更新 时间段表 状态 为 3

方式优点

效率会比方式01 提高不少。

由于findAndModify   可以多节点部署。

方式缺点

  每次时间段获取的数据量都是不可控的,业务高峰期时间段数据量可能非常大,业务低峰期数据量非常小,时间段生成规则会非常麻烦

对现有数据库照成压力

3.通过mongodb查询游标扫描数据。

find查询默认是从最旧数据开始。

_id 可以使用 $gt 查询 _id是有序的。

    public void test_2(ObjectId o) {
DBCursor s;
if (o == null) {
s = mt.getCollection("orderid").find();
} else {
DBObject lisi = new BasicDBObject();
lisi.put("_id", new BasicDBObject("$gt", o));
s = mt.getCollection("orderid").find(lisi);
}
try {
while (s.hasNext()) {
DBObject item = s.next();
o = (ObjectId) item.get("_id");
String me = ((BasicDBObject) item).toJson();
mq.send(new Message("mgtomq", me.getBytes(RemotingHelper.DEFAULT_CHARSET)));
System.out.println(o);
}
} catch (Exception e) {
test_2(o);
}
}

    方式优点:

      不会对数据库照成太大压力。

      读取的数据也是从老到新的数据。

    方式缺点:

      无法部署多个节点,获取数据和处理数据一起处理效率不高。

      解决方式: 通过消息中间件解耦,读取数据,生产消息,处理数据设置每次100条消费消息。

    这种读取数据方式也是 datex 使用的,处理方式不通,但是想法差不多。

如果不需要对数据进行处理,可以直接使用 datex

亿级mongodb数据迁移的更多相关文章

  1. mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?

    原标题:亿级账户数据迁移,不用数据库工具还能怎么搞? 背景 在阿里巴巴内部"大中台,小前台"的组织和业务体制,使前线业务更加敏捷,赋能业务积极迎接未来挑战和机遇,在阿里大中台能力建 ...

  2. mongodb数据迁移到hbase

    mongodb数据迁移到hbase 导入包 # encoding: utf-8 ''' @author: zcc @license: (C) Copyright 2013-2017, Node Sup ...

  3. MongoDB 数据迁移和同步

    MongoDB 数据迁移和同步 MongoDB的数据同步 复制 mongodb的复制至少需要两个实例.其中一个是主节点master,负责处理客户端请求,其余的都是slave,负责从master上复制数 ...

  4. [NewLife.XCode]分表分库(百亿级大数据存储)

    NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量 ...

  5. mongodb系列~mongodb数据迁移

    一 简介:今天来聊聊mongo的数据迁移二 迁移   1 具体迁移命令   nohup mongodump --port --db dbname --collection tablename --qu ...

  6. mongodb数据迁移的两种方式

    环境说明:bbs数据采集的数据越来越多,目前是50G,每天大概以200W的数据量增长.而当前服务器1.2上面的空间不足,需要把数据迁移到空间足够大的1.3上面去 尝试了2种方式对数据进行迁移,一种是r ...

  7. MongoDB 数据迁移 备份 导入(自用)

    MongoDB bin文件夹下 备份:mongodump -h IP:PORT -d 库名 -c 集合名 -o 存储路径 恢复:mongorestore -h IP:PORT -d 库名 -c 集合名 ...

  8. MongoDB数据迁移

    将集合user从192.168.1.12:27017导入到192.168.1.120:27017 数据的导出:mongoexport 数据的导入:mongoimport 导出集合user的过程: [r ...

  9. 亿级数据时,内存性能低于IO性能

    最近因项目需要,需要生成有0到99999999共1亿的不重复数,于是想着直接将这些数据生成为一个文件就可以了,代码如. private void generate(string savePath) { ...

随机推荐

  1. vs调试 iis发布之后的项目

    方法一 启动vs  访问iis地址 即可调试 方法二 点击调试, 选择附加到进程 选择所有用户进程,  选择w3wp.exe  ,附加 , 即可调试

  2. C# 判断一个string型的时间格式是否正确

    在项目开发过程中,由于各种坑爹的需求,我们可能需要用户自己手动输入时间,不过这种功能一般都出现在自己家的后台里面,咳咳,言归正传.既然如此,那么这个时候我们就需要对用户手动输入的时间格式进行验证,方法 ...

  3. Java进阶知识18 Spring对象依赖关系的几种写法

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  4. Bzoj 3942: [Usaco2015 Feb]Censoring(kmp)

    3942: [Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hooveske ...

  5. php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法

    使用压缩包函数必须要安装zip扩展,否则会报错 $ apt install php-zip

  6. Maxim-可自定义的Monkey测试工具(Android)

    Maxim 基于monkey做的二次开发,相比原始monkey,新增如下功能 多种随机测试模式:dfs(深度遍历) mix模式(monkey随机测试+控件识别) troy模式(按照控件选择器进行遍历) ...

  7. gym224647B

    gym224647B 题意: 在二维平面中·选出一个面积最小的三角形,输出这个三角形面积的两倍. 解法: 首先,最优解一定在相邻最近的三个点中产生. 然后我们就可以用向量求三角形的面积. CODE: ...

  8. 攻防世界RE1 writeup

    解题过程 将题目给出的exe文件拖入ida中,查看main函数. 分析函数的逻辑,发现用户需要输出一个字符串,存储到变量v9中.如果v9的值与v5的值相等则会打印unk_413e90中的值,否则打印a ...

  9. zookeeper系列 (第三章 :zookeeper 的使用)

    接上一章,在启动客户端之后,开始通过命令操作zookeeper 服务. 一:zookeeper 的基础命令 1.通过zkCli.sh 命令与主机建立一个会话 2.开始在会话中执行命令:写入Znode. ...

  10. ubuntu mysql 的安装、配置、简单使用,navicat 连接

    MySQL 的安装 1. 先更新 apt 安装中心: apt update 里面会有默认最新的mysql 的包. 2.安装msyql : sudo apt-get install mysql-serv ...