Хранение данных о частоте слов

#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 читает / записывает, поскольку каждое слово хранится внутри пользователя. Для этого не нужно выполнять несколько запросов