【发布时间】:2014-02-18 22:53:38
【问题描述】:
我有你的普通 PHP 应用程序(在 Windows 服务器上运行),其中包含表单和数据网格/列表,其中一些需要运行相当复杂的查询,我已经优化到了最大值,我怀疑有很多事情可以完成让他们跑得更快。鉴于依赖于结构的其他进程,我也没有更改数据库结构的选项。因此,由于缓存并没有真正在应用程序中被大量使用,这似乎是下一个合乎逻辑的步骤。
我最近阅读了有关分代缓存的文章,并提出了一个不错的机制来自动缓存我的应用程序中的查询。我现在的问题是我遇到了两个选项的大小限制,这两个选项似乎是合乎逻辑的选择。 WinCache 将您的总大小限制为 85MB,这不会削减它,而 memcached 将一个项目限制为 1MB,如果您有一个返回相当多的记录并且有很多记录的查询,这似乎并不多的领域。好的,确切地说,现在似乎 memcached 允许您设置更大的大小,但仅仅因为默认情况下它是 1MB 并且过去只允许这样做,这让我质疑我正在尝试做什么。
我的网格允许一次返回的最大记录数是 1000 条记录,因此这是可以存储在缓存中的最大记录数(当然,每条记录的字段会有所不同)。我知道大量用户可能意味着缓存会很快填满,但是并发用户的数量通常并不多,根据我的阅读,如果 memcached 内存不足,它只会删除最旧的缓存的项目,所以我认为存储更大的数据集没有很大的缺点,除非操作非常昂贵,但从我读过的内容来看,情况似乎并非如此。
总而言之,我想知道在 memcached 中存储更大的数据集是否是个坏主意(当然,我知道我不想在其中存储包含一百万条记录的查询)。如果这是一个坏主意,那么在检索这些数据集时,什么是缓存/提高性能的好选择?
【问题讨论】:
-
请问是什么问题?系统执行查询需要很长时间吗?您尝试从数据库中获取的数据有多大?
-
请问,为什么需要在一个网格上为一个用户返回 1000 条记录?
-
@Wesley 一些查询可能需要更长的时间,当负载增加时问题会更加复杂。数据本身并不总是那么大,有时只是检索数据的查询的复杂性会减慢速度。
-
@Gustavo 我个人认为没有必要,但管理层的一些人相信有些客户不想分页。我猜,所以称其为业务需求。我可以改用缓冲网格,但这种方法也有其自身的不便。
-
@Rocket04 当用户向下滚动时从 ajax 动态加载怎么样?事实是他们无法一次查看一千条记录,见鬼,甚至一百条。你可以实现一些东西来检索有限的记录,比如 100 条,然后随着用户滚动加载更多。