Резюме для программиста
Не понял? Свой zip.exe для xml надо сделать? А причем база тогда и логи?
Не свой, а стандартный GZipStream - в нём используется GZip алгоритм, который везде давно используется. Я читаю таблицу, где в некоторых полях XML-логи, которые составляют 99% веса записи, сжимаю их и вместе с остальными данными копирую в другую таблицу. Первая таблица, насколько я понял, иногда очищается, т.к. занимает гораздо больше места и быстрее заполняется. А у них там ограничение по лицензии на размер БД или что-то такое.
Сжиматься будет на той же машине, на которой БД крутится, но сейчас я подключаюсь к БД удалённо, поэтому кидаюсь данными по сети. Ну и опять же, сразу несколько гигов в память не загрузишь (хотя процесс может потреблять и больше 2 ГБ - вроде, в .NET с какой-то версии сняли это ограничение, когда на 64-бита всё перевели). Поэтому пакетно:
db.Table
.AsNoTracking
.OrderBy(o => o.Id)
.Skip
.Take
Это упрощённо. Меня только смущает, что на каждый пакет нужен отдельный запрос, и каждый раз нужно всю таблицу сначала упорядочить. Таблица, из которой я читаю, имеет кластерный индекс Id. Т.е. по идее можно не сортировать при каждом запросе, если всё, что мне нужно, просто пакеты по порадку считать? Кластерный индекс уже отсортирован - т.е. при каждом чтении нескольких записей из такой таблицы возвращается уже отсортированная последовательность? Т.е. в записи выше можно опустить OrderBy, не боясь, что пакеты перекроются по индексам?