我的应用程序功能与 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/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request