Текущий процесс 1. Тянем все данные в не отсортированном виде List<(search, type, offer, codes, agency, rule_Id)> 2. Создаем из этого в Dictionary<(search, type, offer, codes), (agency, rule_id)[]> 3. Словарь кастим в List<(search, type, offer, codes, (agency, rule_id)[]>. 4. Лист сериализуем кусками и в редиску Хочу поменять на 1. Тянем данные кусками отсортированные по ключу (search, type, offer, codes) 2. Т.к. данные отсортированы, складываем сразу в List<(search, type, offer, codes, (agency, rule_id)[]> Если прочитанная строка равна предыдущей, то нужно добавить значение в (agency, rule_id)[] Иначе добавялем в лист новую запись (search, type, offer, codes, (agency, rule_id)[] 3. Когда прочитали какое-то заданное кол-во строк, то сериализуем весь List, кроме последнего элемента
У хоста есть 64 ГБ оперативы, но я пытаюсь сделать потоковое формирование бинарников Хост за раз не справляется, там до 500 миллионов исходных правил. Типы (search, type, offer, codes) short, byte, short, string Поглядываю также в сторону Nested
какая версия КХ? Почитайте changelog про этот optimize_read_in_order. Там пишут что что-то меняли в 22.2, и у меня есть воспоминание, что раньше оно было выключено. Но если вы сможете добиться, чтобы КХ не сортировал все в памяти, а стримил вам напрямую с диска, то ваше приложение может само делить на удобные вам батчи и распределять по многочисленным редисам.
optimize_read_in_order включено по умолчанию после 19.16
Обсуждают сегодня