首页 » PHP教程 » PHPmongodboid技巧_开源利器DuckDB实测把MongoDB全量数据导入MySQL

PHPmongodboid技巧_开源利器DuckDB实测把MongoDB全量数据导入MySQL

访客 2024-11-29 0

扫一扫用手机浏览

文章目录 [+]

贺春旸,dbaplus社群金牌专家,凡普金科和爱钱进DBA团队卖力人,《MySQL管理之道:性能调优、高可用与监控》第一&二版、《MySQL运维进阶指南》作者,曾任职于中国移动飞信、安卓机锋网。
五次荣获dbaplus年度MVP,致力于MariaDB、MongoDB等开源技能的研究,紧张卖力数据库性能调优、监控和架构设计。

一、DuckDB 是什么

PHPmongodboid技巧_开源利器DuckDB实测把MongoDB全量数据导入MySQL

2024 年 6 月 3 日,经由六年打磨,开源高性能剖析型数据库 DuckDB 正式发布了 1.0.0 版本。

PHPmongodboid技巧_开源利器DuckDB实测把MongoDB全量数据导入MySQL
(图片来自网络侵删)

DuckDB 是一款功能强大的嵌入式剖析型数据库,常被誉为 SQLite 的升级版。
它不仅具备 SQLite 的轻量级、易用性,还支持更繁芜的 SQL 查询和剖析功能。

在数据迁移场景中,DuckDB 可以充当一个高效的 ETL 工具,帮助我们快速将 MongoDB 中的全量数据导入到 MySQL 数据库中。

二、DuckDB 的上风

大略易用:DuckDB 无需繁琐的安装过程,仅需一个启动文件即可运行。
灵巧适配:支持直接映射 MySQL 数据库,实现本地读写 MySQL 表数据。
数据兼容:支持读取本地 JSON 文件,方便处理各种格式的数据。
高效处理:采取列式存储,善于处理大规模数据集的剖析查询。
本地运行:无需设置端口号,降落了支配和管理的繁芜性。

三、迁移步骤示例

1、导出 MongoDB 数据

利用 mongoexport 工具将 MongoDB 中的目标凑集导出为 JSON 文件。

shell> mongoexport -u admin -p 123456 -h 192.168.137.131:27017 -d test -c students --authenticationDatabase admin -o /mnt/mongo_bak/student.json

student.json文件内容:

shell> jq . /mnt/mongo_bak/students.json{ "_id": { "$oid": "66cfd71e67a1f9c596bdae5e" }, "id": 1, "name": "张伟", "age": 20, "courses": [ { "course_id": "CS101", "course_name": "打算机根本", "credits": 3 }, { "course_id": "MATH202", "course_name": "高档数学", "credits": 4 } ], "address": { "street": "北京市朝阳区幸福路123号", "city": "北京", "state": "北京市", "zip": "100000" }}{ "_id": { "$oid": "66cfd71e67a1f9c596bdae5f" }, "id": 2, "name": "李娜", "age": 22, "courses": [ { "course_id": "BIO301", "course_name": "生物学根本", "credits": 3 } ], "address": { "street": "上海市浦东新区花园路456号", "city": "上海", "state": "上海市", "zip": "200000" }}

2、加载到 DuckDB

shell> 修正duckdb提示符shell> cat prompt.sql.prompt 'duckdb> 'shell> -- 连接到me数控库里,me.duckdb为数据文件 shell> ./duckdb me.duckdb -init prompt.sql

利用 DuckDB 的 SQL 语句将导出的 JSON 文件加载到一个 DuckDB 表中。

duckdb> -- 转换为MySQL输出形式duckdb> .mode tableduckdb> -- 安装扩展MySQL和JSONduckdb> INSTALL json;duckdb> INSTALL mysql;duckdb> create table student as SELECT FROM read_json('/mnt/mongo_bak/students.json', columns = {'id': 'INTEGER', 'name':'VARCHAR', 'age':'INTEGER', 'courses': 'JSON', 'address': 'JSON'});

3、得到 DuckDB 表构造

duckdb> WITH table_columns AS ( SELECT name, type, CASE WHEN "notnull" = 1 THEN 'NOT NULL' ELSE '' END AS not_null FROM pragma_table_info('student'))SELECT 'CREATE TABLE student (' || string_agg(name || ' ' || type || ' ' || not_null, ', ') || ');' AS create_table_sqlFROM table_columns;+------------------------------------------------------------------------------------------------+| create_table_sql |+------------------------------------------------------------------------------------------------+| CREATE TABLE student (id INTEGER , name VARCHAR , age INTEGER , courses JSON , address JSON ); |+------------------------------------------------------------------------------------------------+

4、创建 MySQL 表

在 MySQL 中创建一个与 DuckDB 表构造相同的表。

CREATE TABLE student ( id int, name VARCHAR(255), age int, courses JSON, address JSON);

5、数据迁移

利用 DuckDB 的 SQL 语句将数据从 DuckDB 表中插入到 MySQL 表中。

duckdb> ATTACH 'host=192.168.137.131 user=admin password=123456 port=6666 database=test' AS mysql_test (TYPE mysql_scanner);duckdb> insert into mysql_test.student SELECT FROM me.student;

四、DuckDB 在迁移过程中的浸染

中间缓存:DuckDB 作为中间层,可以将 MongoDB 的数据加载到内存中,加速数据处理。
数据洗濯:在 DuckDB 中,可以对数据进行洗濯、转换和筛选,以知足 MySQL 的导入哀求。
性能优化:DuckDB 的列式存储和高效查询引擎,可以显著提升数据迁移的性能。

五、总结

DuckDB 凭借其易用性、灵巧性、高效性,为 MongoDB 到 MySQL 的数据迁移供应了便捷而强大的办理方案。
通过合理利用 DuckDB,我们可以快速、准确地完成大规模数据的迁移任务。

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0