Хранить и искать наборы (со многими возможными значениями) в базе данных (из Java)

1

Проблема заключается в том, как хранить (и искать) набор элементов, которым нравится и не нравится пользователь. Хотя каждый пользователь может иметь 2 -10 0 элементов в своем наборе, возможные значения для номеров предметов в десятках тысяч (и расширяются).

Связанным с каждым элементом является значение от 10 (например) до 0 (нейтральное) до -10 (не нравится).

Так что, учитывая пользователя с определенным набором, как найти пользователей с похожими наборами (скажем, процентное перекрытие на пересечении)? В идеале набор совпадений может быть уменьшен с помощью фильтра, который включает только элементы с одинаковыми/нелюбимыми значениями в определенном проценте.

Я не понимаю, как использовать для этого ключ/значение или хранилище столбцов, и ходящая реляционная таблица элементов для каждого пользователя, похоже, потребляет слишком много ресурсов. Создание наборов в документах, похоже, потеряло бы ясность.

Веб-приложение находится на Java. Я искал ORMS, NoSQL, ElasticSearch и связанные с ними инструменты и базы данных. Какие-либо предложения?

  • 0
    Я думаю, что вы должны исследовать рекомендательные системы. Я не думаю, что это то, что вы легко сможете реализовать с помощью одного или двух запросов.
  • 0
    Конкретный пример может прояснить ваш вопрос и вдохновить на дополнительные ответы.
Теги:
database
set
nosql

1 ответ

0

Хорошо, это похоже на то, что фактическое хранилище не является проблемой, но вы хотите создать систему предложений, основанную на симпатиях/антипатиях.

Дело в том, что вы можете хранить все, что захотите, даже в SQL, большинство SQL RDBMS будут достаточно хороши для вашего хранилища данных, но вы, конечно же, можете использовать все, что захотите. Дело в том, что никакое SQL-решение (которое я знаю) не даст вам хороших результатов. Вещь, которую вы ищете, - это система предложений, основанная на искусственном интеллекте, и лучшая для распределенных систем, где у них много реализованных библиотек, - это Apache Mahout.

Согласно тому, что Ive узнал об этом до сих пор, он может делать то, что вам нужно в основном из коробки. Я знаю, что он основан на Hadoop и Yarn, но Im не уверен, что вы можете импортировать данные из любого места, где хотите, или иметь его в HDFS.

Другой вариант - реализовать алгоритм машинного обучения самостоятельно, который будет работать только на одной машине, но вы просто не получите желаемые результаты с помощью простого запроса в любой системе sql.

Причина, по которой вам нужны алгоритмы машинного обучения и запрос с некоторыми номерами, в большинстве случаев не будет достаточным, - это разнообразие пользователей, с которыми вы сталкиваетесь... Что делать, если у вас есть пользователь B, который любил/не любил все, что у него общего с пользователем A то же самое - но охват составляет всего 15%. С другой стороны, у вас есть пользователь C, который очень похож на A (хотя не на 100%, направления практически одинаковы), а C отмечен более 90% вещей, которые также отмечены A. В этом сценарии C намного ближе к A, чем B, но B имеет 100% охват. Есть много других сценариев, где большинства простых процентов не будет достаточно, и поэтому многие компании, у которых есть системы предложений (Amazon, Netflix, Spotify,...), используют Apache Mahout и аналогичные системы, чтобы это сделать.

  • 0
    Спасибо. Вы правы, проблема более сложная. Я сократил сферу, чтобы задать вопрос. Я буду вкладывать средства в то, чтобы узнать больше о Mahout. Можете ли вы порекомендовать лучший алгоритм (ы) для моей проблемы?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню