- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的应用程序功能与 Cassandra 集成时遇到了一些问题。我正在尝试为我的用户
创建一个内容提要。用户可以创建帖子,而帖子又具有字段 user_id
。我将 Redis 用于整个社交图,而将 Cassandra 列仅用于对象。在 Redis 中,用户 1 有一个名为 user:1:followers
的集合,其中包含他/她的所有关注者 ID。这些关注者 ID 对应于用户表中的 Cassandra ID 和帖子表中的 user_id。
我的目标最初是简单地将此 Redis 集中的所有 user_id
插入一个查询,该查询将使用 FROM posts WHERE user_id IN(此处为 user_ids)
并获取二级索引 user_id
中的所有帖子。问题是 Cassandra 故意不 support二级索引中的 IN
运算符,因为该索引将强制 Cassandra 在其所有节点中搜索该值。我只剩下两个选项:要么为帖子 ID 创建 user:1:follow_feed
的 Redis 列表,然后在单个查询中搜索 Cassandra 的主索引以查找这些帖子,要么保留它我现在的方式是为 user:1:follower
集合中的每个 user_id
运行单独的查询。
我真的反对第一个选项,因为我已经在 Redis 中拥有大量图形数据,而这个选项会为每个用户添加一个新列表。第二种方式更糟糕。我会给 Cassandra 带来巨大的读取负载,并且需要很长时间才能对一组 ID 运行单独的查询。据我所知,我有点进退两难。有什么方法可以查询多值二级索引吗?如果没有,与更多 Redis 列表或多个 Cassandra 查询的选项相比,是否有更有效的方式来加载这些内容提要(RAM 和速度方面)?提前致谢。
最佳答案
在不知道 posts 表(最好是其他表)的架构的情况下,很难提出任何有用的建议。
我不清楚为什么您需要将 user_id 作为二级索引,而不是您的主键。
一般来说,对创建它的用户的帖子等内容进行键控非常有用,因为它允许您非常高效地执行检索所有帖子(可选地在给定范围内,假设它们按时间顺序排序)等操作。
使用 Cassandra,如果您发现一个表可以有效地回答您想要执行的一些查询而不是其他查询,您通常最好对该表进行非规范化并创建另一个具有不同结构的表以保留您的查询到单个 CQL 分区和节点。
CREATE TABLE posts (
user_id int,
post_id int,
post_text text,
PRIMARY KEY (user_id, post_id)
) WITH CLUSTERING ORDER BY (post_id DESC)
该表可以回答如下查询:
select * from posts where user_id = 1234;
select * from posts where user_id = 1 and post_id = 53;
select * from posts where user_id = 1 and post_id > 5321 and post_id < 5400;
post_id 上的反向聚类是通过将最近的帖子放置在 sstable 中物理分区的开头来使检索最近的帖子最有效。
在该示例中,user_id 是一个分区列,意味着“所有具有此 user_id 的 cql 行将被散列到同一个分区,因此是相同的物理节点,最终是相同的 sstables。这就是为什么可以
实际上,这变成了 HashMap 查找的 HashMap 。不过,一个主要的警告是,在使用分区和集群列时,您始终需要在查询中从左到右提供所有列,不要跳过任何列。因此,在这种情况下,这意味着您无法在不知道 post_id 所属的 user_id 的情况下检索单个帖子。这在用户代码中是可寻址的(通过存储反向映射并在必要时进行查找,或者通过将 user_id 编码到在您的应用程序周围传递的 post_id 中),但绝对是需要考虑的事情。
关于 Cassandra /雷迪斯 : Way to create feed without Cassandra 'IN' secondary index?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23456079/
我是 MySQL 的新手,我在尝试找出如何解决以下问题时遇到了麻烦: 1 - 我有一个表格,其中包含一些人的数据,包括姓名、数字代码和每个人的类别。 假设“JOHN DOE”是其中之一,他的编号是“1
Secondary NameNode 失败时 hadoop 集群会发生什么。 Hadoop 集群被称为单点故障,因为所有元数据都由 NameNode 存储。 Secondary NameNode呢,如
我正在运行一个由 3 个成员(数据中心 A 中的成员 1、数据中心 B 中的成员 2 和成员 3)组成的传统 MongoDB 副本集。member1 是当前的 PRIMARY,我通过 rs.add()
这是我对 GTK 理解的延续:: 从 Main 的 pthread 下调用 GTK_MAIN() 是否正确?示例代码:: 从 main 我调用 dispInit(argc, argv); 我从 g
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: What does the second argument to $() mean? 有一段时间我使用 jQuery
这个问题在这里已经有了答案: Getting hold of the outer class object from the inner class object (7 个答案) 关闭 6 年前。
both 的文档几乎完全相同,所以我发现很难看出它们之间的区别。基于此Q&A ,唯一的区别是 [...] that checkpoint node can upload the new copy of
人们是否通常将表中的每一列都设为二级索引,以防万一客户决定使用任一字段来搜索记录? 搜索是否先通过二级索引,然后到主键?从而缩小到请求的数据? 如果您已经有一个主键列,那么使用二级索引有什么意义? 最
我是 Redis 新手。我在 Sentinel 上阅读了他们的文档和 Replication他们在其中讨论了副本如何尽可能地与主服务器保持同步,但如果主服务器在成功写入后发生故障,副本仍然有可能无法接
刚刚开始使用 Kotlin,您可以在其中拥有一个primary 构造函数和一个secondary/strong> 那些。这个问题听起来很简单,但我找不到答案(我已经阅读了文档中的“构造函数”部分) -
我正在尝试基于已经存在的数据结构(我无法修改并且它本身不是图形)构建图形数据结构。我想我对如何构建与图形本身有关的大部分结构有所了解,但现在我必须引用原始数据结构来获得一个小的“比较”功能,并且很难对
这有什么算法吗?例如 twitter.com zamg.ac.at 是顶级域名 和 pic.twitter.com 是二级域名 最佳答案 定义: 不,据我所知是这样的: 示例:pic.twitte
我正在使用 jQuery 循环访问文档中的某些元素。这些元素的类型为 与类 .input-row .一些元素也可以有一个二级类(例如 .input-area )。 我使用 $(".input-row"
我需要以编程方式设置辅助进度条颜色。 我只看到方法 ProgressBar.setProgressDrawable(drawable) 用于设置主色,但没有设置副色的方法。 我该怎么做? 最佳答案 P
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我创建了一个表,如下所示,其中包含 Em 的全局二级索引(代表电子邮件)。 TableName : "Users", KeySchema: [ { AttributeN
Flask-Nav 允许 dynamic construction ;但是,我不知道如何通过将字典或列表传递给构建导航栏的函数来做到这一点。 @nav.navigation def top_nav()
客户如何能够同时使用他们注册时使用的主要电子邮件地址以及次要电子邮件地址客户属性字段登录? (我创建了一个客户属性文本字段 secondary_email)。 假设它与 customerEntity
我想使用 GNU Make 的特殊目标 .SECONDARY 来指定在作为中间文件创建时不应删除特定模式规则的结果。 .PRECIOUS 适用于模式,但奇怪的是,不适用于 .SECONDARY。我不想
在我的 iPhone 应用程序中,我需要连接到网络服务器,因为这可能需要一些时间,我使用的线程如下: [NSThread detachNewThreadSelector:@selector(sendS
我是一名优秀的程序员,十分优秀!