Повышение производительности чтения базы данных Vector с помощью реплик In-Memory
Cover_image
Эта статья написана в соавторстве с Конгки Ся и Анжелой Ни.
Официальный релиз Milvus 2.1 включает в себя множество новых функций, обеспечивающих удобство и лучший пользовательский опыт. Хотя концепция реплик in-memory не является чем-то новым для мира распределенных баз данных, это критически важная функция, которая может помочь вам увеличить производительность системы и повысить ее доступность без особых усилий. Поэтому в этой статье мы постараемся объяснить, что такое репликация in-memory и почему она важна, а затем расскажем, как включить эту новую функцию в Milvus, векторной базе данных для искусственного интеллекта.
Перейти к:
Концепции, связанные с репликой in-memory
Прежде чем узнать, что такое реплика in-memory и почему она важна, нам нужно понять несколько соответствующих понятий, включая группу реплик, реплику осколков, потоковую реплику, историческую реплику и лидера осколков. Изображение ниже иллюстрирует эти понятия.
Понятия_реплики
Группа реплик
Группа реплик состоит из нескольких узлов запросов, которые отвечают за работу с историческими данными и репликами.
Осколочная реплика
Осколочная реплика состоит из потоковой и исторической реплик, принадлежащих одному и тому же осколку (т. е. каналу DML). Несколько реплик шарда образуют группу реплик. Точное количество реплик шардов в группе реплик определяется количеством шардов в заданной коллекции.
Потоковая реплика
Потоковая реплика содержит все растущие сегменты из одного канала DML. Технически говоря, потоковая реплика должна обслуживаться только одним узлом запроса в одной реплике.
Историческая реплика
Историческая реплика содержит все запечатанные сегменты из одного и того же канала DML. Запечатанные сегменты одной исторической реплики могут быть распределены по нескольким узлам запросов в рамках одной группы реплик.
Лидер осколка
Лидер шарда - это узел запроса, обслуживающий потоковую реплику в шард-реплике.
Что такое реплика в памяти?
Включение реплик в памяти позволяет загружать данные в коллекции на несколько узлов запросов, чтобы задействовать дополнительные ресурсы процессора и памяти. Эта функция очень полезна, если у вас относительно небольшой набор данных, но вы хотите увеличить пропускную способность чтения и повысить эффективность использования аппаратных ресурсов.
Пока что векторная база данных Milvus хранит в памяти одну реплику для каждого сегмента. Однако благодаря репликам в памяти вы можете иметь несколько реплик одного сегмента на разных узлах запроса. Это означает, что если один узел запроса ведет поиск в сегменте, то входящий новый запрос на поиск может быть назначен другому незанятому узлу запроса, поскольку на этом узле запроса есть репликация точно такого же сегмента.
Кроме того, если у нас есть несколько реплик в памяти, мы можем лучше справляться с ситуацией, когда узел запроса терпит крах. Раньше нам приходилось ждать перезагрузки сегмента, чтобы продолжить поиск на другом узле запроса. Однако при использовании репликации в памяти запрос на поиск может быть немедленно отправлен на новый узел запроса без необходимости повторной загрузки данных.
Репликация
Почему важны репликации in-memory?
Одним из наиболее значительных преимуществ использования реплик in-memory является увеличение общего числа запросов в секунду (QPS) и пропускной способности. Кроме того, можно поддерживать несколько сегментных реплик, и система становится более устойчивой к сбоям.
Включение реплик in-memory в векторной базе данных Milvus
Включить новую функцию реплик в памяти в векторной базе данных Milvus не составляет труда. Все, что вам нужно сделать, это просто указать количество реплик, которое вы хотите получить при загрузке коллекции (т. е. при вызове collection.load()
).
В следующем примере мы предположим, что вы уже создали коллекцию с именем "book" и вставили в нее данные. Тогда вы можете выполнить следующую команду для создания двух реплик при загрузке коллекции book.
from pymilvus import Collection
collection = Collection("book") # Get an existing collection.
collection.load(replica_number=2) # load collection as 2 replicas
Вы можете гибко изменять количество реплик в приведенном выше коде примера, чтобы наилучшим образом соответствовать сценарию вашего приложения. После этого вы можете напрямую выполнять поиск или запрос векторного сходства на нескольких репликах без дополнительных команд. Однако следует отметить, что максимальное количество реплик ограничено общим объемом памяти для выполнения узлов запроса. Если указанное количество реплик превысит ограничения по объему используемой памяти, при загрузке данных будет выдана ошибка.
Вы также можете проверить информацию о созданных in-memory репликах, выполнив команду collection.get_replicas()
. Будет выведена информация о группах реплик и соответствующих узлах запроса и шардах. Ниже приведен пример вывода.
Replica groups:
- Group: <group_id:435309823872729305>, <group_nodes:(21, 20)>, <shards:[Shard: <channel_name:milvus-zong-rootcoord-dml_27_435367661874184193v0>, <shard_leader:21>, <shard_nodes:[21]>, Shard: <channel_name:milvus-zong-rootcoord-dml_28_435367661874184193v1>, <shard_leader:20>, <shard_nodes:[20, 21]>]>
- Group: <group_id:435309823872729304>, <group_nodes:(25,)>, <shards:[Shard: <channel_name:milvus-zong-rootcoord-dml_28_435367661874184193v1>, <shard_leader:25>, <shard_nodes:[25]>, Shard: <channel_name:milvus-zong-rootcoord-dml_27_435367661874184193v0>, <shard_leader:25>, <shard_nodes:[25]>]>
Что дальше
После официального выхода Milvus 2.1 мы подготовили серию блогов, в которых рассказываем о новых возможностях. Подробнее читайте в этой серии блогов:
- Как использовать строковые данные для расширения возможностей приложений поиска по сходству
- Использование Embedded Milvus для мгновенной установки и запуска Milvus с Python
- Увеличение пропускной способности базы данных Vector с помощью реплик в памяти
- Понимание уровня согласованности в векторной базе данных Milvus
- Понимание уровня согласованности в векторной базе данных Milvus (часть II)
- Как база данных Milvus Vector обеспечивает безопасность данных?
- Концепции, связанные с репликой in-memory
- Что такое реплика в памяти?
- Почему важны репликации in-memory?
- Включение реплик in-memory в векторной базе данных Milvus
- Что дальше
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word