gpt4 book ai didi

mysql - 如何首次向 SQL 数据库填充多个表

转载 作者:行者123 更新时间:2023-11-29 06:37:09 31 4
gpt4 key购买 nike

我有一个关于如何首次填充数据库的一般性问题。实际上,我在 R 中处理“原始”数据集(我构建的数据框架是为了快速工作并提供见解),但我现在需要在关系数据库中构建和加载所有内容。

对于数据库设计,一切正常(=> 概念、逻辑和 3NF)。结果是一个相当“复杂”(都是相对的)数据模型,其中有许多连接表和表内的外键。

我的问题是:现在,填充此数据库的最简单方法是什么?

我的方法是从 R 中的“原始”数据帧开始为每个表生成一个 .csv,然后将每个表加载到数据库中。 这是最好的方法还是有更简单的方法?。另一点是,如何在填充时不与 FK 约束作斗争?

非常感谢您的回答。我意识到这是非常“方法论”的问题,但我找不到任何与教程/线程相关的

注释:我使用 R(dplyr 等)和 MySQL

最佳答案

严肃的relational database ,如Postgres例如,将提供填充大型数据库的功能。

批量加载

查找读取外部数据的命令,将其加载到具有匹配字段结构的表中。数据直接从操作系统的文件系统文件移动到表中。这比使用通常的 SQL INSERT 加载单个行要快得多。此类命令不是标准化的,因此您必须在特定的数据库引擎中查找专有命令。

在 Postgres 中,这将是 COPY命令。

暂时禁用 referential-integrity

查找将外键关系规则推迟到加载数据之后执行的命令。

在 Postgres 中,使用 SET CONSTRAINTS … DEFERRED在每个语句期间不检查约束,而是等到事务结束。

或者,如果您的数据库缺少这样的功能,作为批量导入例程的一部分,您可以先删除约束,然后再重新建立它们。但请注意,这可能会影响所有其他数据库连接中的所有其他事务。如果您知道数据库没有其他用户,那么也许这是可行的。

其他问题

有关其他需要考虑的问题,请参阅 Populating a Database在 Postgres 文档中(无论您是否使用 Postgres)。

  • 禁用自动提交
  • 使用COPY(用于批量导入,如上所述)
  • 删除索引
  • 删除外键约束(如上所述)
  • 增加maintenance_work_mem(更改数据库引擎的内存分配)
  • 增加 max_wal_size(更改数据库引擎预写日志的配置)
  • 禁用 WAL 存档和流式复制(考虑将数据库副本移动到复制服务器,而不是让复制移动大量数据)
  • 随后运行 ANALYZE(提醒您的数据库引擎调查数据的新状态,以供其查询规划器使用)

数据库迁移

顺便说一句,您可能会发现数据库迁移工具有助于创建表和列,并且可能有助于加载数据。考虑诸如Flyway之类的工具或 Liquibase .

关于mysql - 如何首次向 SQL 数据库填充多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53333749/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com