2

我在服务中有一个函数,它基本上从几个表中提取数据并构建一个索引表。

问题是我有超过 6000 条记录,所以它只需要很长时间,有时会达到内存限制。

是否有设计模式或方法可以通过批处理或 Web 服务来实现?理想情况下,我希望能够不断更新用户的进度。

任何想法或指示将不胜感激。

更新:

我拥有的表格基本上是与电子商务网站上的产品一起使用的表格。我有以下表格:

  • 产品(基本产品信息)
  • 产品描述(描述和元信息)
  • 产品价格(产品的价格信息)
  • 产品图片(产品的图片信息)
  • 产品功能(任何产品功能)
  • 产品选项(任何产品选项)

然后,我有一个产品索引表,它从所有这些表中提取一些信息,以便在不需要大量连接的情况下更快、更轻松地搜索和过滤结果。

我需要一些关于开发重建索引表的方法/函数/进程/服务的最佳方法的指导。

4

1 回答 1

2

我无法告诉您如何重建索引,但我可以向您展示我一直用于处理大型结果集的方法。

$em = $this->getContainer()->get('doctrine')->getEntityManager();
$repo = $em->getRepository('MyBundle:Item');
$qb = $repo->createQueryBuilder('i') // build query ...

// get iterator for query; this way only a single row is
// hydrated at a time.
$it = $qb->getQuery()->iterate();
foreach ($it as $row) {
    // $row[0] will be the fetched entity.
    $ent = $row[0];

    // do stuff with entity ...
    // ...

    // Once you're done with the entity detach it to
    // save memory and speed up the doctrine ORM.
    // make sure you DO NOT use the detached entity
    // in any way after this call (unless you re-merge() it).
    $em->detach($row[0]);
}
于 2012-12-10T14:38:19.510 回答