对于任何使用python流框架包的人,我想知道你对使用Cassandra的想法。我目前正在尝试构建一个基于Cassandra的通知提要,它支持未读计数,并将整个提要标记为已读。IT似乎基本流框架只支持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)
提要中的每个活动都有一个read-and-seed标志。对于任何单独的活动,通过其主键(特定提要和给定的活动ID)找到它并更新列是很容易的。然而,在cassandra 2.2+中,无法将整个提要的活动更新为已读(因为您必须提供完整的主键,并且不能使用辅助索引)。(注意:在cassandra 3.0中,您似乎可以使用In运算符作为集群密钥,因此您可以分两步完成:使用辅助索引查找activity_id,其中read=False,然后使用In通过单个查询使用结果来更新它们)。
我希望这是有意义的,如果没有,我将提供任何需要的澄清。
带有Cassandra的通知提要没有绑定在流框架上,但可以重用现有基类来实现。要做到这一点,您需要实现以下类:
- BaseNotificationFeed
- 基本列表存储
并将ListsStorage实现配置为供通知源使用(请参阅此处:https://github.com/tschellenbach/Stream-Framework/blob/aba914c71f527dcf43388937002075c851b47897/stream_framework/feeds/notification_feed/base.py#L11)
关于实施,我有几个建议:
- 如果可以,您应该考虑使用RedisListsStorage存储
- 考虑将未读和未看的活动ID存储为静态列
例如:
unread_ids set<text> static
unseen_ids set<text> static
免责声明:我是流框架的维护者之一