【问题标题】:How to store PHP Trie for all later uses?如何存储 PHP Trie 以供以后使用?
【发布时间】:2017-11-28 02:26:05
【问题描述】:

我正在用 PHP 设计一个涉及 Trie 数据结构的应用程序。

为了节省时间的前缀搜索,我使用的是 Trie。

我正在使用数据库中的记录构建 Trie。

现在,数据库有数百万条记录。因此,对于每个新的用户请求,每次都创建 Trie 然后在其中搜索是不可行的。

相反,我可以只创建一次 Trie 并以某种方式存储此信息,这样就不必为每个新用户请求重新创建它,然后可以立即完成搜索。是否有某种方式可以使用 PHP 缓存创建的 Trie(不仅针对一个用户会话,而且针对所有用户请求)?

任何帮助将不胜感激。

【问题讨论】:

    标签: php data-structures trie


    【解决方案1】:

    您有几个标准选项。

    将数据库结果缓存到内存中,使用像memcached这样的简单缓存

    使用Redis 进行缓存,或许可以利用它的一些额外功能。这可能涉及一个过程,您将数据加载到 REDIS 中的结构中,并让您的 trie 搜索代码直接针对 Redis 而不是数据库结果集。

    在任何一种情况下,您都会将结果缓存一段可接受的时间,并且由于数据库结果将以某种形式存储在内存中,因此不会对 RDBMS 施加任何负载。

    在您的相关问题中,您指出变量的原始序列化形式的大小约为 200mb。这完全在 Redis 的最大对象大小 (512mb) 范围内,但对于 memcached 可能会有问题。这些天,我个人将 Redis 用于大多数应用服务器缓存。

    【讨论】:

    • 如果可能,我需要使用更简单的解决方案。如何在不需要任何外部解决方案的情况下使用 PHP 本身来做到这一点?示例:文件、会话变量、序列化/反序列化、json_encode、var_export 等
    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 2016-06-26
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多