🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Повышение производительности чтения базы данных Vector с помощью реплик In-Memory

Повышение производительности чтения базы данных Vector с помощью реплик In-Memory

  • Engineering
August 22, 2022
Congqi Xia

Cover_image Cover_image

Эта статья написана в соавторстве с Конгки Ся и Анжелой Ни.

Официальный релиз Milvus 2.1 включает в себя множество новых функций, обеспечивающих удобство и лучший пользовательский опыт. Хотя концепция реплик in-memory не является чем-то новым для мира распределенных баз данных, это критически важная функция, которая может помочь вам увеличить производительность системы и повысить ее доступность без особых усилий. Поэтому в этой статье мы постараемся объяснить, что такое репликация in-memory и почему она важна, а затем расскажем, как включить эту новую функцию в Milvus, векторной базе данных для искусственного интеллекта.

Перейти к:

Прежде чем узнать, что такое реплика in-memory и почему она важна, нам нужно понять несколько соответствующих понятий, включая группу реплик, реплику осколков, потоковую реплику, историческую реплику и лидера осколков. Изображение ниже иллюстрирует эти понятия.

Replica_concepts Понятия_реплики

Группа реплик

Группа реплик состоит из нескольких узлов запросов, которые отвечают за работу с историческими данными и репликами.

Осколочная реплика

Осколочная реплика состоит из потоковой и исторической реплик, принадлежащих одному и тому же осколку (т. е. каналу DML). Несколько реплик шарда образуют группу реплик. Точное количество реплик шардов в группе реплик определяется количеством шардов в заданной коллекции.

Потоковая реплика

Потоковая реплика содержит все растущие сегменты из одного канала DML. Технически говоря, потоковая реплика должна обслуживаться только одним узлом запроса в одной реплике.

Историческая реплика

Историческая реплика содержит все запечатанные сегменты из одного и того же канала DML. Запечатанные сегменты одной исторической реплики могут быть распределены по нескольким узлам запросов в рамках одной группы реплик.

Лидер осколка

Лидер шарда - это узел запроса, обслуживающий потоковую реплику в шард-реплике.

Что такое реплика в памяти?

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

Пока что векторная база данных Milvus хранит в памяти одну реплику для каждого сегмента. Однако благодаря репликам в памяти вы можете иметь несколько реплик одного сегмента на разных узлах запроса. Это означает, что если один узел запроса ведет поиск в сегменте, то входящий новый запрос на поиск может быть назначен другому незанятому узлу запроса, поскольку на этом узле запроса есть репликация точно такого же сегмента.

Кроме того, если у нас есть несколько реплик в памяти, мы можем лучше справляться с ситуацией, когда узел запроса терпит крах. Раньше нам приходилось ждать перезагрузки сегмента, чтобы продолжить поиск на другом узле запроса. Однако при использовании репликации в памяти запрос на поиск может быть немедленно отправлен на новый узел запроса без необходимости повторной загрузки данных.

Replication Репликация

Почему важны репликации 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 мы подготовили серию блогов, в которых рассказываем о новых возможностях. Подробнее читайте в этой серии блогов:

Like the article? Spread the word

Продолжить чтение