2015-03-29 2 views
-1

В настоящее время я немного застрял и вам нужно дать совет о том, как действовать. У меня есть следующие настройки:Entity Framework - Сравнение предметов

  • две базы данных, один Энгр, другой один MSSQL
  • Я беру подмножество данных из базы данных Ingres (что беспорядок), привести его в (гораздо больше) нормализованной формы и сохранить ее в базе данных MSSQL для дальнейшего использования.
  • Я получаю элементы данных от Ingres БД через обычный DataReader и хранить элементы в базе данных MSSQL с помощью Framework Entity
  • До сих пор, это в основном работает (Jey!)

модель базы данных (в БД MSSQL) состоит из 5 таблиц, тогда как одна таблица является основной таблицей (Статьи), а другие таблицы (Цены, партии, ...) относятся к этой таблице (главным образом через номер статьи, который является первичным ключом) ,

Теперь мы говорим о 35-килограммовых статьях, где каждая статья имеет много партий и так далее. Это стало проблемой, когда я обновляю всю таблицу каждый раз (в основном, что я делаю, это то, что я TRUNCATE таблицы и воссоздать весь набор данных). Это занимает (на очень медленном сервере) прибл. 5-10 минут (даже после некоторых изменений в настройках Entity Framework по умолчанию). Поскольку набор данных должен быть последовательным, таблица в основном заблокирована через этот таймфрейм, который является не-go.

Я хотел бы переключиться на метод непрерывного обновления, когда проверка и изменение данных выполняется непрерывно в фоновом режиме.

В принципе, единственной идеей, которую я мог придумать, было проверить все элементы вручную и проверить, не изменилось ли какое-либо свойство элемента. Если он сделал (или если он новый), я бы вручную изменил свойство.

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

+0

Спасибо за голосование по дате голосования, по крайней мере, было бы неплохо ... –

ответ

0

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

Затем в любой промежуток времени (или непрерывно) прочитайте каждое изменение из таблицы изменений и примените его к таблице MSSQL, а затем удалите строку изменения.

Возможно, это будет немного сложнее, но эта базовая техника кажется мне хорошим подходом.

+0

Мысль об этом, но единственный доступ, который я имею к базе данных Ingres DB, не читает (никаких писем или триггеров или чего-то еще ...) –

+0

Это дает вы настоящая проблема. Учитывая, что Энгр много лет не работает, я полагаю, что поставщики системы Ingres недоступны? Имеет ли клиент DBA доступ к изменению БД? Или клиент полностью не хочет этого делать? –

+0

К сожалению, на данный момент база данных «не трогайте ее вообще или умереть» :( –