【发布时间】:2012-06-28 10:56:47
【问题描述】:
设置:
想象一个“类似推特”的服务,用户提交一个帖子,然后被许多(数百、数千或更多)用户阅读。
我的问题是关于构建缓存和数据库以优化快速访问和多次读取的最佳方式,但仍保留历史数据,以便用户可以(如果他们愿意)看到较旧的帖子。这里的假设是 90% 的用户只会对新内容感兴趣,并且偶尔会访问旧内容。这里的另一个假设是我们想要针对 90% 进行优化,如果较旧的 10% 需要更长的时间来检索,也可以。
考虑到这一点,我的研究似乎强烈指向使用缓存的方向 90%,然后还将帖子存储在另一个更长期的持久系统中。所以到目前为止我的想法是使用 Redis 作为缓存。优点是 Redis 速度非常快,而且它内置了 pub/sub,非常适合向多人发布帖子。然后我正在考虑使用 MongoDB 作为更永久的数据存储来存储相同的帖子,这些帖子将在 Redis 过期时被访问。
问题:
1. 这个架构能站得住脚吗?有一个更好的方法吗?
2. 关于在 Redis 和 MongoDB 中存储帖子的机制,我在考虑让应用程序执行 2 次写入:第一次 - 写入 Redis,然后立即可供订阅者使用。 2nd - 成功存储到 Redis 后,立即写入 MongoDB。这是最好的方法吗?我应该让 Redis 将过期的帖子推送到 MongoDB 本身吗?想过这个,但是找不到太多直接从Redis推送到MongoDB的资料。
【问题讨论】:
-
Redis 不会推送到 MongoDb。你必须自己做。或者只是同时写信给两个地方(如你所建议的那样)。
-
我总是先推送到更健壮的存储(在本例中为 MongoDB),或者像 Sergio 建议的那样,同时进行异步。永远不要反过来。
-
我的问题是,您是只将帖子的 ID 存储在缓存中,还是将整个帖子对象列表存储在缓存中?
标签: node.js mongodb caching redis