3. JOIN
Иерархическая организация объектов.
Слияние/объединение объектов на стороне клиента.
Использование DBRef для организации связей между
коллекциями и «ленивой» загрузки.
Усложняются опреации агрегирования с участием разных
коллекций.
Требует более тщательного проектирования.
4. ПРИМЕР ИСПОЛЬЗОВАНИЯ DBREF
public class Post : Entity
{
public string Id { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public DateTime Added { get; set; }
public DBRef Owner { get; set; }
}
var mongo = new Mongo(config.BuildConfiguration());
mongo.Connect();
var DB = mongo.GetDatabase(_dataBaseName)
var post = new Post();
post.Owner = new DBRef("User", userId); //First parameter is a mongoDB collection name and second is object id
//To fetch object referenced by DBRef you should do following
var owner = DB.FollowReference<User>(post.Owner);
5. TRANSACTION
Можно использовать атомарность однодокументных
операций
Использование дополнительных паттернов. Например,
commit в 2 шага.
ACID?
8. DATA NORMALIZATION
Объект в коллекции содержит необходимые ему данные.
Дополнительная сложность организации транзакций может
приводить к нарушению целосности данных между разными
коллекциями в определенные моменты времени.
Ограниченность встроенных механизмов ссылок и
древовидная структура объекта побуждает к
денормализации.
9. В ЗАКЛЮЧЕНИЕ
При использовании любого инструмента нужно понимать его
преимущества и недостатки.
При проектировании приложения нужно понимать
ограничения инструментов и способы борьбы с ними.
Премущества часто перевешивают дополнительные затраты
адаптации под вашу задачу.