1

我遇到了这个问题,我只是不知道该怎么做,所以说我保留了这些用户操作:

  • 喜欢
  • 评论
  • 分享
  • 上传

依此类推,列表围绕20动作,现在我想出的最佳策略是创建一个单一的 CF,让我们调用它user_actions,然后使用复合行(我认为这就是它们的调用方式)。

所以行将由 组成user_id:action,现在我想有些人会问为什么不将所有用户操作存储在一行中?好吧,这是我最大的问题,因为我希望用户可以选择用户想看到什么时候说他想检查他的朋友或他自己过去做了什么。

所以说用户想看看他的朋友喜欢什么,我需要做的就是得到所有这些喜欢的那一行,简单吧?

但是,如果用户想要查看everything(这是默认选项)怎么办,在这种情况下,我需要进行~20查询,我想这对一点流量来说是可以的,但是如果我每秒有 10 万次读取,那意味着 10 万次怎么办? * 20,听起来很可怕......

但我只是看不到任何其他方式,因为如果我将所有内容存储在一行中,当 cassandra 不支持时,我将如何查询单个操作WHERE

顺便说一句,我正在使用phpphpcassa图书馆。

4

1 回答 1

1

您最终将需要对操作信息进行分页。

此外,您还希望能够对按事件日期排序的数据进行分页,并过滤用户想要查看的操作类型。我建议如下:

  • 每个动作类型一行。
  • 键是 userId + actionType
  • 列名是 [dateinteger + EventId]
  • 列值是序列化为单个字符串的事件对象

您可以使用与用户选择的操作相对应的 userId + actionType 列表来查询数据。并切片列名称以对结果进行分页或按日期范围过滤。

我认为这种方法比对所有用户操作使用单行更好,因为您可以轻松地按日期对记录进行排序,还可以选择要查询的操作类型。使用单行,您必须在按操作类型或按日期对记录进行排序之间进行选择。

此外,这比为每个操作事件设置一行更好(IMO),因为您需要创建二级索引来正确查询数据。

于 2012-11-09T18:36:10.163 回答