У меня проблема с представлением данных в MongoDB. Я использовал этот дизайн схемы, где комбинация даты и слова уникальна.
{'date':2-1-2011,
'word':word1'
users = [user1, user2, user3, user4]}
{'date':1-1-2011,
'word':word2'
users = [user1, user2]}
Существует фиксированное количество дат, приблизительно 200; потенциально 100 тыс. + слов для каждой даты; и 100к + пользователей.
Я вставил записи с помощью алгоритма, подобного так:
while records exist:
message, user, date = pop a record off a list
words = set(tokenise(message))
for word in words:
collection1.insert({'date':date, 'word':word}, {'user':user})
collection2.insert('something similar')
collection3.insert('something similar again')
collection4.insert('something similar again')
Однако, эта схема привела к чрезвычайно большим коллекциям, и ужасная производительность была ужасна. Я вставляю различную информацию в каждую из четырех коллекций, так что это очень большое количество операций с базой данных.
Я рассматриваю возможность представления данных в таком формате, где слова и пользовательские массивы являются наборами.
{'date':'26-6-2011',
'words': [
'word1': ['user1', 'user2'],
'word2': ['user1']
'word1': ['user1', 'user2', 'user3']]}
Идея заключалась в том, чтобы сократить количество операций с базой данных. Так что для каждого цикла алгоритма я выполняю только одно обновление для каждой коллекции. Однако я не уверен, как выполнить обновление / вставку для этого, поскольку в каждом цикле алгоритма мне может понадобиться вставить новое слово, пользователя или оба.
Может ли кто-нибудь порекомендовать способ обновления этого документа или кто-то может предложить альтернативную схему?
Спасибо