Представим, что мы храним в базе информацию о количестве лайков к видео с корги, шпицем и йорком. Каждый раз, когда пользователь ставит лайк одному из видео, мы пишем новое значение в файл.
Когда мы все время пишем в конец файла, как избежать ситуации исчерпания места? Хорошим решением будет разбить нашу базу данных на сегменты определенного размера. Тогда мы будем закрывать файл сегмента при достижении им этого размера и записывать следующие данные уже в новый файл.
Затем можно выполнить уплотнение (compaction) – убрать дубликаты ключей и сохранить только последнюю версию для каждого ключа.
Более того, поскольку во время уплотнения мы удаляем дубликаты, а значит уменьшаем размер файла, то можно слить (merge) несколько сегментов в один, а старые файлы сегментов просто удалить.
Процесс уплотнения и слияния для лайков к видео показан на рисунке. Для каждого ключа сохраняется только последнее значение количества лайков.
У каждого сегмента своя хеш-таблица в оперативной памяти. При поиске сначала смотрим в хэш-таблицу последнего сегмента: если ключа там нет, то проверяется таблица следующего сегмента и т. д. Благодаря процессу слияния количество сегментов остается небольшим, поэтому при поиске не придется проверять слишком много хеш-таблиц.
#сисдиз #кабанчик
Post #36
1.81K

- 👍 12
- ❤ 2
- ❤🔥 1