1

对于使用 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)

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

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

4

1 回答 1

3

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

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

于 2016-01-06T09:10:26.563 回答