亿级mongodb数据迁移
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数据迁移的更多相关文章
- mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?
原标题:亿级账户数据迁移,不用数据库工具还能怎么搞? 背景 在阿里巴巴内部"大中台,小前台"的组织和业务体制,使前线业务更加敏捷,赋能业务积极迎接未来挑战和机遇,在阿里大中台能力建 ...
- mongodb数据迁移到hbase
mongodb数据迁移到hbase 导入包 # encoding: utf-8 ''' @author: zcc @license: (C) Copyright 2013-2017, Node Sup ...
- MongoDB 数据迁移和同步
MongoDB 数据迁移和同步 MongoDB的数据同步 复制 mongodb的复制至少需要两个实例.其中一个是主节点master,负责处理客户端请求,其余的都是slave,负责从master上复制数 ...
- [NewLife.XCode]分表分库(百亿级大数据存储)
NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量 ...
- mongodb系列~mongodb数据迁移
一 简介:今天来聊聊mongo的数据迁移二 迁移 1 具体迁移命令 nohup mongodump --port --db dbname --collection tablename --qu ...
- mongodb数据迁移的两种方式
环境说明:bbs数据采集的数据越来越多,目前是50G,每天大概以200W的数据量增长.而当前服务器1.2上面的空间不足,需要把数据迁移到空间足够大的1.3上面去 尝试了2种方式对数据进行迁移,一种是r ...
- MongoDB 数据迁移 备份 导入(自用)
MongoDB bin文件夹下 备份:mongodump -h IP:PORT -d 库名 -c 集合名 -o 存储路径 恢复:mongorestore -h IP:PORT -d 库名 -c 集合名 ...
- MongoDB数据迁移
将集合user从192.168.1.12:27017导入到192.168.1.120:27017 数据的导出:mongoexport 数据的导入:mongoimport 导出集合user的过程: [r ...
- 亿级数据时,内存性能低于IO性能
最近因项目需要,需要生成有0到99999999共1亿的不重复数,于是想着直接将这些数据生成为一个文件就可以了,代码如. private void generate(string savePath) { ...
随机推荐
- 基于steam的游戏销量预测 — PART 3 — 基于BP神经网络的机器学习与预测
语言:c++ 环境:windows 训练内容:根据从steam中爬取的数据经过文本分析制作的向量以及标签 使用相关:无 解释: 就是一个BP神经网络,借鉴参考了一些博客的解释和代码,具体哪些忘了,给出 ...
- 009_Linux驱动之_request_irq()函数
1. request_irq()函数原型 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags ...
- Linux 不同方法查看进程消耗CPU IO 等
1.用top命令指定固定的PID top -p 10997 查询指定进程的PID ps -ef | grep zookeeper jim 10997 1959 0 12月14 pts/2 00:00: ...
- idea中,springboot的热部署
1.开启idea的自动编译(静态) 具体步骤:打开顶部工具栏File | Settings | Build, Execution, Deployment | Compiler 然后勾选 Build p ...
- POJ 3616 Milking Time ——(记忆化搜索)
第一眼看是线段交集问题,感觉不会= =.然后发现n是1000,那好像可以n^2建图再做.一想到这里,突然醒悟,直接记忆化搜索就好了啊..太蠢了.. 代码如下: #include <stdio.h ...
- CF1214C
CF1214C 题意: 给你一个括号序列,问你时候能仅移动相邻的两个元素,使括号序列合法. 解法: 可以先考虑普通括号序列怎么做 这道题只交换相邻的两个元素,所以如果中间左括号和右括号的差值大于2时, ...
- tomcat发布web项目
转:https://www.cnblogs.com/skyblue-li/p/7888951.html Tomcat是一种Web服务器,我们自己做好了一个Web项目,就可以通过Tomcat来发布.服务 ...
- 'builtin_function_or_method' object has no attribute 'translate'
'builtin_function_or_method' object has no attribute 'translate' 首先这个错误的意思是:内建函数或方法对象不能转换成对应的属性. #错误 ...
- Linux设备驱动程序 之 中断下半部
中断处理程序的局限 1. 中断处理程序以异步的方式执行,并且它有可能会打断其他重要代码的执行,因此,为了避免被打段的代码停止时间过长,中断处理程序应该执行的越快越好: 2. 如果当前有一个中断处理程序 ...
- APP界面架构设计
作为PM,信息架构和页面流的设计想必烂熟于心,当确定好产品战略层和范围层即为何种目标用户提供何种服务后,就要着手搭建功能架构,将目标功能通过良好的用户体验传递给用户,目的是高效解决用户痛点,从而实现价 ...