在这种情况下使用Redis是否正确?

时间:2012-07-03 15:52:08

标签: ruby-on-rails ruby performance mongodb redis

我打算创建一个拥有大量用户的应用程序(Rails) - 它会从小规模开始,但我希望能够处理一百万或更多。

我想构建一个能够每秒处理2500多个请求的系统。每个请求都需要写入(用于记录目的)以及从用户索引的巨大用户列表中读取(我建议将MongoDB用于此目的),并将读取的结果发送回用户

我有点不清楚mongo将如何处理读取和写入,所以我有这个想法使用Mongo来永久存储记录,然后每次服务器启动时将它们加载到Redis中以便更快地访问所以除了写作之外,Mongo不需要处理任何事情。

这听起来合理还是对Mongo和Redis的大量滥用?

交付速度至关重要。

3 个答案:

答案 0 :(得分:3)

实际上,只使用Redis创建整个应用程序是可能的。您想要做的是研究Redis的设计模式。一个好的开始是Karl Seguin撰写的PDF The Little Redis book

例如,使用Redis的哈希来保存所有用户的信息。

此外,如果计划好,您不需要将另一个持久存储(例如Mongo或MySQL)与Redis结合使用,因为Redis本身就是持久性的。您只需要选择一个良好的分片/复制策略,使您能够灵活地进行未来的系统更改。

答案 1 :(得分:2)

我认为您所询问的堆栈肯定是一个非常好的解决方案,而且对于高性能网站来说,这是一个非常好的战斗测试。 Trello(由创建此网站的同一人创建)使用类似的架构以及craigslist。

Trello Tech Stack Writeup

Craigslist also uses this

Redis速度快,除了普通的失效类型功能外,还有一个很棒的发布/订阅机制,使其成为大多数人的优秀缓存。 Mongo是一个我非常熟悉的数据库,并认为它非常适合各种数据存储目的,同时也是一个可以很好地扩展,保护数据完整性并在SLA企业行话清单中检查一堆标记的可靠企业数据库< / p>

我认为这是一个很好的组合,但问题应该是我甚至需要这个。对于你的负载我认为Mongo本身可以很好地处理这个(并提供数据完整性),如果你真的想要你可以在具有足够内存的服务器上运行它以确保你的数据集适合内存(非正规化和良好的模式设计是关键) 。 Foursquare专门在Mongo上运行。

所以想想如果这是必要的,但记住简单总是胜利。 Redis / Mongo功能非常强大,但掌握两个数据存储并管理它们还需要做更多的工作。

谢谢, Prasith

答案 2 :(得分:1)

正如其他人所说,使用单一服务对我来说更有意义。有理由将记录数据保存在内存中。我尝试使用简单的东西,如果可能的话使用日志文件,或者如果需要分发写入,则使用Scribe或Flume。