前几天,我的老板让我找到一种方法来提高 PHP 请求在使用Datatables进行搜索/过滤/排序时的性能(任何 CRUD 都会有同样的问题,但在我们的例子中,我们经常使用 Datatables)他试图说服我 PHP 应该能够像 Java 一样将对象保存在内存中(他来自 JSP),这样我们就可以根据需要操作对象,而不必每次都访问数据库。而且,我试图说服他 PHP 是根据请求生死存亡的,而且 PHP 不存在对象永久性之类的东西,至少与 Java 或 C# 处理它的方式不同。
我们使用 Datatables 将 Oracle 数据库中的记录列出给用户,使用我们创建的非常简单的自定义类来查询数据库并将结果发送到 DT 期望的对象中。然后他们可以根据需要对数据集进行过滤、搜索和排序。当我们谈论要查询数百万条记录的表时,每次排序或过滤时调用数据库都会对性能造成影响,然后每页限制为 10 条。
无论如何,我最终告诉他我会环顾四周,所以我环顾网络,找到了 memcache、APC、APCu,也环顾四周,找到了接近我需要但不完全在那里的答案。
Memcache 是基于服务器的,APC 基本上是 OPCache,而 APCu 看起来或多或少是我需要的,但是随着请求的增多,它变得碎片化并且速度变慢(或者人们这么说)。
我只需要一种方法来将数据集保留一段时间,以便用户可以按 10 片(或他们选择的任何内容)获取记录列表,只要它不是整个数据集,因为客户端不应该保持数百万记录只是为了好玩......)。我不期望 Facebook、Amazon 或 Google 的速度,但我需要超过 30 秒的请求才能过滤一次只显示 10 条记录的数据集......
顺便说一句,在缓存方面我是个菜鸟。我已经使用 PHP 工作好几年了,我知道很多,但是当谈到缓存解决方案时,我不知道我在说什么......
我能得到的任何帮助将不胜感激。
编辑:不,不是这个的副本...问题本身可能听起来像另一个问题,但问题绝对不一样。我需要一种简单但有效的方法来缓存这些东西,而且我的要求很广泛。有了基于文件的缓存,就有了管理这些文件的完整概念。用户可能只加载一次列表然后离开到另一个页面,他们可能使用不同的过滤器多次加载它,然后他们可能决定在那里挂一段时间,然后再次搜索。基于文件的可能不是这里的解决方案......而且一个简单的“看看这个问题,他们有你可能想要的东西”就足够了......尽管对 StackOverflow 社区应有的尊重,我觉得这很棒,我觉得有些人们很快就触发了,在标记为重复之前,他们甚至似乎都没有尝试阅读甚至理解描述,