【问题标题】:permanent storage of PHP variables?PHP变量的永久存储?
【发布时间】:2012-12-25 21:00:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • Is it possible to store permanent variables in PHP?你对会话有什么了解吗?还是mysql?
  • 什么意思?我明确提到了为什么数据库(例如 MySQL)不可用,并且我看不到如何在此处应用会话(因为会话中的变量仅对该会话的用户可用,AFAIK)。
  • 如果您暂时搁置该字典的存储和加载问题:如果该字典存在(在代码中,例如数组或对象)将采用哪种形式,请提供编码用法的样子。这应该使事情更清楚。例如。为什么每个单词 4kb?
  • 您希望用户设置最终且不可修改的变量吗?
  • @hakre,4kb 将是特定文件系统的块大小。每个文件消耗的实际空间始终是块大小的倍数,我假设 OP 每个文件需要 1 个字。

标签: php variables storage


【解决方案1】:

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

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

【讨论】:

  • 是的,在内存中是要走的路。如果您使用正确的数据结构和良好的搜索算法,那么它应该会非常快。
【解决方案2】:

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

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

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

【讨论】:

  • 没错,这就是我需要的,但我以前从未听说过 memcached。谢谢!
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    实施具有适当索引的数据库解决方案,一切都会好起来的。

    【讨论】:

    • 更重要的是,假设从数据库中获取的代码是合理的,那么从数据库中获取1000个ITEMS应该是绝对没有问题的。例如这个页面:planetcatfish.com/catelog/family.php?family_id=4 从物种、属、科、my_fish 和图像表中获取,并生成一个包含 1150 个项目的页面。在我的机器上本地需要几分之一秒 - 将页面发送给您可能需要更长的时间,但这是另一回事。给 sql 相当数量的 RAM,它会很快。如果将整个数据库保存在内存中,则需要更多。
    • 我指的是数以千计的查询,而不是项目。我正在做一种回溯算法,每次我需要决定是否继续一个分支时,它都需要一个单独的字典查找。所以这真的是成千上万的查询,每次都有一个 1 项的返回值。
    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多