4

是否可以在 PHP 中存储永久变量,即最终不可修改的变量,但所有请求页面的用户都可以读取这些变量?

例如,我需要在页面上使用字典,从一个大的(不变的)单词列表开始。做这个的最好方式是什么?

  • 在每次页面加载时即时将单词列表转换为树完全浪费计算资源,并且每次页面加载需要几秒钟的时间。
  • 将树作为子文件夹放入文件系统中并使用file_exists()速度足够快,但每个单词使用 4KB,这完全浪费了磁盘空间。
  • 将单词放入数据库是行不通的,因为每次加载页面时我需要进行数千次查找。

存储这本字典的正确方法是什么?

4

4 回答 4

5

memcached 在 php 中非常流行,作为一种将内容保存在内存中的方式,许多进程可以访问这些内容 http://php.net/manual/en/book.memcached.php

类似的解决方案可能是使用 sqlite 共享内存数据库 http://www.sqlite.org/inmemorydb.html

于 2012-12-25T21:10:08.900 回答
2

我的理解是,您的页面应该包含一个用于不变单词列表的字典。如果单词列表是不变的,并且结果字典也是不变的,那么为什么不缓存页面的全部内容呢?这将为所有用户提供恒定的访问时间。

此用例的一个常见模式是将单词列表计算为一个键,适合在诸如memcached之类的数据存储中查找。性能对您来说似乎很重要,在这种情况下,一次读取往返数据存储,几乎不需要任何处理来显示页面。

如果用户可以与单词列表交互,那将是使缓存页面无效的时候了。同样,需要对数据存储进行一次写入往返。

于 2012-12-25T21:26:17.877 回答
1

我认为像 MongoDB 这样的 NoSQL 数据库非常适合您的需求。更多信息:

于 2012-12-25T21:15:07.510 回答
0

处理“每次负载数千次查找”的数据库有什么问题?这就是它的设计目的,你知道的。

实施具有适当索引的数据库解决方案,您会没事的。

于 2012-12-25T21:21:25.043 回答