Milvus · Milvus 2.6
Т‑Банк искал, из каких открытых библиотек собран бинарный jar: каждый метод превращали в эмбеддинг размерности 768 и искали ближайшие в Milvus. Набор — 25 млн векторов, около 71 ГБ без сжатия.
Мешали повторы: один и тот же класс встречается в 500 с лишним библиотеках, и его методы попадают в коллекцию сотни раз. Поиск возвращает топ-10 из одинаковых векторов, а ночная перезаливка библиотек добавляет ещё копий. Сейчас id — автоинкремент (auto_id=True), загрузка через insert.
В работе: Векторный поиск по коду: модель данных коллекции и загрузка без повторов.
Источник: блог Т‑Банка на Хабре: поиск зависимостей в jar-файлах по эмбеддингам методов. Условие пересказано своими словами.
Как изменить коллекцию и загрузку, чтобы один метод хранился один раз, а список библиотек не терялся?
- Первичный ключ — хеш нормализованного байт-кода метода (VARCHAR, auto_id=False), загрузка через upsert; связь «метод → библиотеки» хранить в обычной таблице вне Milvus
- Оставить insert, но задать id вручную из хеша: Milvus отклонит вставку с уже существующим ключом
- После каждой загрузки удалять повторы через delete с фильтром по library
- Ничего не менять в данных, а поднять limit поиска до 1000 и схлопывать одинаковые результаты в приложении