Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉数据模型改进_Cassandra_Data Modeling - Fatal编程技术网

Cassandra 卡桑德拉数据模型改进

Cassandra 卡桑德拉数据模型改进,cassandra,data-modeling,Cassandra,Data Modeling,我遇到了这个问题,我就是不知道该怎么办,所以假设我保留这些用户操作: 喜欢 评论 分享 上传 以此类推,列表中大约有20个动作,现在我想到的最好的策略是创建一个CF,我们称之为user\u动作,然后使用复合行(我想这就是它们的名称) 因此,行将由用户id:action组成,现在我想有些人会问,为什么不将所有用户操作存储在一行中?这是我最大的问题,因为我希望用户有一个选项来选择用户希望看到的,当用户说他想查看他的朋友或他自己在过去做了什么 所以,假设用户想看看他的朋友喜欢什么,我所需要做的就是

我遇到了这个问题,我就是不知道该怎么办,所以假设我保留这些用户操作:

  • 喜欢
  • 评论
  • 分享
  • 上传
以此类推,列表中大约有20个动作,现在我想到的最好的策略是创建一个CF,我们称之为
user\u动作,然后使用复合行(我想这就是它们的名称)

因此,行将由
用户id:action
组成,现在我想有些人会问,为什么不将所有用户操作存储在一行中?这是我最大的问题,因为我希望用户有一个选项来选择用户希望看到的,当用户说他想查看他的朋友或他自己在过去做了什么

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

但是,如果用户想查看
所有内容(这是默认选项),那么我需要进行
~20
查询,我想这可以通过一些流量实现,但是如果我每秒有100k次读取,这意味着100k*20,这听起来很可怕

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


顺便说一下,我正在使用
php
phpcassa
lybrary。

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

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

  • 每个动作类型一行
  • 键是userId+actionType
  • 列名为[dateinteger+EventId]
  • 列值是序列化为单个字符串的事件对象
您可以使用与用户选择的操作相对应的userId+actionType列表来查询数据。并对列名进行切片以对结果分页,或按日期范围进行筛选

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


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

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

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

  • 每个动作类型一行
  • 键是userId+actionType
  • 列名为[dateinteger+EventId]
  • 列值是序列化为单个字符串的事件对象
您可以使用与用户选择的操作相对应的userId+actionType列表来查询数据。并对列名进行切片以对结果分页,或按日期范围进行筛选

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


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

您可以按名称范围(即:BA…到BZ…)查询列并获得行切片。此外,您可以在一个请求中获得多个键。@1但这不是一回事吗?我的意思是,我仍然需要为每个人做20片action@lstern哦,我的天,你是对的,我怎么可能忘记多把钥匙。。。但我仍然不太了解他们,我的意思是我知道这会更快,但多少?这真的是正确的方法吗?您可能想知道,您可能需要对数据进行分页(20个最新的喜好,等等)。您可以按名称范围(即:BA…到BZ…)查询列,并获得行切片。此外,您可以在一个请求中获得多个键。@1但这不是一回事吗?我的意思是,我仍然需要为每个人做20片action@lstern哦,我的天,你是对的,我怎么可能忘记多把钥匙。。。但我仍然不太了解他们,我的意思是我知道这会更快,但多少?这真的是正确的方法吗?你可能会想,你可能需要分页数据(20个最新的喜欢,等等)是的,我认为这是正确的方法,正如我刚才在聊天中提到的,为分页制作正确的列切片有点困难,但是我想我可以从这里找到答案:)是的,我认为这是正确的方法,正如我刚才在聊天中提到的,要为分页制作正确的列片段有点困难,但我想我可以从这里找到答案:)