Найти - Пользователи
Полная версия: Архитектура микроблогов
Начало » Python для экспертов » Архитектура микроблогов
1
in
Вопрос именно по архитектуре поэтому рискнул добавить вопрос в эту ветку.

Существует некая система микроблогов, бордов. Достаточно минималистичная. У каждого пользователя есть свой борд (простой фид с одной ежедневной публикацией). Вопрос как лучше написать подписку на эти борды.

Желательно чтобы можно было передавая только id пользователя получать отсортированый по дате список всех публикаций от всех бордов, на который подписан пользователь.

Пока совершенно не понимаю как лучше организовать хранение списка в базе данных. Склоняюсь к ManytoManyFiled но никогда с ним не работал еще.
ilnur
а в чем проблема?

Если юзать джанго, то модель пользователя уже есть. Надо только модель для борда:
class Board(models.Model):
    user = ForeignKey(User, ....)
    created = models.DateTimeField(...)
    post = models.TextField(....)
и получайте запись/записи отсортированные хоть по дате, хоть как.

in
Пока совершенно не понимаю как лучше организовать хранение списка в базе данных.
списка чего?
lorien
many-to-many, возможно с дополнительной промежуточной моделью (https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships), если хотите хранить какие-то дополнительные параметры связи, например, дата создания подписки
Вообще ваш вопрос для подфорума “Django” предназначен.
o7412369815963
in
Вопрос именно по архитектуре поэтому рискнул добавить вопрос в эту ветку.
lorien
Вообще ваш вопрос для подфорума “Django” предназначен.
Архитектура только у проектов на джанго бывает? ;)

Вот один из вариантов для MongoDB:

2 коллекции
user: { _id:1, name:'Saha', boards:[2,5,6,8] }
board: { user:1, post:'...', created:'recently' }

Запрос на получение ленты по всем подписанным бордам:
(user) ->
    db.board.find({ user:{ $in:user.boards } }).sort({ created:-1 })
Добавление борда в пользователя (подписка):
(user, board_id) ->
    db.board.update({ _id:user._id }, { $addToSet:{ boards:board_id } })
in
lorien
many-to-many, возможно с дополнительной промежуточной моделью (https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships), если хотите хранить какие-то дополнительные параметры связи, например, дата создания подпискиВообще ваш вопрос для подфорума “Django” предназначен.

lorein мне сначала понравилась идея сделать промежуточный класс, управляющий отношениями. Но поскольку в этом классе отсутсвует возможность использовать метод add я не совсем понимаю как им пользоваться. Получается что я смогу определить отношения только при создании инстанса. А я если я захочу убрать из группы подписчиков или наоборот добавить конкретно с этой моделью я уже работать не смогу.

p.s А нет отбой, разобрался.

У меня такой вопрос. Можно ли будет одним запростом получить отсортированный по дате публикации список постов или потребуется сначала получить список групп, обойти их в цикле у каждой запросить свой список постов, объединить их в один список и отсортировать?

    class Board (models.Model):
           title = models.CharField (max_length=30)
           description =  models.CharField (max_length=300)
           author = models.ForeignKey(User)
           created = models.DateTimeField (editable=False)
           subscribers = models.ManyToManyField(User, through='"Subscription")
            
    class  Post (models.Model):
          title = models.CharField (max_length=30)
          description = models.CharField (max_length=320)
          created = models.DateTimeField (editable=False)
          board = models.ForeignKey (Board)
    class Subscription (models.Model):
          subcsriber = models.ForeignKey(User)
          board = models.ForeignKey(Board)
          sub_date =  models.DateTimeField (auto_now_add=True)
lorien
> Архитектура только у проектов на джанго бывает? ;)

В данном случае речь идёт о Django т.к. в первом посте автор упомянул термин ManyToManyField.

> Можно ли будет одним запростом получить отсортированный по дате публикации список постов или потребуется сначала получить список групп, обойти их в цикле у каждой запросить свой список постов, объединить их в один список и отсортировать?

Я думаю можно одним запросом, но что именно вам нужно я не понял.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB