#mongodb #word-frequency
#mongodb #частота слов
Вопрос:
Я пытаюсь сохранить данные о частоте слов с помощью Mongo. Каждое слово должно быть связано с пользователем, чтобы я мог рассчитать, как часто человек использует каждое слово. В настоящее время моя коллекция слов выглядит следующим образом:
{'Hello':3, 'user_id':1}
Который, очевидно, работает только по принципу «один к одному» и никуда не годится.
Я пытаюсь понять, как лучше всего сделать это «Один ко многим» между пользователем и словами. Буду ли я хранить пользовательские отношения в своей коллекции слов следующим образом:
{'word':"Hello", 'users':[{'id':1, 'count':4},{'id':2, 'count':10}]}
Или вместо этого я должен присоединить количество слов к коллекции пользователей?
{'id':1, 'username':'SomeUser', 'words':[{'Hello':4}]}
Очевидным недостатком второго подхода является то, что одни и те же слова будут использоваться разными пользователями, поэтому наличие единой коллекции слов поможет уменьшить размер данных.
Может кто-нибудь посоветовать мне, что мне здесь делать? Есть ли метод, который я, возможно, пропустил в документации?
Ответ №1:
Очевидным недостатком второго подхода является то, что одни и те же слова будут использоваться разными пользователями, поэтому наличие единой коллекции слов поможет уменьшить размер данных.
Нет, такова природа использования document db. Размер данных на самом деле не имеет значения в решениях, отличных от sql, важно то, насколько легко и быстро вы можете получить доступ к своим данным.
Ваш первый подход — это типичная реляционная модель учебника. Нет никакого преимущества в использовании этого в mongo (хотя вы можете смоделировать это реляционным способом в mongo). Вместо этого второй подход дает вам
- Fatser читает / записывает, поскольку каждое слово хранится внутри пользователя. Для этого не нужно выполнять несколько запросов