Войти Регистрация
Data base

267. Один и тот же метод в 500 библиотеках

Средняя

Milvus · Milvus 2.6

Т‑Банк искал, из каких открытых библиотек собран бинарный jar: каждый метод превращали в эмбеддинг размерности 768 и искали ближайшие в Milvus. Набор — 25 млн векторов, около 71 ГБ без сжатия.

Мешали повторы: один и тот же класс встречается в 500 с лишним библиотеках, и его методы попадают в коллекцию сотни раз. Поиск возвращает топ-10 из одинаковых векторов, а ночная перезаливка библиотек добавляет ещё копий. Сейчас id — автоинкремент (auto_id=True), загрузка через insert.

В работе: Векторный поиск по коду: модель данных коллекции и загрузка без повторов.

Как проверяем Движка Milvus в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
primary keyupsertдубликатымодель данных

Источник: блог Т‑Банка на Хабре: поиск зависимостей в jar-файлах по эмбеддингам методов. Условие пересказано своими словами.

Как изменить коллекцию и загрузку, чтобы один метод хранился один раз, а список библиотек не терялся?

  • Первичный ключ — хеш нормализованного байт-кода метода (VARCHAR, auto_id=False), загрузка через upsert; связь «метод → библиотеки» хранить в обычной таблице вне Milvus
  • Оставить insert, но задать id вручную из хеша: Milvus отклонит вставку с уже существующим ключом
  • После каждой загрузки удалять повторы через delete с фильтром по library
  • Ничего не менять в данных, а поднять limit поиска до 1000 и схлопывать одинаковые результаты в приложении