1

我有一个网络爬虫,它在爬网时将信息保存到数据库中。在执行此操作时,它还将其操作的日志文件以及遇到的任何错误保存到 mysql 数据库中的日志字段(字段变为 64kb 到 100kb 之间的任何位置。它通过连接(使用 mysql CONCAT 函数)来完成此操作。

这似乎工作正常,但我担心它对 mysql 数据库的 cpu 使用/影响。我注意到网络爬取的执行速度比我实现将日志保存到数据库之前的速度要慢。

我从管理网页查看此日志文件,除了加载缓慢之外,当前的实现似乎工作正常。有什么加快速度的建议或实施建议吗?

4

1 回答 1

1

多次将 100kb 字符串读入内存,然后通过数据库将它们写入磁盘。当然你会经历减速!您所做的每一部分都将用于任务内存、磁盘和 cpu(特别是如果内存使用量达到系统最大值并且您开始交换到磁盘)。让我计算一下您可能会降低整体网站性能的一些方式:

  1. 随着存储 100kb 记录的时间增加单个进程保持连接的时间,Sql 连接最大并备份
  2. Webserver 进程会耗尽空闲进程池并达到最大值,并且需要更长的时间才能释放,因为它们必须等待数据库连接才能释放。
  3. Web 服务器进程开始膨胀,每个进程占用更多内存,可能超过系统在不进行交换的情况下可以处理的内存。这通过使用最大值来复杂化。由于#2 导致的进程数量
  4. ...可以写一本书来描述你的情况。
于 2012-07-18T14:18:28.040 回答