用JSON序列化数据库结果集的最快方法是什么?


Silex - What's the fastest way to serialize a database resultset in JSON?

目前,我使用DBAL从db检索记录,然后转换相应对象中的每一行。每个对象都被附加到一个数组中,最后使用json()函数将其转换为json。示例代码:

class MyController extends BaseController {
  public function getById(Request $request, Application $app, $id) {
      $this->app = $app;
      $sql = "SELECT * FROM table ...";
      $stmt = $app['db']->prepare($sql);
      $stmt->execute();
      $obj = $stmt->fetchAll('PDO::FETCH_ASSOC);
      return $app->json($this->convert($obj));
    }

  public function convert($resultset) {
    $result = array();
    foreach ($resultset as $key => $row) {
        $myObj = new MyObj();
        $myObj->setId($row['id']);
        // and so on
    }
    return $result;
  }
}

这个序列化方法可以修改得更快吗?在这种情况下,我必须发送一个REST客户端十万对象,是否有一种像文件一样的流模式,这样我就可以避免在临时数组中缓冲所有结果?由于

如果您的类属性映射到数据库中的列名,您可以直接使用PDO::FETCH_CLASS获取对象。这不会给你任何流,但它会跳过整个转换步骤:

public function getById(Request $request, Application $app, $id) {
  $this->app = $app;
  $sql = "SELECT * FROM table ...";
  $stmt = $app['db']->prepare($sql);
  $stmt->execute();
  // Generate an array of the required objects
  $arr = $stmt->fetchAll('PDO::FETCH_CLASS, "MyObj");
  // Encode the array
  return $app->json($arr);
}