node.js と mongodb (mongoose モジュール) で大規模なソーシャル ネットワークを作成しています。つまり、データベースには多くのユーザーと大規模なデータが存在します。
ユーザー登録を作成しましたが、ユーザーが互いにプライベート メッセージを書き込めるようにする必要があります。
質問:
1) プライベート メッセージの送信に関するデータをどのように保存すればよいですか? 私は2つの方法を考えました:
最初
var schemaUser = new mongoose.Schema({
i: Number,
...
message: { type: Schema.ObjectId, ref: 'Message' }
});
var schemaMessage = new mongoose.Schema({
m: [{
f: Number, // value i from schemaUser, means from user
m: String, // message
d: { type: Date, default: Date.now } // date
}]
});
module.exports = {
User: db.model('User', schemaUser),
Message: db.model('Message', schemaMessage)
}
このようにして、すべてのユーザーがテーブルへのmessage
フィールドを持ち、コレクションが 1 つだけあり、配列にすべてのメッセージが格納されます。Message
m
2番目
次のようにすべてのメッセージに保存しMessages
ます。
var schemaMessage = new mongoose.Schema({
t: Number, // means to what user this messages sent
f: Number, // value i from schemaUser, means from what user message sent
m: String, // message
d: { type: Date, default: Date.now } // date
});
すべてのメッセージが 1 つのテーブルに混在しています。しかし、私が理解したように、この方法の欠点は、データベースに100万を超えるプライベートメッセージが存在する可能性があることです。そのため、from
ユーザーとto
ユーザーが送信したメッセージを見つける速度とパフォーマンスが低下します. 最初のメソッドでは、すべてのメッセージが配列にあります。
それで、私はどちらの方法を選ぶべきですか、それとも他のアイデアはありますか?
2)最初の方法のような配列があります:var arr = []
質問:いくつのオブジェクトを入れることができarr
ますか?の大きさはarr
?たとえば、次のようなものをプッシュするとarr.push({t: #, f: #, m: 'message...'})
?