Эффективный импорт данных БД PostgreSQL

Я только что разработал базу данных Pg, и мне нужно выбрать способ заполнения моей БД данными, данные состоят из файлов txt и csv, но, как правило, могут быть файлами любого типа, содержащими символы с разделителями, я программирую на java, чтобы данные должны иметь одинаковую структуру (есть много разных файлов, и мне нужно найти, что представляет каждый столбец файла, чтобы я мог связать его со столбцом моей БД). Я подумал о двух способах:

  • Преобразуйте файлы в файл одного типа (JSON), а затем заставьте БД регулярно проверять файл JSON и импортировать его содержимое.

  • Прямое подключение к базе данных через JDBC отправляет строки в БД (мне все еще нужно создать файл резервной копии, содержащий то, что было вставлено в БД, поэтому в обоих случаях создается и записывается файл).

Что бы вы выбрали с точки зрения эффективности времени? У меня есть соблазн использовать первый, так как было бы проще обрабатывать файл json в БД. Если у вас есть другие предложения, которые также приветствуются!


person Sami Ouassaidi    schedule 28.04.2016    source источник
comment
Что вы подразумеваете под обработкой файла json в БД? Собираетесь ли вы хранить чистые json-документы в базе данных? Хотя поле JSONB postgresql довольно крутое, это не идеальный способ использования postgresql. решение nosql было бы лучше.   -  person e4c5    schedule 28.04.2016
comment
Нет, я имел в виду импорт данных из json, который я знаю о JSONB, но в моем случае это было бы не очень полезно.   -  person Sami Ouassaidi    schedule 28.04.2016


Ответы (1)


JSON или CSV

Если у вас есть возможность конвертировать ваши данные в формат CSV или JSON, вам следует выбрать CSV. Это потому, что вы сможете использовать КОПИРОВАТЬ ИЗ в Массовая загрузка больших объемов данных одновременно в postgresql.

CSV поддерживается COPY, а JSON — нет.

Прямая вставка значений.

Это подход, который следует использовать, если вам нужно вставить только несколько (или, может быть, даже несколько тысяч) записей, но он не подходит для большого количества записей, потому что это будет медленно.

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

person e4c5    schedule 28.04.2016
comment
Иногда данные могут быть довольно большими, поэтому первый предложенный подход лучше. Но так ли плохо использовать JSON с COPY FROM? Метод, указанный здесь, занимает немного больше времени, чем использование CSV, но это все еще безопасно, верно? нам просто нужно убедиться, что каждая строка в файле json будет представлять строку в БД (мы в основном импортируем файл json во временную таблицу, затем извлекаем нужные значения и вставляем их в соответствующий столбец) - person Sami Ouassaidi; 29.04.2016
comment
Да, в этом конкретном примере вся запись загружается как один столбец — поле JSON (теперь оно устарело из-за полей JSONB). Это не относительно. Если вы хотите хранить свои данные таким образом, это вполне возможно и безопасно, но не оптимально. Вы не используете какие-либо функции СУБД - person e4c5; 29.04.2016
comment
Таким образом, нет другого способа получить данные json, не проходя через поле jsonb или не читая весь символ данных json после символа? - person Sami Ouassaidi; 29.04.2016
comment
Ну, JSONB на самом деле не является обязательным, вы можете хранить данные в текстовых полях или полях varchar, если хотите. Разница заключается в универсальности или запросах, которые вы можете выполнять на них, и в скорости. - person e4c5; 29.04.2016