数据库信息:将其存储在会话中或在每次请求时重新创建它?

时间:2015-02-13 19:22:46

标签: sql-server database web

我有一个网站,可以从数据库中检索并显示大量信息。该信息在两个不同的请求之间也几乎相同。

我想知道它是否更好:

  1. 将此信息存储在会话变量中(可能有很多信息)
  2. 在每个请求中重新创建它(即使它几乎相同并且可能需要一些时间来创建)
  3. 当有很多用户时,我担心可扩展性。

    还有其他选择吗?

    琐碎的例子

    有一个页面,您可以在其中查看应用程序中每个用户的列表。在此页面上还有一个部分,您可以在其中编辑当前选定的用户。

    当您编辑所选用户时,您需要回发到服务器,该服务器将使用更新的用户列表和更新的所选用户信息重新加载整个页面。

    将用户列表存储在会话中还是从数据库中检索它?

1 个答案:

答案 0 :(得分:1)

没有一般规则,如果您需要解决性能问题,这是您决定要进行的优化。

在一般情况下,我不会缓存,因为缓存会增加复杂性(缓存管理),如果要显示最新的数据,则需要处理缓存失效。您可以决定在给定的时间后失效,或者设置一个标志以在正确的位置从数据库中重新获取。

假设在您的示例中您有用户列表,并且您的目标是始终显示最新的数据,我默认不会缓存它。任何现代的DBMS(mysql,postgresql等)都可能有一个缓存系统,它对于一般用例来说已经足够了。 但是,假设您正在显示一些统计数据,这些数据需要在具有数千行的表上进行多次连接的查询。并且假设这个数据不会在每小时基础上发生显着变化,我肯定会缓存它。

请记住,过早优化是万恶之源。但最终,通过查看您想要解决的问题,绝对是您只能自己回答的问题。

ps:如果您决定在会话中进行缓存,最好的办法是将PHP Session存储在memcached中(它是一个高性能的分布式内存对象缓存系统)。你需要安装memcached,然后修改你的php.ini设置,here一个快速的教程供参考。