Я настраивал приложение MongoDB и не могу понять, когда разбить коллекцию на более мелкие связанные коллекции.
Это для приложения Trivia на основе сокетов, где каждая коллекция относится к игреСхемаСхема Game имеет массив объектов игрока (пример JSON представлен ниже).
{
id: 12345,
title: "my trivia game",
players: [
{
_id: 9876
name: "John",
socketID: "abcdef",
answers: [1, 3, 4, 5, null, null], // indicates the answer submitted
score: 10
}, //etc, etc typically an array of 20 to 50 players
],
questions: [] // array of questions and their answers
}
Когда отправляется ответ (через сокеты), запрашивается Игра, игрок извлекается из массива, а объект игроков обновляется, чтобы получить только что отправленный ответ и счет.
// pseudo-code javascript, for Mongoose schema update
// playerID, questionID, answerValue from socket submission
Game.findById(id, function(err, game) {
var player = game.players.id(playerID); //find the player in the object
player.answers[questionID] = answerValue; //track their submission
game.save();
});
Есть ли смысл разделять игроков на отдельные коллекции?Меня беспокоит то, что одновременное обновление нескольких игроков может привести к потере данных или проблемам с блокировкой - но я не знаю достаточно о MongoDB, чтобы определить, так ли это.
С игроками, настроенными как отдельныйсбора, менее вероятно, что документ будет иметь два изменения, записываемые одновременно.