Это вопрос разработки / алгоритма. Вот схема моего сценария:
- У меня есть большая таблица (скажем, 5 миллионов строк) данных, которые яПозвоню по номеру Cars
- Затем у меня есть приложение, которое выполняет
SELECT *
для этой таблицы Cars , собирая все данные и упаковывая их в одну таблицу.файл (который затем куда-то загружается.) - Этот файл данных, сгенерированный моим приложением, представляет собой моментальный снимок, как таблица выглядела в данный момент времени.
- Таблица Автомобили , однако, время от времени обновляется другим процессом, независимо от того, генерирует ли приложение в настоящее время пакет из таблицы или нет.(Там в настоящее время нет синхронизации.)
Моя проблема :
Эта таблица Автомобили становится слишком большой, чтобы сделать один SELECT *
против.Когда мое приложение извлекает все эти данные за один раз, оно быстро переполняет объем памяти для моей машины (скажем, 2 ГБ). Кроме того, простое выполнение цепочек SELECT
s с LIMIT или OFFSET не выполняет условие синхронизации: таблица часто обновляетсяи я не могу изменить данные между вызовами SELECT.
То, что я ищу :
Способ вытащить всю эту таблицу из приложения в приложениечья емкость памяти меньше данных, предполагая, что размер данных может приближаться к бесконечности.В частности, как мне добиться эффекта разбиения на страницы / сегментирования для моих SQL-выборок?т.е. совершать повторяющиеся вызовы с номером страницы для получения следующего сегмента данных.Идеальное решение учитывает масштабируемость в размере данных.
(Ради упрощения моего сценария мы можем предположить, что когда дан сегмент данных, приложение может обработать / записать его, а затем освободить память, использованную ранее.запрос следующего сегмента.)
Любые предложения, которые вы можете дать, будут наиболее полезны.Спасибо!
РЕДАКТИРОВАТЬ: По запросу моя реализация использует C # .NET 4.0 и MSSQL 2008.
РЕДАКТИРОВАТЬ # 2: Это не вопрос команды SQL .Это вопрос, связанный с шаблоном проектирования: какова стратегия выполнения разбивки на страницы с разбивкой на большие таблицы?(Особенно, когда указанная таблица получает постоянные обновления.)