Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 20, 2013 00:53:02

in
Зарегистрирован: 2013-09-11
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Архитектура микроблогов

Вопрос именно по архитектуре поэтому рискнул добавить вопрос в эту ветку.

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

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

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

Отредактировано in (Сен. 20, 2013 00:53:29)

Офлайн

#2 Сен. 20, 2013 06:37:14

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Архитектура микроблогов

а в чем проблема?

Если юзать джанго, то модель пользователя уже есть. Надо только модель для борда:

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

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

Офлайн

#3 Сен. 20, 2013 09:00:26

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Архитектура микроблогов

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

Офлайн

#4 Сен. 20, 2013 10:49:40

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Архитектура микроблогов

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 } })

Отредактировано o7412369815963 (Сен. 20, 2013 10:51:17)

Офлайн

#5 Сен. 20, 2013 11:46:38

in
Зарегистрирован: 2013-09-11
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Архитектура микроблогов

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)

Отредактировано in (Сен. 20, 2013 12:26:16)

Офлайн

#6 Сен. 20, 2013 18:53:10

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Архитектура микроблогов

> Архитектура только у проектов на джанго бывает? ;)

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

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

Я думаю можно одним запросом, но что именно вам нужно я не понял.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version