【问题标题】:Stream-Framework Issue Regarding Notification Feeds and Cassandra关于通知源和 Cassandra 的流框架问题
【发布时间】:2016-01-05 21:32:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: cassandra cassandra-2.0 stream-framework


    【解决方案1】:

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

    • BaseNotificationFeed
    • BaseListsStorage

    并配置您的 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
    

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

    【讨论】:

    • 谢谢托马索!我刚开始阅读有关静态列的内容,并且正在考虑有关计数的内容,但是它们将努力保存未读/未见活动的列表是有道理的。然后将所有标记为已读就像清除列表一样简单。您说“考虑使用 RedisListsStorage”……这是否意味着与 cassandra 结合使用?这可以工作,但宁愿避免拥有多个数据库(我仍在使用 redis,但用于临时数据)。
    • 是的,我的意思是 Redis 用于计数器,Cassandra 用于提要
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2019-08-07
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多