У меня есть веб-сайт c, который мне нужен для поиска отдельного набора данных; В настоящее время я размещаю сайт с использованием технологии без сервера на AWS, включая S3, Cloudfront, Lambda и API-шлюз для некоторых серверных логи c.
У меня есть несколько CSV-файлов с примерно 120 000 записями в них со структурой, подобной этой:
ID search_name name source quantity
10002 Lorem Ipsum Dolor sit amet primary_name 10
10002 Lorem Ipsum Consectetur amet other_name 10
10002 Lorem Ipsum Donec a erat other_name 10
10003 Ultricies pretium Inceptos primary_name 100
10003 Ultricies pretium Himenaeos other_name 100
Таким образом, конечным результатом будет форма поиска на моем внешнем интерфейсе, которая сделает вызов API для бэкэнд-системы, которая запрашивает базу данных или отдельную программную службу, которая может соответствовать строке в поле «search_name»; а затем верните все совпадения. Мой интерфейс будет отображать записи с «источником» и «другим именем» в качестве метаданных в результате, а не в отдельных результатах.
Новый набор файлов CSV будет предоставляться каждые 3 месяца, который будет содержать то же самое, и дополнительные записи, но поле «количество» может иметь новое значение.
Поскольку я работал с бессерверными технологиями, моей первоначальной мыслью было попытаться сохранить файлы в корзине s3, использовать клей AWS, чтобы обработать их и сделать доступными для AWS Афины для запросов. Мне нравится эта настройка, так как не так много компонентов, которые нужно обслуживать, а расходы на хостинг будут низкими Мои две проблемы с этой настройкой - время, которое я потрачу, пытаясь разработать хороший алгоритм поиска, который может сортировать результаты в соответствии с тем, как закрыть матч они. Например, если имя для поиска AB C, оно должно быть первым результатом, в отличие от других элементов, в которых AB C является частью их имени. Во-вторых скорость исполнения; Я выполнил несколько простых запросов, таких как:
SELECT id, search_name, source
FROM data
WHERE search_name like '%lorem%';
Просто с помощью редактора запросов в Афине GUI, и время выполнения может варьироваться от 0,5 до 3 секунд. Это те 3 секунды казни, которые меня беспокоят. Мне интересно, насколько хорошо это можно оптимизировать. Я также прочитал: «Пользователи могут отправлять только один запрос за раз и могут выполнять только до пяти одновременных запросов для каждой учетной записи», если только у меня нет некоторой оговорки, похоже, это как бы убивает меня.
В качестве второго варианта я думал об использовании AWS ElasticSearch. Я не очень много знаю об этом, но я подумал, что использование системы, разработанной для поиска, может сделать мой конечный продукт намного лучше. Я не знаю много о его реализации, но мои проблемы здесь, опять же, моя способность расставить приоритеты для определенных результатов поиска и насколько легко будет выполнить этот процесс ввода данных, например, когда новый набор данных прибывает, он нуждается обновлять записи, а не просто укладывать их поверх. Я написал первоначальный сценарий для загрузки записей CSV, чтобы проверить запрос.
Я только начал смотреть на AWS CloudSearch, который на самом деле выглядит немного проще, чем ElasticSearch, поэтому начинаю склоняться таким образом.
Поэтому совет, который я ищу, - это рекомендации о том, какие продукты или услуги мне следует использовать, будь то Athena, ElasticSearch или что-то еще, и любые рекомендации высшего уровня о том, как мне следует внедрять эти службы.
Спасибо.