Как впервые заполнить базу данных SQL несколькими таблицами - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть общий вопрос о способе заполнения базы данных в первый раз. На самом деле, я работаю над «необработанными» наборами данных в R (кадры данных, которые я построил, чтобы работать и быстро понимать), но теперь мне нужно структурировать и загрузить все в реляционную базу данных.

С дизайном БД все в порядке (=> Концептуальное, логическое и 3NF). В результате получается довольно «сложная» (все относительно) модель данных со множеством соединительных таблиц и внешних ключей внутри таблиц.

Мой вопрос: Теперь, как мне проще всего заполнить эту БД?

Мой подход заключается в создании .csv для каждой таблицы, начиная с моих «необработанных» фреймов данных в R, а затем загружать их в таблицу для каждой таблицы в БД. Это хороший способ сделать это или у вас есть более простой способ? . Другой вопрос, как не бороться с ограничениями FK при заполнении?

Большое спасибо за ответы. Я понимаю, что это очень "методологические" вопросы, но я не могу найти учебник / тему, связанную

Примечания: я работаю с R (dplyr и т. Д.) И MySQL

1 Ответ

0 голосов
/ 18 ноября 2018

Серьезная реляционная база данных , такая как, например, Postgres , предложит функции для заполнения большой базы данных.

Массовая загрузка

Ищите команды, которые читают внешние данные, которые будут загружены в таблицу с соответствующей структурой поля. Данные перемещаются непосредственно из файла файловой системы ОС прямо в таблицу. Это значительно быстрее, чем загрузка отдельных строк обычным SQL INSERT. Такие команды не стандартизированы, поэтому вы должны искать собственные команды в вашем конкретном ядре базы данных.

В Postgres это будет команда COPY.

Временное отключение referential-целостности

Ищите команды, которые откладывают применение правил отношения внешнего ключа до момента загрузки данных.

В Postgres используйте SET CONSTRAINTS … DEFERRED, чтобы не проверять ограничения во время каждого оператора, и вместо этого дождитесь окончания транзакции.

В качестве альтернативы, если в вашей базе данных отсутствует такая функция, как часть процедуры массового импорта, вы можете удалить свои ограничения до, а затем восстановить их после. Но будьте осторожны, это может повлиять на все другие транзакции во всех других подключениях к базе данных. Если вы знаете, что в базе данных нет других пользователей, возможно, это работоспособно.

Другие вопросы

Чтобы узнать о других проблемах, см. Заполнение базы данных в документации Postgres (независимо от того, используете вы Postgres или нет).

  • Отключить автокоммит
  • Используйте COPY (для массового импорта, упомянутого выше)
  • Удалить индексы
  • Удалить ограничения внешнего ключа (упомянутые выше)
  • Увеличение maintenance_work_mem (изменение выделения памяти вашего механизма базы данных)
  • Увеличение max_wal_size (изменение конфигурации журнала опережающей записи вашего ядра СУБД)
  • Отключить архивную и потоковую репликацию WAL (рассмотрите возможность перемещения копии вашей базы данных на сервер (ы) репликатора, а не для репликации перемещать массовые данные)
  • Запустить АНАЛИЗ после (напомните вашему ядру базы данных, чтобы он изучал новое состояние данных для использования его планировщиком запросов)

Миграция базы данных

Кстати, вы, вероятно, найдете инструмент переноса базы данных, полезный для создания таблиц и столбцов и, возможно, для загрузки данных. Рассмотрим такие инструменты, как Flyway или Liquibase .

...