Обновление базы данных местоположений GEO - PullRequest
1 голос
/ 18 декабря 2009

У меня есть промежуточная база данных, которая хранит местоположение GEO в виде следующей структуры:
Страны
Регионы
Города
Почтовый индекс
Долгота
Широта

Я получаю данные от поставщика. Название не актуально. Данные поступают в CSV-файл, столбцы
Начальный IP
Конечный IP
Страна
Регион
Город
Почтовый индекс
Долгота
Широта

Тот факт, что данные поступают в файл CSV, имеет тенденцию к изменению, например, почтовый индекс, название города, название региона или диапазон IP-адресов.

Часть приложения, которая обрабатывает импорт данных, работает следующим образом: Удалить страны, регионы, города, почтовый индекс и т. Д. И заново заполнить данные в базе данных.

Мне нужен лучший способ для этого. Потому что, когда приложение работает, я потеряю ключи этих записей, которые есть в базе данных. и все же этот импорт занимает около 2 минут, что означает, что приложение не сможет использовать GEO Location db. Так что я не могу использовать удаление и вставку.

Мне нужно реализовать это таким образом, чтобы я загружал все данные в память и сопоставлял их в точности как структуру, когда я читаю данные из списка. Т.е.: словарь стран, словарь регионов из БД и файл CSV. и обнаружить изменения и обновить базу данных за одну транзакцию.

Проблема в том, как сопоставить их, чтобы я мог обнаружить изменения. Другими словами, например: если название страны меняется :), мне нужно обновить его, указав название страны, указанное в файле CSV. Хорошо. Но как насчет более 1 названия страны? Та же идея для регионов, городов, почтовых индексов.

Да, я храню это объявление в виде древовидной структуры. Страна является корневым узлом, Регионы - это дочерние объекты первого уровня, Города - это уровень секунд, а Почтовые индексы - это вишни.

Есть идеи?

Извините. Это было довольно долго объяснять. Цените время, которое вы потратили, чтобы прочитать это.

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

Выполните diff для файлов CSV и используйте его для создания SQL, который обновит базу данных.

0 голосов
/ 18 декабря 2009

Если вы хотите сделать обновление, вы можете использовать RedGate SQL Comparer (MS SQL). Это очень хорошо, даст вам сценарии. Есть и другие инструменты, которые могут сделать такое сравнение. Шаги будут

  1. установить базу данных в однопользовательский режим, запустить обновления, освободить ее из однопользовательского режима

Альтернатива: загрузить это в новое имя таблицы, удалить старую таблицу и переименовать эту новую таблицу в исходное имя таблицы. Конечно, вам также придется обрабатывать любые первичные ключевые отношения с внешними ключами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...