Я создал веб-API с использованием .NET Core, и в настоящее время я борюсь с конечной точкой, которая возвращает в качестве входных данных верхний список аналогичных адресов клиентов, связанных с адресами клиентов.
Вкратце: у меня есть конечная точка с именем v1 / customer / lookup со следующим объектом body:
{ customerName: "Facebook Ireland Ltd.", street: "4 Grand Canal Square", city: "Dublin"}
В этом просмотре в реальном времени используется Entity Framework дляполучить доступ к базе данных Azure и ссылаться на таблицу с 700k записей.Данные, которые я запрашиваю: имя клиента, улица, город и улица.Те же данные находятся в таблице базы данных MS SQL.Я использую внешнюю библиотеку (https://nugetmusthaves.com/Package/DuoVia.FuzzyStrings), чтобы проверить, присутствует ли указанное имя клиента (например, «Facebook») в моей базе данных, и процент совпадений, который можно найти.
Например,:
Input customer name: "Facebook" -> in database "Facebook" -> 1.00 (100%)
Input customer name: "Fazebok" -> not in database -> 0.75 (75%)
Поиск прямого совпадения (100%) довольно быстрый и занимает 200-300 мс - даже если в списке содержится 700 тыс. Элементов. Когда я не могу найти прямое совпадение, яЯ должен использовать упомянутую библиотеку для проверки каждого элемента в большом списке. Это заставляет ответ API занимать около 15 секунд. Если вы можете искать какой-то код - это не моя главная задача. Мой вопрос - как я могу это сделать?улучшите общий подход, сделав объясненную проверку.
Вот краткий список того, что я пробовал:
- Проходя итерации по всем 700 тыс. элементов, я проверяю, является ли имя клиента (в таблице есть дубликаты, которые должны оставаться там), уже проверено нечеткой логикой, что еще больше ухудшило производительность, так как поиск увеличил время отклика.
- Уменьшено количествостолбцов, возвращаемых из базы данных -> без улучшения производительности
Что я уже делаю, так это кеширую таблицу базы данных в течение заданного времени, что первый запрос может занять немного больше времени, но следующие запросынамного быстрее.
Возможно, у кого-то из вас есть общее представление о том, как можно реализовать эту живую нечеткую логику.Буду очень рад услышать некоторые идеи!
Заранее спасибо!