2013-06-19 2 views
0

В базе данных есть таблица с тремя столбцами [StringColumn], [FloatColumn1], [FloatColumn2]. Все строки в этой таблице отличаются друг от друга, без дубликатов.Обновить только новые записи без наличия флага для новой записи.

У него около 1M записей, каждый день он получает около 10-50 новых записей.

На стороне клиента, когда приложение запускается, оно загружает ВСЕ записи из этой таблицы (для поисковых полей) через вызов веб-службы, это около 85 МБ, что довольно плохо.

Что было бы лучшим способом получить только различия между локальным кешем данных и базой данных?

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

Любые идеи приветствуются.

+0

Можете ли вы создать триггер, который переносит новые данные в другую таблицу. Тогда вы могли бы получить данные из этой таблицы? Конечно, вы захотите очистить эту таблицу после синхронизации данных каждый день. –

+0

Имеет ли эти существующие данные мутацию? – Paparazzi

+0

не может создать триггер, не иметь доступа к базе данных. но мне нравится идея, мне нужно будет проверить с нашим администратором баз данных. Нет, существующие данные не мутируют. – Eugen

ответ

0

Ну, если вы действительно не можете редактировать DDL каким-либо образом (схема таблицы, триггеры и т. Д.), Ваша цель должна заключаться в ограничении передачи данных (что вы, кажется, понимаете, ссылаясь на номер 85Mb).

Один из способов сделать это - задавать запросы диапазона перед сравнением полных наборов данных.

Например, в вашем коде вы знаете количество записей с [FloatColumn1] между 0.0 и 19.999, 20.0 и 29.999 и т. Д. Было бы тривиально спросить SQL Server, имеет ли он одинаковое количество записей в каждом диапазоне. Для диапазонов с разным счетчиком вы можете уточнить поиск, пока не сможете быстро выполнить полное сравнение в пределах этого диапазона (эксперименты и бенчмаркинг - лучший способ определить оптимальный минимальный размер диапазона). У вас также есть возможность использовать ту же идею в комбинациях других столбцов (другой выбор зависит от ваших данных).

С LINQ код, реализующий выше, не должен выглядеть слишком уродливым.

0

Проблема со второй таблицей, которую вы очищаете ежедневно, это клиент, возможно, не покраснел.

Если данные не мутируют тогда простой столбец Identity.

Клиент просто захватывает данные> максимальный идентификатор клиента.

+0

Я бы предположил, что клиент будет вызывать флеш после того, как данные будут успешно загружены и объединены с локальными данными. –

+0

Я принимаю более 1 клиента. Используемый термин клиентская сторона заставила меня поверить более чем одному клиенту. – Paparazzi

+0

правильно, мы несколько клиентов. – Eugen

Смежные вопросы