如果我想构建一个 RSS 阅读器,那么在 MySQL 中插入所有提要对于数据库服务器来说太重了,CPU 密集型。
那么拥有一个带有 Apache 的 Redis 或 cassandra、MySQL 服务器会有助于减少 mysql 服务器的负载吗?
如果我想构建一个 RSS 阅读器,那么在 MySQL 中插入所有提要对于数据库服务器来说太重了,CPU 密集型。
那么拥有一个带有 Apache 的 Redis 或 cassandra、MySQL 服务器会有助于减少 mysql 服务器的负载吗?
简短的回答:是的,但它会增加复杂性。
长答案:如果 MySQL 对您来说不够快(我会首先验证这实际上是在添加 Redis 的复杂性之前的情况),您可以将一些更频繁的更新/插入负载放到 Redis 上。有几种方法可以做到这一点(您不必在这里做所有事情,但每件事都会帮助您减轻负担):
每个用户都有一个 Redis 发布/订阅频道。每当将某些内容添加到用户的提要中时,直接发布到它。让 RSS 客户端订阅此频道,因此如果用户打开了他或她的 RSS 阅读器,他们应该只订阅他们的 pub/sub 频道以获取更新,而不是从 MySQL 中阅读。
批量插入 MySQL:如果您的写入量很大,请不要忍受每次应该向提要添加新内容时插入 MySQL 的网络流量、锁定/解锁和查询开销。相反,将所有新项目保存在每个用户的缓存中。然后清空缓存并每隔 n 秒执行一次批量写入。将 n 设置为您的用例所需的最高值。
缓存每个用户的提要:如果您的读取量非常高,尽管 #1,请在 Redis 中缓存每个用户的最后 n 个项目 m 秒(将 n 和 m 设置为适合您的用例)。缓存这些的最佳方式很可能是作为字符串。如果由于某种原因您需要更多动态访问,请使用列表。只有当他们的缓存不可用时,用户才应该从 MySQL 读取。