Стрим-фреймворк, касающийся каналов уведомлений и 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