MongoDB でデータを表現する際に問題があります。私は、日付と単語の組み合わせが一意であるこのスキーマ設計を使用していました。
{'date':2-1-2011,
'word':word1'
users = [user1, user2, user3, user4]}
{'date':1-1-2011,
'word':word2'
users = [user1, user2]}
約 200 の固定数の日付があります。日付ごとに潜在的に 100,000 語以上。10 万人以上のユーザー。
次のようなアルゴリズムでレコードを挿入しました。
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')
ただし、このスキーマではコレクションが非常に大きくなり、パフォーマンスが大幅に低下しました。4 つのコレクションのそれぞれに異なる情報を挿入しているため、データベースに対する操作の数が非常に多くなります。
単語とユーザーの配列がセットになっているような形式でデータを表すことを検討しています。
{'date':'26-6-2011',
'words': [
'word1': ['user1', 'user2'],
'word2': ['user1']
'word1': ['user1', 'user2', 'user3']]}
この背後にあるアイデアは、データベース操作の数を削減することでした。そのため、アルゴリズムのループごとに、コレクションごとに更新を 1 回だけ実行します。ただし、アルゴリズムの各ループで、新しい単語、ユーザー、またはその両方を挿入する必要がある場合があるため、これに対して更新/アップサートを実行する方法がわかりません。
誰かがこのドキュメントを更新する方法を推奨できますか、または誰かが代替スキーマを提案できますか?
ありがとう