2013-02-12 185 views
1

可能是一个虚拟的问题,但我无法弄清楚。这是一个概念问题。 我有一个网络平台,用户用大约500个同时连接存储很多东西。 在性能/安全性的名词,什么是最好的办法:连接到MySQL数据库

  • 用户每次我需要抓住从它(他每次去BTW另一个页面的时间)的数据连接到数据库,并关闭后的连接我抓住他们? 或者
  • 在登录同时连接用户的数据库,保持连接到数据库(如在$ _SESSION)并杀死在注销连接? 或者
  • 登录时,几乎抢一切从用户表,它的配置文件之一和所有其他的人,把他们在$ _SESSION并且只有需要更新/插入时,连接到数据库?

连接本身非常耗时,这就是为什么我正在寻找最佳方法。 但在另一方面,我一直听说“总是尽快关闭数据库连接”

感谢您的帮助。

+0

如果'$ _SESSION'是PHP的参考,你不能在PHP会话中存储资源。 – 2013-02-12 12:19:23

+0

没错;-)。忘了这个。 – fperr 2013-02-13 11:03:31

回答

0

我会说这在很大程度上取决于你的具体使用情况和您的服务器设置。唯一可以肯定的方法是尝试不同的解决方案并分析代码。

通常,当您分析您的第一选择的解决方案,你会得到的是什么造成的延迟,什么是等待/处理时间贡献最大的提示。这样你就可以更好地猜测下一个(和改进的)解决方案。

一般是延迟计算,然后缓存尽可能多的一个好方法。对于Web应用程序来说,像Memcached或Redis这样的非关系型数据库就是事实上的标准(至少在我的经验中)。

如果你把你的数据库连接打开的,你应该知道,作为你的数据库设置为处理你只能运行尽可能多的并发查询。尽快关闭连接可以保持数据库并发性。 如果连接建立引入了很多延迟,也许您应该考虑一下抓取所有相关数据并缓存它们。唯一可以确定的方法是分析您的应用程序。

更新:

感谢您的答复。我会分析这个看看有什么更好的。 我会看看MemCached。我想稍后再看,但我想 这将是正确的时间。 - fperr

我最初也被MemCached拖延了,但它根本不复杂。它用作(散列)地图/字典,人们通常只是将会话数据保存在MemCached实例上,并通过会话ID或类似的东西将其索引。

祝你的项目:)

+0

感谢您的回复。我会分析这个看看有什么更好的。我将看看MemCached。我想稍后再看,但我想这将是正确的时机。 – fperr 2013-02-13 11:04:04

+0

@fperr您是否熟悉Web分析/基准测试工具?我个人使用'ab' - Apache Benchmark,很多。 – 2013-02-13 11:28:01