Model 针对通知功能的Cassandra数据模型设计

Model 针对通知功能的Cassandra数据模型设计,model,cassandra,Model,Cassandra,需要一些关于通知数据模型设计的帮助。因此,我想使用Cassandra,并有一个网页,我想在其中为用户存储通知f.e.: 收到来自的消息 用户xyz为您的照片投票 等等 用户必须获取最近通知的范围并删除单个通知。所以我需要一个最佳的模式(50%的读取和50%的写入??) 下面是我的想法。。。(您认为按时间戳排序的键如何): 真的提前谢谢了 Tom我假设“通知”是您的CF,“john”、“anna”等是行键 假设每个通知的数据相对较小或从不需要更新,我建议您使用列名的时间戳,并将整个序列化通知(

需要一些关于通知数据模型设计的帮助。因此,我想使用Cassandra,并有一个网页,我想在其中为用户存储通知f.e.:

  • 收到来自的消息
  • 用户xyz为您的照片投票
  • 等等
用户必须获取最近通知的范围并删除单个通知。所以我需要一个最佳的模式(50%的读取和50%的写入??)

下面是我的想法。。。(您认为按时间戳排序的键如何):

真的提前谢谢了

Tom

我假设“通知”是您的CF,“john”、“anna”等是行键

假设每个通知的数据相对较小或从不需要更新,我建议您使用列名的时间戳,并将整个序列化通知(可能作为json)放在列值中。这将使您能够非常高效地获取最后N个通知,并允许轻松删除单个通知

使用,获取查询和删除可能如下所示:

def get_notifications_for(user):
    cols = notifications_cf.get(user, column_count=10)
    return map(json.loads, cols.values())

def delete_notification(user, notification_timestamp):
    notifications_cf.remove(user, columns=[notification_timestamp])
我在这里假设您已将比较器设置为
LongType(reversed=true)
,这意味着如果您使用列名的时间戳,您的通知将按逆时间顺序存储。

我假设“通知”是您的CF,“john”、“anna”等是行键

假设每个通知的数据相对较小或从不需要更新,我建议您使用列名的时间戳,并将整个序列化通知(可能作为json)放在列值中。这将使您能够非常高效地获取最后N个通知,并允许轻松删除单个通知

使用,获取查询和删除可能如下所示:

def get_notifications_for(user):
    cols = notifications_cf.get(user, column_count=10)
    return map(json.loads, cols.values())

def delete_notification(user, notification_timestamp):
    notifications_cf.remove(user, columns=[notification_timestamp])

我在这里假设您已经将comparator设置为
LongType(reversed=true)
,这意味着如果您使用列名的时间戳,您的通知将按相反的时间顺序存储。

hmm。。。我又问了一个问题:在这个用例中,使用长列类型不安全吗?理论上,可以生成重复的列名。我正在与Hector&Java合作,并使用System.currentTimeInMillis()生成时间。当然,我可以更改为TimeUUID,但不确定是否必须更改。是的,如果您担心冲突,请使用TimeUUID。那会很好用的。当然可以。但是我使用的是Java和Hector客户端,所以我必须使用com.eaio.uuid.uuid-只有一个实现可以保证唯一性。但这只是UUID的一个问题。初始化对象后,无法获取时间值!!:)我必须在列的某个地方存储时间戳。我知道你是Python程序员,所以这不是你的情况。谢谢。嗯。。。我又问了一个问题:在这个用例中,使用长列类型不安全吗?理论上,可以生成重复的列名。我正在与Hector&Java合作,并使用System.currentTimeInMillis()生成时间。当然,我可以更改为TimeUUID,但不确定是否必须更改。是的,如果您担心冲突,请使用TimeUUID。那会很好用的。当然可以。但是我使用的是Java和Hector客户端,所以我必须使用com.eaio.uuid.uuid-只有一个实现可以保证唯一性。但这只是UUID的一个问题。初始化对象后,无法获取时间值!!:)我必须在列的某个地方存储时间戳。我知道你是Python程序员,所以这不是你的情况。非常感谢。