V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
noparking188
V2EX  ›  SQL Server

SQL Server 数据库迁移到 PostgreSQL 或者其它云原生 OLAP 库有哪些比较好的方案

  •  
  •   noparking188 · 2023-04-22 23:25:10 +08:00 · 1897 次点击
    这是一个创建于 578 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SQL Server 上

    1. 数千张表、TB 级数据;
    2. 一次性全量迁移;
    3. 字段类型尽可能兼容;

    想请教大家迁移到 PostgreSQL ,有什么比较好的方案推荐的。

    发散一下,分成两个步骤:

    1. 从 SQL Server 转换建表 DDL 为目标数据库格式、导出数据为通用格式( JSON 、Parquet...);
    2. 导入数据到目标数据库上目标表。

    主要想讨论和请教的是从 SQL Server 这类传统数仓迁移到比较新的各种云上数仓有什么好的、成熟一点的方案参考。

    谢谢大家

    第 1 条附言  ·  2023-04-23 10:27:42 +08:00

    这里提问只是单纯想和有这方面经验的老哥、或者感兴趣的老哥简单探讨下可能的方案,脑洞随意,我来实验。

    我在做这个需求时基于自身搜索能力并没有找到什么比较好的开源方案,非常头疼。

    分享下我目前的研究:

    1. 从 SQL Server 导出大批量数据,目前来看 bcp 是最快的,Client 端带宽提到和 SQL Server 对齐;
    2. schema 转换有一个开源项目叫 sqlglot,可以二次开发;
    3. 往目标库 load 数据,用官方提供和推荐的最佳实践就行,比如 PG/Redshift 是 COPY?
    4. 交换的数据格式,对比 TSV、CSV,JSON 是兼容性最好的;

    不知道这类需求多不多,值不值得投入时间搞一个开源方案。

    欢迎大家参与讨论

    17 条回复    2023-04-24 11:28:28 +08:00
    v2wtf
        1
    v2wtf  
       2023-04-22 23:56:02 +08:00
    吐槽一下:你这个上 TB 的数据,tmd 谁能给『真正适用实际情况』的建议?给了你敢用?

    这种量级的数据迁移,起码要一两个专业人士专门到现场沟通详细情况、制订方案,光是数据迁移本身恐怕没有把月搞不定,再加上相关的系统的迁移、改造,恐怕三个月能下来已经是非常乐观的估计了。
    512357301
        2
    512357301  
       2023-04-23 00:24:58 +08:00 via Android
    花钱。
    省心,还能甩锅。
    mooyo
        3
    mooyo  
       2023-04-23 00:26:33 +08:00
    大客户可以开工单给云厂商沟通协助
    ihacku
        4
    ihacku  
       2023-04-23 00:30:13 +08:00 via Android
    deorth
        5
    deorth  
       2023-04-23 00:30:32 +08:00 via Android
    之前一个项目给客户做的数据库迁移,XXTB ,1X0W RMB 。两个专人现场三个月。业务改造是客户自己的事。
    liprais
        6
    liprais  
       2023-04-23 00:33:52 +08:00   ❤️ 1
    给楼主支个招
    你就跟阿里云说你要上云,让他们出方案
    billzhuang
        7
    billzhuang  
       2023-04-23 08:31:54 +08:00 via iPhone
    babelfish +1
    netnr
        8
    netnr  
       2023-04-23 09:21:37 +08:00
    类似的情况,百来张表,几个 G 的数据

    先下载一个工具 https://fishcodelib.com/DBMigration.htm
    用于数据库转换,主要用于表结构转换,表数据转换也支持,但速度一般

    表数据迁移可以用 kettle 工具来做,我自己没怎么用过,但我们的业务有用这个来同步数据

    我一般用自己写的 C# 控制台程序,逐行读取表数据分批表复制写入,实践过几百万的数据量
    (我其实是想实践测试一下,交个朋友!🤡)
    noparking188
        9
    noparking188  
    OP
       2023-04-23 09:37:12 +08:00
    @billzhuang 感谢,这个参加 AWS webinar 听他们介绍过
    noparking188
        10
    noparking188  
    OP
       2023-04-23 09:38:24 +08:00
    @ihacku 感谢,这个听 AWS 的介绍过
    noparking188
        11
    noparking188  
    OP
       2023-04-23 09:40:19 +08:00
    @v2wtf 哈哈,吐槽合理,不过我只是想和大家发散性思维探讨一下可能的方案,随意脑洞,我来实验
    noparking188
        12
    noparking188  
    OP
       2023-04-23 09:43:46 +08:00
    @liprais 哈哈这个可行,不过云厂商的 Solution Architect 没想象的万能,有时候还比较不靠谱
    noparking188
        13
    noparking188  
    OP
       2023-04-23 10:37:51 +08:00
    @netnr #8 感觉这个类似 AWS 的 SCT ,不过我看了只有图形界面,就算百来张表也不好一张张去复制粘贴吧,有 API 接口就好了。
    我目前的实现单表最大 ~5000 万、~60GB ,光从 SQL Server export 数据就三四十分钟了。import 导目标库耗时为 export 的 ~30%。当然光这样看没参考价值,强依赖两边数据库的软硬件配置
    netnr
        14
    netnr  
       2023-04-23 12:08:27 +08:00 via Android
    不是可以全选表
    netnr
        15
    netnr  
       2023-04-23 12:13:30 +08:00 via Android
    另外提个醒 这种单边数据行比较多,可以考虑导入数据后再建索引,导数据开启缓存模式
    noparking188
        16
    noparking188  
    OP
       2023-04-23 13:08:42 +08:00
    @netnr #15 感谢建议,不过换了数据库系统是不是应该重新设计索引,迁移旧库的索引感觉没必要
    v2wtf
        17
    v2wtf  
       2023-04-24 11:28:28 +08:00
    @noparking188 只是测试的话,可以试试 pg_loader 我用来从 mysql 导入到 pg ,还是挺好用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3482 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 11:21 · PVG 19:21 · LAX 03:21 · JFK 06:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.