Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话性能:数组与数据库表中的键?_Php_Database_Session - Fatal编程技术网

PHP会话性能:数组与数据库表中的键?

PHP会话性能:数组与数据库表中的键?,php,database,session,Php,Database,Session,与前一篇文章类似,我希望在一个小的webapp上实现用户偏好 目前,用户可以自定义大约10个字段(将来可能会更改) 对数据库进行初始查询并将这些首选项加载到会话数组中,或者只获取每页所需的首选项,这样做更有意义吗?目前,所有字段都不超过12个字符 目前,用户总数非常少(内部开发阶段),但将来可能会有数百或数千个给定实例的用户 我还没有亲自对这些问题进行过基准测试,目前还无法做到这一点(用户基数太小)。我认为基于会话的方法将是更好的解决方案(只要没有敏感的用户名/密码等信息)。毕竟,磁盘空间比多个

与前一篇文章类似,我希望在一个小的webapp上实现用户偏好

目前,用户可以自定义大约10个字段(将来可能会更改)

对数据库进行初始查询并将这些首选项加载到
会话
数组中,或者只获取每页所需的首选项,这样做更有意义吗?目前,所有字段都不超过12个字符

目前,用户总数非常少(内部开发阶段),但将来可能会有数百或数千个给定实例的用户


我还没有亲自对这些问题进行过基准测试,目前还无法做到这一点(用户基数太小)。

我认为基于会话的方法将是更好的解决方案(只要没有敏感的用户名/密码等信息)。毕竟,磁盘空间比多个数据库查找便宜得多


或者,您可以考虑使用类似于“如果性能成为问题”的方法。

我认为基于会话的方法将是更好的解决方案(只要其中没有敏感的用户名/密码等信息)。毕竟,磁盘空间比多个数据库查找便宜得多


或者,您也可以使用类似于“如果性能成为问题”的方法。

无论哪种方法都会影响磁盘。但是,提取会话数据的开销可能更小,因此仅使用一次mysql开销可能会更好。正如另一个人所建议的,memcached或其他一些堆表将是一种很好的方法,可以避免在后续页面加载时撞击磁盘,并允许您的解决方案在以后进行扩展,默认会话处理程序不会在服务器之间共享


顺便说一句,您可以使用httperf或AB或任何数量的其他解决方案自己对其进行基准测试,而无需等待用户群的增长。

无论哪种方式,您都在访问磁盘。但是,提取会话数据的开销可能更小,因此仅使用一次mysql开销可能会更好。正如另一个人所建议的,memcached或其他一些堆表将是一种很好的方法,可以避免在后续页面加载时撞击磁盘,并允许您的解决方案在以后进行扩展,默认会话处理程序不会在服务器之间共享


顺便说一句,您可以使用httperf或AB或任何数量的其他解决方案自己对其进行基准测试,而无需等待用户群的增长。

我喜欢的一种会话管理是内置的egroupware。在该系统中,每个首选项可由3个级别定义:

  • 强制偏好(超级用户决策,用户实际上看不到)
  • 默认偏好
  • 用户定义值
有了这样的东西,一个具有用户偏好的对象或数组就需要进行多次查询。它还可能受到长期cookies用户设置的影响

然后有一个兴趣是避免在每次请求时重复所有这些内容,并将最终结果存储在会话文件中是一个好主意。在安全性方面,我认为存储在会话文件中的数据和存储在数据库中的数据没有太大区别,都是服务器端的,有了一个好的管理员,您的会话不会在所有应用程序的相同目录中,您将有您的应用程序目录,没有问题

更进一步。通过使用会话存储的首选项定义,您可以通过修改defaut首选项或强制首选项来改变此会话。首选项将在会话期间可用。如果这在您的案例中是一个问题(大多数情况下这不是问题),那么解决方案是应用程序级缓存,在缓存中存储数据的方式上使用良好的标记系统。然后,您可以根据需要删除所有标记的数据

应用程序级缓存(如APC缓存或memcached)将为您提供一种快速有效的数据存储方式,使用它来保存您的用户首选项至少是一个好主意,可以在多个应用程序服务器之间共享此数据,而无需使用NFS来共享会话文件。但在这样一个大的解决方案中,真正的解决方案是使用这些缓存来存储会话,而不是文件。同样,您可以使用数据库存储会话

最后一点是数据库会话存储,您可以想象,用于构建首选项的所有查询现在都包含在从数据库检索会话的唯一查询中(在用户会话的第一个http查询之后,该查询包含您的首选项)。但这是一个糟糕的解决方案,对于大多数数据库来说,因为会话会得到很多写事件,对于像MySQL这样的数据库来说,在一个表中有很多insert/update查询可能会导致很大的性能问题(锁、查询缓存刷新等)。因此,文件系统和缓存在管理会话方面更好。数据库很好,它们以一种安全的方式保存长期数据,会话存储不是同一个问题,您需要的东西非常快,您可以在不太担心的情况下释放(因为它只会破坏用户会话)


正如你们所看到的,当我想到会话时,我想到的是比数据库更快的东西。如果您的系统没有提供比数据库更快的会话方式,我个人认为这是系统故障,这将是系统管理员的工作。在应用程序侧,您应该考虑像数据库一样快的会话。

< P>我喜欢的一个会话管理是在EGROMPUWE中构建的会话管理。在该系统中,每个首选项可由3个级别定义:

  • 强制偏好(超级用户决策,用户实际上看不到)
  • 默认偏好
  • 用户定义值
有了这样的东西,一个具有用户偏好的对象或数组就需要进行多次查询。它还可能受到长期cookies用户集的影响