2012-08-09 56 views
0

这是跟我昨天的问题 - 哪里有人问我为什么不在数据库中存储“缓存”的评论,(我测试了一个文件夹架构,数百万个文件夹分散在不同的子文件夹中, 1000个)开始让我思考正确的解决方案。缓存昂贵的计算 - 正确的方法?

1 million or more files in one folder, for include (cache)

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

基本上,结果是一组不同的PHP对象,持有不同的数据/设置/等。所以我想创建一个.inc文件,创建这些对象(具有预定义的值,这将导致从SELECT)。每次有人呼叫特定用户时,我只是快速地提出include,问题就解决了。

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

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

  1. 选择数据和计算它/把它togheter在每一页上的呼叫 - 总是有相同的结果
  2. 同为2,但由此产生的对象,存储在一个文件中的代码片段 - 包括
  3. 与2.相同,但序列化结果对象,将它们保存在文件或数据库中,在每次页面调用时将它们反序列化

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

有什么建议吗?

谢谢! - 请原谅我可怜的英语。

回答

0

我认为有一些对你选择这里,虽然没有进一步的细节,很难挑选出最好的一个:

你可以半缓存这些数据库中的表对象,如果他们不如果在半高速缓存表中找不到结果(也将其放在半高速缓存表中),那么它们可能在自己的表中不断变化,并且只执行昂贵的计算。您甚至可能想要定期更新这些日程表(如夜间)以充分利用服务器的停机时间。

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

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

+0

感谢输入,他们帮助我测试了几件事情 - 我发现存储在数据库中并不是正确的解决方案 - 直接查看已经gziped的文件只是更好地避免数据库调用 – Katai 2012-08-21 08:27:00