Mongodb实现多表join
文章目录
- Mongodb实现多表join
- 1、通过遍历其他表,插入到当前表
- 2、优化方式
- 2.1、mongodb的lookup, 也就是聚合功能
- 2.2、mapreduce 分布式join多表
Mongodb实现多表join
千万数量级的table, 如何实现join?
1、通过遍历其他表,插入到当前表
from pymongo import MongoClientclient = MongoClient("mongodb://192.168.123.64:27017/")
temp = client["gd_raw_data"]["temp"]
prplregistex = client["gd_raw_data"]["prplregistex"]
repairfee = client["gd_raw_data"]["repairfee"]
prplcitemcar = client["gd_raw_data"]["prplcitemcar"]
lossthirdparty_lossmain = client["gd_raw_data"]["lossthirdparty_lossmain"]
lossthirdparty = client["gd_raw_data"]["lossthirdparty"]
lossmain = client["gd_raw_data"]["lossmain"]
citemkind = client["gd_raw_data"]["citemkind"]
check = client["gd_raw_data"]["check"]query = {}
cursor = temp.find(query, no_cursor_timeout=True)
try:i = 0for doc in cursor:registno = doc['registno']print("报案号:{}".format(registno))prplregistex_info = prplregistex.find_one({ "registno": registno},no_cursor_timeout=True)repairfee_info = repairfee.find_one({ "registno": registno},no_cursor_timeout=True)prplcitemcar_info = prplcitemcar.find_one({ "registno": registno},no_cursor_timeout=True)lossthirdparty_lossmain_info = lossthirdparty_lossmain.find_one({ "registno": registno},no_cursor_timeout=True)lossthirdparty_info = lossthirdparty.find_one({ "registno": registno},no_cursor_timeout=True)lossmain_info = lossmain.find_one({ "registno": registno},no_cursor_timeout=True)citemkind_info = citemkind.find_one({ "registno": registno},no_cursor_timeout=True)check_info = check.find_one({ "registno": registno},no_cursor_timeout=True)newvalues = {"$set": {"prplregistex_info": prplregistex_info,"repairfee_info": repairfee_info,"prplcitemcar_info": prplcitemcar_info,"lossthirdparty_lossmain_info": lossthirdparty_lossmain_info,"lossthirdparty_info": lossthirdparty_info,"lossmain_info": lossmain_info,"citemkind_info": citemkind_info,"check_info": check_info}}temp.update_one({ "registno": registno}, newvalues)finally:client.close()
发现我的PC(i7 6代)实现1700万多表join需要125个小时,也就是5天5夜,中途服务器容易挂死。
2、优化方式
要么多线程,要么分布式
2.1、mongodb的lookup, 也就是聚合功能
操作之前请务必为关联的字段创建索引
db.getCollection("prplcmain").aggregate([{"$lookup": {"from": "lida","localField": "registno","foreignField": "registno","as": "carinfo"}},{"$lookup": {"from": "prpldriver","localField": "registno","foreignField": "registno","as": "prpldriver"}},{"$lookup": {"from": "prplinjured","localField": "registno","foreignField": "registno","as": "prplinjured"}},{"$lookup": {"from": "prplinsured","localField": "registno","foreignField": "registno","as": "prplinsured"}},{"$lookup": {"from": "regist","localField": "registno","foreignField": "registno","as": "regist"}},{"$out" : "total"}],{"allowDiskUse" : true}
);
这个相同配置下2个小时内可以搞定
2.2、mapreduce 分布式join多表
这个还没研究透彻
https://stackoverflow.com/questions/38882184/join-two-collections-with-mapreduce-in-mongodb
Mongodb实现多表join相关推荐
- 阿里规范不建议多表join,可这SQL要怎么写啊?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 前言 我们先来看一下阿里开发手册的描述 手册上写着[强制],但是肥 ...
- 阿里不让多表join?我偏要!
作者:谢斌 http://blog.itpub.net/30393770/viewspace-2650450/ 提出问题和环境准备 <阿里巴巴JAVA开发手册>里面写超过三张表禁止join ...
- 大数据开发实战:Hive优化实战2-大表join小表优化
4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首 ...
- mysql 多表 三表 删除_mysql 多表join查询索引优化
数据准备 CREATE TABLE IF NOT EXISTS `class` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `card` int( ...
- 阿里不让 MySQL 多表 Join ?我偏要!
一. 问题提出:<阿里巴巴JAVA开发手册>里面写超过三张表禁止join,这是为什么? 二.问题分析:对这个结论,你是否有怀疑呢?也不知道是哪位先哲说的不要人云亦云,今天我设计sql,来验 ...
- sql join on 多表连接_阿里规范不建议多表Join,可这SQL要怎么写啊?
前言 我们先来看一下阿里开发手册的描述: 手册上写着[强制],但是我相信很多同学项目里面的代码都不满足这个要求.但是关键问题是:不用join,这SQL究竟要怎么写啊! 高性能MySQL 高性能MySQ ...
- MySQL小表join大表的正确使用姿势(straight_join 关键字的使用)
网上有种说法是:由于一般是采用小表join大表的方式(可以提高效率),所以有人说将小表放在左边,让它先执行,记住,这种说法是错误的!!!有例为证: 我们看上例: film inner join fil ...
- Flink异步io应用场景之流表join维表
简介 维度表,作为数据仓库里面的概念,是维度属性的集合,比如时间维.地点维:可以是一个mysql或者cassandra,redis等存储,甚至是自己定义的一些api. 流表是kafka等流式数据. 根 ...
- Flink 实时计算 - 维表 Join 解读
Flink 实时计算 - 维表 Join 解读 前言 Flink 1.9 版本可以说是一个具有里程碑意义的版本,其内部合入了很多 Blink Table/SQL 方面的功能,同时也开始增强 Flink ...
最新文章
- 用Transformer定义所有ML模型,特斯拉AI总监Karpathy发推感叹AI融合趋势
- 动态添加的面板不生效
- 网站首页head区代码规范
- 使用js技术使字体闪烁
- 为什么你总办不到大额信用卡?
- Unix/Linux/BSD 它们之间的关系以及各自派系的介绍
- 统计文章中字母出现频率
- php无限次执行函数,php-PHP一个方法根据传递值怎么执行多次?
- 现在程序员的工资是不是被高估了?不存在的!
- ShowSlow+Yslow环境搭建
- (转载)mysql书籍
- ReactJS基础(续)
- DSkin的TabControl在设计视图报错
- Windows10快速切换后台程序的快捷键!
- 吉安梵媛:人间最美是——原谅!
- Intraweb之EasyUI篇
- 高德开放平台地图Flutter插件的使用
- FastReport VCL 6.7.6 For Delphi10.4.2 安装图解教程
- EXCEL密码破解/破解工作表保护密码(详细图文教程)
- 2022年 微前端技术调研- 图文并茂
热门文章
- krsort函数怎么用php,krsort函数怎么用
- linux inotifywait脚本,使用inotify/fswatch构建自动监控脚本
- 虚拟磁盘类型_一起来了解一下Window10系统中虚拟硬盘的相关操作
- android学习资料_5G到来未来五年,纯应用的安卓开发者如何学习通过音视频破局?...
- nginx php返回500错误,nginx环境thinkphp,500错误
- 并发测试mysql_实践100个线程:一次MySQL数据并发问题
- python中向量长度_python中向量指的是什么意思
- python 不执行函数_解决python调用自己文件函数/执行函数找不到包问题
- 输入一个数判断是否对称java_判断对称矩阵 - osc_4mawo3g6的个人空间 - OSCHINA - 中文开源技术交流社区...
- 多选框位置调整_URPC 2019 水下目标检测竞赛冠军方案:多图像融合增强