【问题标题】:Is using Redis right for this situation?在这种情况下使用 Redis 合适吗?
【发布时间】:2012-07-04 02:33:04
【问题描述】:

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

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

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

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

交货速度至关重要。

【问题讨论】:

  • 非常大有多大(千/十亿)?你有更多关于你的数据模型的信息吗?你在记录什么?您的请求主要是阅读吗?如果没有更多信息,很难回答您的问题。
  • Redis 可以处理这种级别的请求,但您可能需要在 Rails 应用程序之前将它放在中间件中。
  • 我不熟悉 Redis,但我听说很多人都在部署这种类型的解决方案,而且它似乎可以工作,所以听起来很合理。
  • lebreeze,你能告诉我更多关于这方面的信息吗? rails 应用之前的中间件?我想我应该提到我打算在heroku上部署它。可以说,“非常大”是指最多大约 500 万条记录;每个都有一个用户名和几个属性,控制器将处理这些属性来决定用户得到什么响应(响应本身也会很小 - 肯定低于 1 千字节,与记录大小大致相同。)跨度>

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


【解决方案1】:

实际上,仅使用 Redis 就可以创建整个应用程序。你想做的是研究 Redis 的设计模式。一个好的起点是 Karl Seguin 的 PDF,名为 The Little Redis book

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

此外,如果计划得当,您不需要将其他持久性存储(例如 Mongo 或 MySQL)与 Redis 结合使用,因为 Redis 本身就是持久性的。您只需要选择一个好的分片/复制策略,让您能够足够灵活地应对未来的系统变化。

【讨论】:

  • 感谢您的提示,我正在阅读它。不久前有人告诉我,您不应该将无法承受丢失的数据放入 Redis。您的回答表明您不同意这一点?
  • 是的。 Redis 中的数据与 MySQL 中的数据一样容易丢失。也就是说,在损坏或崩溃的情况下。但我能理解你的疑虑来自哪里。 Salvatore Sanfilippo 本人(Redis 的发明者)写了一篇很棒的文章 demystifies what persistence in Redis means。它提供了对 Redis 中的两种持久性模型(快照和 AOF)以及 Redis 持久性的数据安全性的深入了解。
【解决方案2】:

我认为您所询问的堆栈肯定是一个非常好的解决方案,并且经过了对高性能站点的相当考验。 Trello(由创建此站点的同一个人创建)使用类似的架构以及 craigslist。

Trello Tech Stack Writeup

Craigslist also uses this

Redis 速度很快,除了正常的失效类型功能外,它还具有出色的 pub/sub 机制,这使其成为大多数情况下的高级缓存。 Mongo 是一个我非常熟悉的数据库,我认为它非常适合各种数据存储目的,并且是一个可靠的企业数据库,可以很好地扩展,保护数据完整性并检查 SLA 企业术语清单中的一堆标记

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

所以想想这是否有必要,但记住简单总是赢。 Redis/Mongo 非常强大,但要掌握两个数据存储并管理它们也需要更多的工作。

谢谢, 普拉西斯

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 2013-05-16
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多