Моя команда решила работать с Redis через ServiceStack.net Redis Client как базовый репозиторий для нового крупномасштабного веб-сайта, над которым мы работаем. Я не совсем уверен, где искать документацию по этому вопросу (либо для общих документов Redis, либо для специальных документов ServiceStack.Net, либо для обоих) - существует ли на самом деле окончательный источник документации о том, как реализовать Redis через ServiceStack.Net, который включает все, что вам нужно знать о концепциях Redis и концепциях ServiceStack.Net, или нам нужно отдельно интегрировать документацию из обоих аспектов, чтобы получить полную картину?.
Я просто разбираюсь в том, как точно хранить связанные объекты в нашем графике объектов модели. Вот простой сценарий, с которым я хочу работать:
В системе есть два объекта: User
и Feed
. В терминах СУРБД эти два объекта имеют отношение "один ко многим", то есть User
имеет коллекцию объектов Feed
, а фид может принадлежать только одному User
. Каналы всегда будут доступны из Redis через их пользователя, но иногда мы хотим получить доступ к пользователю через экземпляр фида.
Итак, у меня вопрос: нужно ли хранить связанные объекты как свойства или хранить значения Id
связанных объектов? Чтобы проиллюстрировать:
Подход A:
public class User
{
public User()
{
Feeds = new List<Feed>();
}
public int Id { get; set; }
public List<Feed> Feeds { get; set; }
// Other properties
}
public class Feed
{
public long Id { get; set; }
public User User { get; set; }
}
Подход B:
public class User
{
public User()
{
FeedIds = new List<long>();
}
public long Id { get; set; }
public List<long> FeedIds { get; set; }
public List<Feed> GetFeeds()
{
return repository.GetFeeds( FeedIds );
}
}
public class Feed
{
public long Id { get; set; }
public long UserId { get; set; }
public User GetUser()
{
return repository.GetUser( UserId );
}
}
Какой из вышеперечисленных подходов будет работать лучше всего? Я видел оба подхода, используемые в различных примерах, но у меня создается впечатление, что некоторые из примеров, которые я видел, могут быть не лучшими практиками.
Несколько простых связанных вопросов:
- Если я сделаю изменение объекта, оно будет автоматически отражено в Redis или потребуется ли сохранить его? Я предполагаю последнее, но должен быть абсолютно ясным.
- Если я (могу) использовать подход А, будет ли обновление объекта User X отражено на всем объектном графе, где бы оно ни ссылалось, или будет необходимо сохранить изменения на графике?
- Есть ли проблема с сохранением объекта через его интерфейс (т.е. использовать
IList<Feed>
в отличие отList<Feed>
?
Извините, если эти вопросы немного базовые - до 2 недель назад я даже не слышал о Redis, не говоря уже о ServiceStack (и не имел никого в моей команде), поэтому мы действительно начинаем с нуля здесь...