【问题标题】:Apply SQL Query to in-memory PHP Object or Array将 SQL 查询应用于内存中的 PHP 对象或数组
【发布时间】:2015-10-04 09:13:06
【问题描述】:

用例:

我正在构建一个用户可以使用 SQL 搜索记录的网站。但是 - 他们还应该能够保存搜索并在新提交的记录符合条件时收到通知。

这不是一个购车网站,而是例如:用户在 90291 邮政编码内搜索一辆 1967 年的福特野马,配备 289 V8 发动机。找不到合适的,但他们希望在 2 周后提交匹配的汽车时收到通知。

当然,每次将新车添加到数据库时,我都可以检索所有用户搜索查询,并对数据库中的所有汽车运行所有这些查询。但这是不可扩展的。

每次提交新车时,我都不想用每个“搜索”查询搜索整个“汽车”表,我只想检查内存中的单个“汽车”对象/数组,以及现有的用户查询。

我在 PHP 中使用 Laravel 和 Eloquent 执行此操作,但我与实现无关,欢迎任何理论方法。

谢谢,

克里斯

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    我宁愿按计划的时间间隔分批运行保存的搜索,而不是每次将记录附加到表时都运行它们。

    【讨论】:

      【解决方案2】:

      这取决于您如何构建内存缓存。

      无论是什么缓存,它通常都依赖于键值对。您正在使用的缓存将是相同的: http://laravel.com/docs/4.2/cache

      所以说到底,一切都是为了使用正确的键。如果要基于汽车更新缓存的对象,则需要以某种方式制作密钥,以便您可以使用汽车作为(部分)密钥从缓存中检索所有对象。通常,您会为 userId+carId+xyz 之类的键连接多个内容,然后对其进行 MD5 校验和。

      所以这就是你问题的答案。但是一般我不会推荐这种方法。听起来您的搜索结果更像是持久的长期可用结果。因此,您可能希望将它们存储在更永久的位置,例如简单的表格。然后,您可以使用标准 SQL 工具来连接表并找出需要的内容。

      【讨论】:

        【解决方案3】:

        我的方法是使用 MySQL 存储过程并使用 https://dev.mysql.com/doc/refman/5.1/en/event-scheduler.html 检查配置以了解可能的更改,然后标记它们存储某种脏指标,然后由 php 脚本检查,该脚本将按需执行或来自 cron 等定期。 您可以使用触发器简单地标记事件调度程序有工作要做。但是,您使用的方法有许多状态变量开始变得丑陋,但是据我所知,此用例似乎并没有整齐地映射到排队架构中。

        【讨论】:

          【解决方案4】:

          一种可能的方法是在 SQL 中使用触发器来发送通知。以下是与之相关的内容:1s link2nd link

          【讨论】:

            猜你喜欢
            • 2023-04-04
            • 2012-08-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-20
            • 2020-05-22
            相关资源
            最近更新 更多