代码之家  ›  专栏  ›  技术社区  ›  Ashish Gupta Shiva

将从数据库中检索的内容并行化,搜索并存储为HTML

  •  0
  • Ashish Gupta Shiva  · 技术社区  · 14 年前

    我有一个数据库表,其中HTML内容存储为二进制序列化blob。我需要一个接一个地检索内容,在内容中查找某些关键字(并报告找到的匹配项),还需要将内容以HTML文件的形式保存到磁盘上。我能用parallel.foreach对它进行平行分析吗?这是个好主意还是有更好的主意?

    提前感谢您的帮助, 阿施施

    3 回复  |  直到 14 年前
        1
  •  1
  •   Dave White John Alexiou    14 年前

    我怀疑,如果您可以在一个查询中从数据库中提取一组行,并并行处理每个行,查找关键字,然后在一个步骤中将批保存回磁盘,那么您将看到显著的好处。如果您一个接一个地选择并以线性方式处理它们,您将看到并行处理的好处微乎其微。

    我认为你只需要尝试两种方法,并测量差异,看看它是否真的适合你。显然,在单核机器上它不会有什么不同,但是一个8核机器只处理两个文件也不会看到任何显著的好处,除非每个文件的关键字搜索花费了很长时间,然后并行执行它们会再次获得好处。:)我认为你最好的选择是尝试一些不同的技巧,找出对你和你的处境最有利的方法。

        2
  •  1
  •   Brent Arias    14 年前

    数据库和磁盘的I/O性能将比处理器速度慢得多,因此您可能不会看到并行化带来的任何明显好处。

        3
  •  0
  •   Edu    14 年前

    我会采用生产者-消费者的方法( http://en.wikipedia.org/wiki/Producer-consumer_problem ):

    一个线程查询您的数据库(如果可能的话,通过某种类型的光标,这样您可以一个接一个地进行查询),并将每一行放在一个缓冲区中。

    另一个线程(如果搜索需要大量处理,则可能不止一个线程)正在获取数据库的一行(使用HTML blob)并处理搜索。

    在这种情况下,您可以同时进行查询和处理。

    我不相信您会因为一个很可能查询比处理花费的时间长的事实而获得很大的性能提升。问题是查询部分以磁盘读取为瓶颈。最后,您的磁盘性能很可能会限制您的总体性能。

    为了检查是否是这样,可以使用多个生产者(即多个线程查询数据库)来执行生产者/消费者操作。

    希望能有所帮助。

    爱德华多