关于通知源和Cassandra的流框架问题

时间:2016-01-05 21:32:02

标签: cassandra cassandra-2.0 stream-framework

对于任何使用python stream-framework包的人,我想知道你对使用Cassandra的想法。我目前正在尝试构建基于Cassandra的通知源,它支持未读计数,并将整个Feed标记为已读。看起来,基本流框架似乎只支持Redis的NotificationFeed。

1)对于框架的作者,可以使用Cassandra来完成吗?

2)对于其他任何人,这里是我正在处理的通知Feed的简化模型:

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)

Feed中的每个活动都有一个read and seen标志。对于任何单个活动,它很容易通过其主键(特定订阅源和给定的活动ID)找到它,因此更新列。但是,在cassandra 2.2+中,没有办法将整个feed的活动值更新为读取(因为你必须提供完整的主键并且不能使用二级索引)。 (注意:在cassandra 3.0中,您似乎可以使用IN运算符作为群集密钥,因此您可以分两步执行此操作:使用辅助索引查找activity_id,其中read = False,然后使用单个查询使用结果IN来更新它们。)

我希望这是有道理的,如果没有,我会提供所需的任何澄清。

1 个答案:

答案 0 :(得分:3)

使用Cassandra的通知源不会捆绑在流框架上,但可以重用现有的基类来实现。为此,您需要实现以下类:

  • BaseNotificationFeed
  • BaseListsStorage

并配置您的ListsStorage实施以供您的通知Feed使用(请参阅此处: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

免责声明:我是流框架的维护者