目前想到的是用批量的方式,就是分页的那种操作来查,还有什么好的思路么。
推荐工具
› RoboMongo
推荐书目
› 50 Tips and Tricks for MongoDB Developers|
Ehco1996Feb 18, 2019
1
有 index?没有就加,但感觉就算加了也扛不住
全部 dump 进 es? 楼下大牛来出个好主意吧 |
|
lhx2008Feb 18, 2019
2
在 mongo 内部聚合,或者导出用别的软件做聚合,直接查出来不现实,前端也不需要
|
|
rrfengFeb 18, 2019 via Android
3
没看懂查询是什么意思,建议仔细描述。
只按一个字段(时间)顺序查的话性能不会有任何问题。 |
|
CaskiaFeb 18, 2019
4
没有分页?前端直接展示上亿?
如果有分页,时间加 index 没问题啊. |
|
zxxufo008Feb 18, 2019
5
MongoDB 本身的 ObjectId 是能获取时间戳的,按时间查询没什么问题
|
|
wysnylcFeb 18, 2019
6
跟 java 没有什么关系,java 能做的就一个查询分页参数
问题在 mongo |
|
InsideFeb 18, 2019
7
假设一条记录 5k 大小,1 亿条就是 500G,确定内存、带宽真的够?
分页是必选项。 |
|
DebianccFeb 18, 2019
8
全部查询出来不太现实,如果想做 aggregation 可以直接压到 mongo 上,MongoDB MapReduce 了解一下。
|
|
9
@Ehco1996 @Caskia @Debiancc @Inside @lhx2008 @rrfeng @wysnylc @zxxufo008
是这样的,没有前端页面的需求,这个功能可能只用一次,也不需要聚合,时间字段已经有 index 了。 需求是需要把 mongo 表中的历史数据逐一发送到一个指定的服务器上,使用 mina 做的发送这块已经搞定了,问题是数据量太大,读取发送程序和 mongo 都在同一个服务器上。 我目前想的是按照分页的方式批量查询出来然后逐一发走,发完再按照分页的方式继续查,不知道我这样是不是想的太简单了。没发送一条会往 redis 中做一个记录(存一个时间),一旦程序崩了,再次启动时先去 redis 里面找看看有没有内容,如果有,把那个时间拿出来,这时候就要加上查询条件了,把大于这个时间的内容分页查出来,再操作。 |
|
DebianccFeb 18, 2019
10
如果只是数据搬砖,可以找找生态系统里面配套的迁移工具。先迁移过去,再清洗。
如果消费端不可控,建议做 Queue。这个数据量还要逐一发送,不做容错有点难受。 |
|
atonkuFeb 18, 2019
13
删库,跑路
|
|
snoopyxdy1Feb 18, 2019
14
|
|
colozFeb 18, 2019
15
类似需求,正在考虑用个时序数据库配合
|
|
xuanbgFeb 18, 2019
16
全部查出来根本不现实。。。磁盘 IO 太高,直接崩溃,根本都轮不到网络传输数据,前端展示数据。
|
|
luozicFeb 18, 2019 via iPhone
17
一亿条,还按时间,不上时间序列,你准备花多少钱配置啥样的 mDB ? 如果不是硬件堆到极致的情况下,还用垃圾方案,脑子疼不疼。
|
|
0987363Feb 19, 2019 via Android
18
1 亿不算多吧,又有索引,用 iter 依次读,然后发过去,存个时间戳,挂了再从最后一个时间戳开始读
|
|
keenkillerFeb 19, 2019
19
有索引直接读啊,这有啥难的…至于算不算多,Mongo 不是可以分布式么…
|
|
20
|
|
vmskipperFeb 19, 2019
22
没有任何条件 就用主键遍历 利用分治思路 splitVector 命令根据 key 做 range 一个线程一个 range,速度很快的
|
|
waibunleungFeb 19, 2019
23
@Inside 5k 太大了吧?这个假设感觉不是很到位
|