@procode
Разработчик

На какой платформе баз данных лучше реализовать поиск пересечения подмножеств (в тексте приведен пример)?

Проблема такова:

- Пользователи имеют в профайле поле, в которое [через запятую] вводят _произвольные_ теги (поле не обязательно текстовое, мб и JSON, например, как скажете)))
- По запросу [по клику на кнопке] пользователь может получить список профайлов, с наибольшим числом совпадений введенных тегов (в идеале - ранжированный по числу совпадений)

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

Что посоветуете?

И да, я до сей поры не работал с NoSQL базами, может это как раз тот случай, когда стоит попробовать? Ибо насколько я понимаю ситуацию, они как раз примерно для этого и созданы?

Просто хочется сделать такую выборку чисто средствами самой БД, не прибегая к PHP, сравнению массивов и тому подобному.

Такое вообще возможно?

БД нужна опен-сорс, не MSSQL ))

Заранее спасибо за дельный совет!
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Redis, Neo4j, Datomic.
Ответ написан
vagon333
@vagon333
Solutions Architect, Full Stack
Камрад Иван, абсолютно прав.
Это задачка на 2 SQL таблицы:
1. Profiles
2. ProfileTags
и один SQL запрос, типа:
SELECT ProfileName FROM Profiles 
WHERE ProfileID IN (SELECT ProfileTags.ProfileID FROM ProfileTags 
				WHERE ProfileTagName IN (SELECT * FROM STRING_SPLIT(CommaSeparatedTagNames,',')))

Если ранжировать (отсортировать по кол-ву совпадений в обратном порядке), то нужно использовать JOIN вместо подзапроса, подсчитывать кол-во совпавших тэгов и сортировать кол-во совпадений в обратном порядке.

Насчет БД, пример взят из похожей задачи на MSSQL - есть статьи с тэгами, нужно искать с статьи по выбранным пользователем тэгам.
Кстати, у SQL Server есть бесплатная Express Edition с ограничением 10гб на базу, 1гб на используемую память и 1 проц на 4 ядра макс.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы