Обработка реляционных таблиц без сервера баз данных

Вот моя проблема, у меня:

  • Один партнер, который отправляет мне содержимое своей реляционной базы данных в виде файлов, каждый из которых содержит строку одной таблицы

  • Один партнер, которому я должен отправить данные через API, который принимает только полностью построенный объект

Поскольку таблицы имеют отношения 1: n, я не могу обрабатывать содержимое файлов строка за строкой, а также файлы слишком большие (сто ГБ) для использования полного решения в памяти, и у меня также будет несколько процессов, работающих одновременно, чтобы сделать это преобразование (для избыточности и производительности). Я не хочу использовать для этого промежуточную реляционную базу данных, но у меня есть доступ к базе данных MongoDB.

У вас есть какие-либо идеи о том, как лучше всего справиться с этим?

1 ответ

  1. Для тех, кто работает в подобной проблеме. У нас есть только решение для отношений «один ко многим», но я уверен, что это может быть распространено на другие отношения.

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

    Мы повторяем этот процесс несколько раз, чтобы получить элементы самых дальних таблиц с информацией всех таблиц перед ними. Похож на то, что вы получаете, когда вы присоединяетесь к базе данных SQL. Мы можем перегруппировать эти конечные элементы так, как мы хотим их обработать (и отправить информацию, которую мы хотим, в API).