Как способ изучения NHibernate, я придумал небольшой проект, который включает типичную систему аутентификации пользователей и групп. Это заставило меня задуматься о том, как это будет сделано. Я быстро соединил следующие классы и сопоставил их с базой данных, которая работала после многих проб и ошибок. Я получил схему базы данных из трех таблиц с таблицей связи «многие ко многим» между таблицами «Пользователь» и «Группа».
public class User
{
public virtual string Username { get; set; }
public virtual byte[] PasswordHash { get; set; }
public virtual IList<Group> Groups { get; set; }
}
public class Group
{
public virtual string Name { get; set; }
public virtual IList<User> Users { get; set; }
}
Мой вопрос касается масштабируемости и потенциальной производительности такого класса дизайна. Если бы это было в производственной системе с десятками тысяч пользователей, даже с ленивой загрузкой в коллекцию пользователей группы, любой вызов свойства Groups мог бы вызвать потенциально ОГРОМНЫЙ поиск данных.
Как бы NHibernate справился с таким сценарием и как я мог бы улучшить свой дизайн?