0

这是我昨天的问题的后续行动 - 有一条评论问我为什么不将“缓存”存储在数据库中,(我测试了一个文件夹架构,其中有数百万个文件夹被分成不同的子文件夹,每个文件夹最多 1000 个) ) 开始让我开始思考正确的解决方案。

一个文件夹中有 100 万个或更多文件,用于包含(缓存)

基本上,在这里更详细一点:我有一个昂贵的计算,需要许多数据库查询。基本上,程序的每个请求都针对特定用户。对于每个用户,结果总是完全相同(直到用户做出重大更改)。所以基本上,我在想:为什么每次一个人访问这个用户页面时都做这个操作——如果我可以做一次,然后存储它?

基本上,结果是一组不同的 PHP 对象,包含不同的数据/设置/等。所以我正在考虑创建一个.inc文件,创建这些对象(具有预定义的值,这将由 SELECT 产生)。每次有人呼叫该特定用户时,我都会快速include解决问题。

现在我不太确定那个解决方案了。这意味着,基本上每个用户都有至少一个.inc(可能有多个)要包含的文件。这意味着,如果我有一个UNSIGNED MEDIUMINT用户PK表,我需要一个文件夹结构来支持至少 8388607 * ~2 个文件(最坏情况)。

我想我在这里寻找错误的方向。我有什么可能?

  1. 选择数据并计算它/在每次页面调用时将其放在一起 - 始终具有相同的结果
  2. 与 2. 相同,但将生成的对象存储在文件中,作为代码片段 - 包括
  3. 与 2. 相同,但序列化生成的对象,将它们保存在文件或数据库中,在每次页面调用时反序列化它们
  4. ?

是否有其他解决方案/方法来解决此类问题?所有这些解决方案在我自己的耳朵里听起来都不太干净,但我正在努力寻找另一种方法来做到这一点。持有 800 万个文件,或者一遍又一遍地计算相同的东西——中间应该有一些东西,不知何故。

有什么建议么?

谢谢!- 原谅我糟糕的英语。

4

1 回答 1

0

我认为这里有很多选项供您选择,但如果没有进一步的细节,很难选择最好的一个:

如果这些对象不太可能在自己的表中不断更改,则可以将这些对象半缓存在数据库表中,并且仅在半缓存表中找不到结果时才进行昂贵的计算(这也将其放置在半缓存表)。您甚至可能希望制定一个定期(如每晚)更新这些内容的时间表,以利用服务器上的停机时间。

您可以将结果存储在会话或 cookie 中,并根据需要进行检查,如果不存在,则从数据库中计算。

使用您的 mySQL 缓存来存储这些昂贵的计算,以便它们可能在需要时位于缓存中。这可能意味着您使用预期的访问者预热缓存。

于 2012-08-09T12:31:52.337 回答