数据库信息:将其存储在会话中还是在每次请求时重新创建?
Database Information : Store it in session or recreate it on every request?
我有一个网站可以从数据库中检索和显示大量信息。该信息在 2 个不同请求之间也可能几乎相同。
我想知道是否更好:
- 将此信息存储在会话变量中(可以有很多信息)
- 根据每个请求重新创建它(即使它几乎相同并且可能需要一些时间来创建)
当有很多用户时,我担心可扩展性。
还有其他选择吗?
简单的例子
有一个页面,您可以在其中查看应用程序中每个用户的列表。在此页面上还有一个部分,您可以在其中编辑当前选定的用户。
当您编辑选定的用户时,您需要post返回服务器,服务器将重新加载整个页面,其中包含更新的用户列表和更新的选定用户信息。
将用户列表存储在会话中还是从数据库中检索?
没有通用规则,这是您在需要解决性能问题时决定进行的优化。
一般情况下,我不会缓存,因为缓存增加了复杂性(缓存管理),如果你想显示最新的数据,你需要处理缓存失效。您可以决定在给定的时间后失效,或者通过设置标志以在正确的位置从数据库中重新获取。
假设在您的示例中您有用户列表,并且您的 objective 是始终显示最新数据,默认情况下我不会缓存它。任何现代 DBMS(mysql、postgresql 等)都可能有一个足以满足一般用例的缓存系统。
但是假设您要显示一些统计数据,这些数据需要对具有数千行的表进行多次连接查询。假设此数据每小时不会发生显着变化,我肯定会缓存它。
请记住,过早优化是万恶之源。但最终,通过查看您想要解决的问题,这绝对是您只能自己回答的问题。
ps:如果您决定在会话中进行缓存,最好的办法是将 PHP 会话存储在 memcached(它是一个高性能的分布式内存对象缓存系统)中。您需要安装 memcached 然后修改您的 php.ini 设置,here 一个快速教程供参考。
我有一个网站可以从数据库中检索和显示大量信息。该信息在 2 个不同请求之间也可能几乎相同。
我想知道是否更好:
- 将此信息存储在会话变量中(可以有很多信息)
- 根据每个请求重新创建它(即使它几乎相同并且可能需要一些时间来创建)
当有很多用户时,我担心可扩展性。
还有其他选择吗?
简单的例子
有一个页面,您可以在其中查看应用程序中每个用户的列表。在此页面上还有一个部分,您可以在其中编辑当前选定的用户。
当您编辑选定的用户时,您需要post返回服务器,服务器将重新加载整个页面,其中包含更新的用户列表和更新的选定用户信息。
将用户列表存储在会话中还是从数据库中检索?
没有通用规则,这是您在需要解决性能问题时决定进行的优化。
一般情况下,我不会缓存,因为缓存增加了复杂性(缓存管理),如果你想显示最新的数据,你需要处理缓存失效。您可以决定在给定的时间后失效,或者通过设置标志以在正确的位置从数据库中重新获取。
假设在您的示例中您有用户列表,并且您的 objective 是始终显示最新数据,默认情况下我不会缓存它。任何现代 DBMS(mysql、postgresql 等)都可能有一个足以满足一般用例的缓存系统。 但是假设您要显示一些统计数据,这些数据需要对具有数千行的表进行多次连接查询。假设此数据每小时不会发生显着变化,我肯定会缓存它。
请记住,过早优化是万恶之源。但最终,通过查看您想要解决的问题,这绝对是您只能自己回答的问题。
ps:如果您决定在会话中进行缓存,最好的办法是将 PHP 会话存储在 memcached(它是一个高性能的分布式内存对象缓存系统)中。您需要安装 memcached 然后修改您的 php.ini 设置,here 一个快速教程供参考。