TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #36 1.81K
Представим, что мы храним в базе информацию о количестве лайков к видео с корги, шпицем и йорком. Каждый раз, когда пользователь ставит лайк одному из видео, мы пишем новое значение в файл.

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

Затем можно выполнить уплотнение (compaction) – убрать дубликаты ключей и сохранить только последнюю версию для каждого ключа.

Более того, поскольку во время уплотнения мы удаляем дубликаты, а значит уменьшаем размер файла, то можно слить (merge) несколько сегментов в один, а старые файлы сегментов просто удалить.

Процесс уплотнения и слияния для лайков к видео показан на рисунке. Для каждого ключа сохраняется только последнее значение количества лайков.

У каждого сегмента своя хеш-таблица в оперативной памяти. При поиске сначала смотрим в хэш-таблицу последнего сегмента: если ключа там нет, то проверяется таблица следующего сегмента и т. д. Благодаря процессу слияния количество сегментов остается небольшим, поэтому при поиске не придется проверять слишком много хеш-таблиц.

#сисдиз #кабанчик
  • 👍 12
  • ❤ 2
  • ❤‍🔥 1
More from @jane_yanchenko
  1. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  2. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
  3. Sep 16, 2026Сегодня стрим по Кафке в 19:00 Планируем не в формате доклада, а в формате вопрос-ответ, ч…
  4. Sep 16, 2026Post #413
  5. Sep 16, 2026Post #412
  6. Sep 16, 2026Post #411
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →