我正在创建一个经常从远程网页上抓取数据的Web服务。在抓取这些数据之后,我有一个简单的多维信息数组要使用。抓取过程在我的服务器上相当费力,页面加载需要一段时间。我正在考虑使用MySQL数据库添加一个简单的缓存系统,我在每个远程网页上创建一行,其中从中提取的信息数据存储为JSON编码字符串。这是一个足够好的系统吗?或者每个网页的文本文件是否更好?
答案 0 :(得分:1)
如果您希望将缓存本地存储在1台服务器上(例如,如果您的mysql服务器和http服务器位于同一个盒子上),那么最好使用APC,这是一个缓存服务,附带PHP。
如果您希望远程存储数据(例如专用缓存盒),那么我会使用Memcache代替MySQL。
“当你拥有的只是一把锤子......”
答案 1 :(得分:1)
由于您正在抓取多个网页,并且您希望持久缓存数据,因此您可以选择一些选项 - 其中最好的选择是使用内存缓存或MySQL等数据库。使用文本文件不是一个好主意,因为您必须序列化/反序列化您的数据,并从您的文件系统中读取。查询数据库或内存缓存的效率要高出许多倍。
由于您可能希望缓存有点持久,我建议使用MySQL。您只需创建一个具有自动递增主键的表,该主键是已解析JSON对象中每个元素的列。 (请注意,MySQL目前不支持数组。为了模拟它们,您需要使用关系表,或序列化您的数组数据并将其提供给文本字段。前一种方法是首选)。
每次刮页时,都会运行UPDATE
语句来更新数据库中单个页面的信息。如果您在用于唯一标识页面的任何内容(URL / etc)上指定唯一索引,您将获得最佳查找性能。
答案 2 :(得分:0)
我不喜欢特别大的APC配置,最多64到128MB。 Memcache可以达到几千兆字节或更多(如果你运行多个实例,则更多)。两者都是暂时的 - 重新启动Apache,或Memcache(后者稍微不太可能,或经常)将丢失数据
这取决于您愿意处理数据以生成缓存的频率,以及缓存可以用多长时间。如果在重新删除页面之前好几周 - Mysql是一个完全合适的后备存储。
潜在的pther选项,具体取决于缓存的项目数量&正如您所建议的那样,数据有多大,基于文件的缓存,SQlite或其他系统。