当前位置: 首页 > news >正文

使用kettle做的数据同步案例

1 mongo同步数据到mysql中
我想把51万8400的计算出来的八字信息,从mongo同步到mysql,看看在mysql中运行会怎么样。
选择mongodb input,这个是在Big Data中。
1
填写数据库和表
1
获取到mongodb的字段,获取到mongo的字段,如果某个字段是json结构,则需要自己处理一下,因为mysql中也可以使用json类型。
1

添加【表输出】,然后按住shift,将mongoDb input表输出建立一条线
1

修正mongodb与mysql表之间的关系
在这里插入图片描述
运行后,可以看到执行情况,51万数据同步花了8分钟。
1
同样的数据,在mongo中存储占用了1.85GB
1
而mysql居然使用了14.4GB。存储空间是mongo的7.78倍,查询速度比mongo慢168倍。
1
在没有创建索引情况下,mysql查询需要1m45s,mongodb需要624ms。mysql如果查询没有索引,几乎无法忍受。
2 mongo同步数据到es中
使用kettle同步mongo到es中去,采用的是\elasticsearch-bulk-insert-plugin,肯定有兼容性问题1
于是干脆用python写一个同步

from pymongo import MongoClient
from elasticsearch7 import Elasticsearch, helpers# MongoDB连接配置
MONGO_URI = "mongodb://root:123456@127.0.0.1:27017/fay"
MONGO_DB = "fay"
MONGO_COLLECTION = "zp_bazi_info"# Elasticsearch连接配置
ELASTICSEARCH_HOSTS = [{"host": "localhost", "port": 9200}]
ELASTICSEARCH_INDEX = "zp_bazi_v1"# 批量提交的大小
BATCH_SIZE = 1000# 连接MongoDB
mongo_client = MongoClient(MONGO_URI)
mongo_db = mongo_client[MONGO_DB]
mongo_collection = mongo_db[MONGO_COLLECTION]# 连接Elasticsearch
es_auth = ('elastic', '123456')
es_client = Elasticsearch(hosts=ELASTICSEARCH_HOSTS, http_auth=es_auth)def sync_data():cursor = mongo_collection.find()actions = []for document in cursor:es_document = {k: v for k, v in document.items() if k != '_id'}action = {'_index': ELASTICSEARCH_INDEX,"_id": str(document["_id"]),'_source': es_document}actions.append(action)print('拼接action')if len(actions) >= BATCH_SIZE:helpers.bulk(es_client, actions)actions = []  # 清空列表,为下一批数据做准备print('批量提交')if actions:  # 提交剩余的数据helpers.bulk(es_client, actions)# 执行同步
sync_data()

es的查询只需要40ms左右,比mongo的查询块15倍左右,存储空间为2.4GB,比mongodb略高。
1

相关文章:

  • C/C++ string模拟实现
  • MYSQL execute command denied to user ‘‘@‘%‘ for routine
  • 腾讯《地下城与勇士:起源》手游在部分安卓平台停止更新
  • 微信小程序-上拉加载和下拉刷新
  • C类IP介绍
  • 【Java数据结构】优先级队列详解(二)
  • centos环境上:k8s 简单安装教程
  • 《算法设计与分析》第五六章:回溯法与分支限界法
  • FreeRTOS学习笔记-基于stm32(11)任务通知及相关API函数简介
  • 12306 火车票价格解析 (PHP 解析)
  • 洛谷 P1008 [NOIP1998 普及组] 三连击
  • 被拷打已老实!面试官问我 #{} 和 ${} 的区别是什么?
  • 算法金 | 再见!!!梯度下降(多图)
  • 力扣469A
  • C++ 50 之 继承中的对象模型
  • 《剑指offer》分解让复杂问题更简单
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript服务器推送技术之 WebSocket
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Laravel 中的一个后期静态绑定
  • PHP CLI应用的调试原理
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 代理模式
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端性能优化——回流与重绘
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 听说你叫Java(二)–Servlet请求
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 栈实现走出迷宫(C++)
  • nb
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Java数据解析之JSON
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • #git 撤消对文件的更改
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (13)DroneCAN 适配器节点(一)
  • (152)时序收敛--->(02)时序收敛二
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (pytorch进阶之路)扩散概率模型
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二十三)Flask之高频面试点
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)基于IDEA的JAVA基础12
  • (转)Sql Server 保留几位小数的两种做法
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .apk 成为历史!
  • .gitignore文件忽略的内容不生效问题解决
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET学习全景图