如何减少对我的数据库的请求?

时间:2011-02-14 18:33:55

标签: database performance

我有一个存储许多帖子的数据库,比如博客。问题是存在许多用户并且该用户同时创建了许多帖子。因此,当用户请求主页时,我向db请求此帖子。换句话说,我要获得我展示的帖子,以展示新的帖子。 如何避免此性能问题?

4 个答案:

答案 0 :(得分:0)

你做过任何类型的分页吗?如果不是数据库分页将是最好的选择...从前10个帖子开始,之后只返回用户从链接或其他输入请求它的完整列表。

答案 1 :(得分:0)

标准解决方案是使用类似memcached的东西将常见读取卸载到缓存层。因此,您可能决定每5分钟仅刷新一次主页,而不是使用相同的查询重复访问数据库。

答案 2 :(得分:0)

如果有经常请求的数据,您应该缓存它。尝试使用内存缓存(例如memcached)来存储可能在短时间内重新请求的内容。你应该有免费的RAM:尝试在你的前端机器上使用空闲内存,通常提供HTTP请求和应用模板的RAM密集程度较低。顺便说一句,您不仅可以缓存原始数据库记录,还可以缓存具有格式化和所有页面的现成页面。

如果一台机器无法合理处理您的负载,请尝试sharding your database。将一些用户的数据(帖子,评论等)放在一台机器上,将其他用户的数据放到另一台机器上等。这会使数据库级别的某些连接成为不可能,因为数据在不同的机器上,但是你加入了通常会并行化。

另外,看看面向文档的'NoSQL'数据存储,如(MongoDB)[http://www.mongodb.org/]。它例如允许您在一个记录中存储帖子和所有注释,并在一个操作中获取,无需任何连接。但是常规连接几乎是不可能的。可能混合使用SQL和NoSQL存储是最有效的(并且难以处理)。

答案 3 :(得分:0)

在下载缓存路径之前,请确保

  1. 检查逻辑(您是否正在执行不必要的步骤,是否可以使用缓慢变化的数据填充一些内存变量,从而减少数据库调用等)
  2. 确保数据库操作尽可能不同(返回的最小行数和列数)
  3. 将数据规范化为至少第3范式,然后选择性地使用适当的数据处理例程对非规范化数据进行非规范化。
  4. 规范化后,调整数据库实例(服务器性能,磁盘IO,内存等)
  5. 调整SQL语句
  6. 然后......

    1. 考虑缓存。即使无法缓存所有数据,如果您可以在一段合理的时间内获得相当大的百分比(并且这些值因站点而异),您可以从数据库服务器中删除负载,从而可以更快地提供其他查询