Предыдущая стратегия удаления и связанные с ней проблемы
Автор: Yihua Mo
Дата: 2019-12-18
Предыдущая стратегия удаления и связанные с ней проблемы
В статье "Управление данными в векторной поисковой системе Massive-Scale" мы упоминали механизм удаления файлов данных. Удаление включает в себя мягкое удаление и жесткое удаление. После выполнения операции удаления таблицы она помечается как soft-delete. После этого операции поиска или обновления больше не допускаются. Однако операция запроса, начатая до удаления, все еще может выполняться. Таблица действительно удаляется вместе с метаданными и другими файлами только после завершения операции запроса.
Когда же файлы, помеченные как soft-delete, действительно удаляются? До версии 0.6.0 стратегия заключалась в том, что файл действительно удалялся после мягкого удаления в течение 5 минут. На следующем рисунке показана эта стратегия:
5mins
Эта стратегия основана на предположении, что запросы обычно не длятся более 5 минут, и не является надежной. Если запрос длится более 5 минут, он не будет выполнен. Причина в том, что при запуске запроса Milvus собирает информацию о файлах, в которых может быть произведен поиск, и создает задания запроса. Затем планировщик запросов загружает файлы в память по одному и ищет их по очереди. Если при загрузке файла его больше не существует, запрос завершится неудачей.
Увеличение времени может помочь снизить риск сбоев запросов, но при этом возникает другая проблема: слишком большое использование диска. Причина в том, что при вставке большого количества векторов Milvus постоянно объединяет файлы данных, и объединенные файлы не сразу удаляются с диска, даже если запроса не происходит. Если вставка данных происходит слишком быстро и/или объем вставленных данных слишком велик, дополнительное использование диска может достигать десятков гигабайт. В качестве примера см. следующий рисунок:
результат
Как показано на предыдущем рисунке, первая порция вставленных данных (insert_1) стирается на диск и становится файлом_1, затем insert_2 становится файлом_2. Поток, отвечающий за объединение файлов, объединяет их в файл_3. Затем файл_1 и файл_2 помечаются как soft-delete. Третья порция данных для вставки становится файлом_4. Поток объединяет файлы file_3 и file_4 в file_5 и помечает file_3 и file_4 как soft-delete.
Аналогичным образом объединяются insert_6 и insert_5. В t3 файл_5 и файл_6 помечаются как soft-delete. Между t3 и t4, хотя многие файлы помечены как soft-delete, они все еще находятся на диске. После t4 файлы действительно удаляются. Таким образом, между t3 и t4 использование диска составляет 64 + 64 + 128 + 64 + 196 + 64 + 256 = 836 МБ. Вставленные данные составляют 64 + 64 + 64 + 64 + 64 = 256 МБ. Объем используемого диска в 3 раза больше объема вставленных данных. Чем выше скорость записи на диск, тем выше использование диска в определенный период времени.
Улучшения стратегии удаления в версии 0.6.0
Итак, в версии 0.6.0 мы изменили стратегию удаления файлов. Hard-delete больше не использует время в качестве триггера. Вместо этого триггером является момент, когда файл не используется ни одной задачей.
новая стратегия
Предположим, что вставляются две партии векторов. В момент t1 поступает запрос, Milvus получает два файла для запроса (file_1 и file_2, поскольку file_3 еще не существует). Затем поток бэкенда начинает объединять эти два файла с одновременным выполнением запроса. Когда файл_3 будет создан, файл_1 и файл_2 помечаются как soft-delete. После выполнения запроса никакие другие задачи не будут использовать файл_1 и файл_2, поэтому они будут жестко удалены в t4. Интервал между t2 и t4 очень мал и зависит от интервала запроса. Таким образом, неиспользуемые файлы будут удалены вовремя.
Что касается внутренней реализации, то для определения того, может ли файл быть жестко удален, используется подсчет ссылок, хорошо знакомый инженерам-программистам. Для пояснения можно использовать сравнение: когда у игрока есть жизни в игре, он все еще может играть. Когда количество жизней становится равным 0, игра заканчивается. Milvus следит за состоянием каждого файла. Когда файл используется задачей, к нему добавляется жизнь. Когда файл больше не используется, жизнь из него удаляется. Когда файл помечен как soft-delete и количество жизней равно 0, файл готов к hard-delete.
Похожие блоги
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word