У меня есть промежуточная база данных, которая хранит местоположение GEO в виде следующей структуры:
Страны
Регионы
Города
Почтовый индекс
Долгота
Широта
Я получаю данные от поставщика. Название не актуально. Данные поступают в CSV-файл, столбцы
Начальный IP
Конечный IP
Страна
Регион
Город
Почтовый индекс
Долгота
Широта
Тот факт, что данные поступают в файл CSV, имеет тенденцию к изменению, например, почтовый индекс, название города, название региона или диапазон IP-адресов.
Часть приложения, которая обрабатывает импорт данных, работает следующим образом:
Удалить страны, регионы, города, почтовый индекс и т. Д.
И заново заполнить данные в базе данных.
Мне нужен лучший способ для этого. Потому что, когда приложение работает, я потеряю ключи этих записей, которые есть в базе данных. и все же этот импорт занимает около 2 минут, что означает, что приложение не сможет использовать GEO Location db. Так что я не могу использовать удаление и вставку.
Мне нужно реализовать это таким образом, чтобы я загружал все данные в память и сопоставлял их в точности как структуру, когда я читаю данные из списка. Т.е.: словарь стран, словарь регионов из БД и файл CSV. и обнаружить изменения и обновить базу данных за одну транзакцию.
Проблема в том, как сопоставить их, чтобы я мог обнаружить изменения. Другими словами, например: если название страны меняется :), мне нужно обновить его, указав название страны, указанное в файле CSV. Хорошо. Но как насчет более 1 названия страны? Та же идея для регионов, городов, почтовых индексов.
Да, я храню это объявление в виде древовидной структуры. Страна является корневым узлом, Регионы - это дочерние объекты первого уровня, Города - это уровень секунд, а Почтовые индексы - это вишни.
Есть идеи?
Извините. Это было довольно долго объяснять. Цените время, которое вы потратили, чтобы прочитать это.