2010-05-27 121 views
0

我正在创建一个Web服务,通​​常从远程网页中提取数据。在获取这些数据之后,我有一个简单的多维信息数组可供使用。在我的服务器上拼音过程相当重要,页面加载需要一段时间。我正在考虑使用MySQL数据库添加一个简单的缓存系统,其中我为每个远程网页创建一行,并从其中存储的信息数组以JSON编码的字符串形式存储。这是一个足够好的系统吗?或者像每个网页的文本文件是一个更好的主意?在MySQL数据库中创建一个PHP缓存系统?

+3

@Kenaniah - 如果你必须以“没有冒犯性”作为前言 - 也许你应该学会如何建设性地提供建议。这个孩子是17. – Matt 2010-05-27 22:20:48

+0

@Matt - 是的,我会在一秒内发布一个建设性的答案... – Kenaniah 2010-05-27 22:27:28

回答

1

既然你刮多个网页,并且你想你的数据将被永久缓存,你有几种选择 - 最好的这将是使用memcache或数据库,如MySQL。使用文本文件不是一个好主意,因为您必须序列化/反序列化数据,并从文件系统读取数据。查询数据库或memcache的效率要高出许多倍。

既然你可能正在寻找你的缓存有点持久,我会建议去与MySQL。您只需创建一个具有自动递增主键的表,该分析的JSON对象中的每个元素都有一列。 (请注意,MySQL目前不支持数组,为了模拟它们,您需要使用关系表,或者序列化数组数据并将其提供给文本字段,前者是首选)。

每次抓取页面时,都会运行UPDATE语句来更新数据库中单个页面的信息。如果您指定唯一索引来标识您的页面(URL /等),您将获得最佳查找性能。

+0

数据持久性是为什么我跳过了memcache或类似的东西。关于查询缓存页面的问题是:可以简单地查询页面的URL,还是应该执行类似于URL的md5散列查询操作? – 2010-05-28 02:09:17

+0

使用页面的URL进行查询就可以了(因为通常可以用作唯一标识符)。只要确保在数据库表中的该字段上添加一个唯一索引,因为它本质上可以用作主键。 – Kenaniah 2010-05-28 06:32:22

1

如果你想在1台服务器上本地存储缓存(例如,如果你的mysql服务器和http服务器在同一个盒子上),你最好使用APC,这是一个PHP自带的缓存服务。

如果你想远程存储数据(例如专用缓存盒),那么我会用Memcache而不是MySQL。

“当你只有一把锤子......”

0

我不倾向于有特别大的APC配置,最大64 - 128MB。 Memcache可以达到几千兆字节或更多(如果运行多个实例,则会更多)。两者都是暂时的 - 重启Apache或Memcache(后者的可能性较小或经常会稍微减少)将丢失数据

这取决于您希望多长时间处理数据以生成缓存,以及该缓存可能需要多长时间才能有用。如果在重新抓取页面之前好几个星期--MySQL是一个完全合适的后台存储。

潜在的pther选项,取决于缓存的项数&数据的大小,正如您所建议的那样,是基于文件的缓存,SQlite或其他系统。