Стрим-фреймворк, касающийся каналов уведомлений и Cassandra

Всем, кто использует пакет python stream-framework, я хотел бы узнать ваши мысли об использовании Cassandra. В настоящее время я пытаюсь создать ленту уведомлений на основе Cassandra, которая поддерживает число непрочитанных сообщений и помечает весь канал как прочитанный. Похоже, что базовая потоковая структура поддерживает Redis только для NotificationFeed.

1) Для авторов фреймворка это можно сделать с помощью Cassandra?

2) Для кого-то еще есть урезанная модель канала уведомлений, над которым я работаю:

feed_id = columns.Ascii(primary_key=True, partition_key=True)
activity_id = columns.VarInt(primary_key=True, clustering_order='desc')
created_at = columns.DateTime(required=False)
group = columns.Ascii(required=False)
updated_at = columns.DateTime(required=False)
category_id = columns.Integer(required=False, index=True)
read_at = columns.DateTime(required=False)
seen_at = columns.DateTime(required=False)
read = columns.Boolean(required=False, index=True)
seen = columns.Boolean(required=False, index=True)

Каждое действие в ленте имеет флаг чтения и просмотра. Для любого отдельного действия достаточно легко найти его по первичному ключу (конкретному каналу и заданному идентификатору действия) и, следовательно, обновить столбец. Тем не менее, в Cassandra 2.2+ нет способа обновить весь объем активности канала как прочитанный (так как вы должны предоставить полный первичный ключ и не можете использовать вторичный индекс). (ПРИМЕЧАНИЕ: в cassandra 3.0 кажется, что вы можете использовать оператор IN для ключа кластеризации, поэтому вы можете сделать это в два этапа: lookup activity_id где read=False с использованием вторичного индекса, а затем использовать результаты с помощью одного запроса с использованием IN, чтобы обновить их).

Я надеюсь, что это имеет смысл, и если нет, я предоставлю любые необходимые разъяснения.

1 ответ

Каналы уведомлений с Cassandra не связаны в потоковой среде, но могут быть реализованы с использованием существующих базовых классов. Для этого вам нужно реализовать следующие классы:

  • BaseNotificationFeed
  • BaseListsStorage

и настройте реализацию ListsStorage для использования в вашем фиде уведомлений (см. здесь: https://github.com/tschellenbach/Stream-Framework/blob/aba914c71f527dcf43388937002075c851b47897/stream_framework/feeds/notification_feed/base.py

Что касается реализации, у меня есть несколько предложений:

  • Если вы можете, вы должны рассмотреть вопрос об использовании хранилища RedisListsStorage
  • Рассмотрите возможность хранения непрочитанных и невидимых идентификаторов действий в качестве статических столбцов.

Например:

unread_ids set<text> static
unseen_ids set<text> static

Отказ от ответственности: я один из разработчиков stream-framework

Другие вопросы по тегам