Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 使用PHPCR/Jackalope原则DBAL的查询数量不确定?_Symfony_Doctrine Orm_Symfony Cmf_Doctrine Phpcr - Fatal编程技术网

Symfony 使用PHPCR/Jackalope原则DBAL的查询数量不确定?

Symfony 使用PHPCR/Jackalope原则DBAL的查询数量不确定?,symfony,doctrine-orm,symfony-cmf,doctrine-phpcr,Symfony,Doctrine Orm,Symfony Cmf,Doctrine Phpcr,我刚刚开始学习PHPCR与条令和Jackalope DBAL实现 使用Symfony 2调试工具栏,我可以看到,对于简单表单和父属性选择,它需要15个查询(…添加以提高可读性): 我只有三个节点: / /root /root/child 我添加了一个简单的表单(如上所述)来创建新文档并设置其父级: $form = $this->createFormBuilder($doc = new Document(), ['required' => false]) ->add('

我刚刚开始学习PHPCR与条令和Jackalope DBAL实现

使用Symfony 2调试工具栏,我可以看到,对于简单表单和父属性选择,它需要15个查询(
添加以提高可读性):

我只有三个节点:

/
/root
/root/child
我添加了一个简单的表单(如上所述)来创建新文档并设置其父级:

$form = $this->createFormBuilder($doc = new Document(), ['required' => false])
    ->add('name', 'text')
    ->add('title', 'text')
    ->add('parent', 'phpcr_document', [
        'property' => 'id',
        'class'    => 'Acme\DemoBundle\Document\Document',
        'multiple' => false,
    ])
    ->add('content', 'textarea')
    ->add('submit', 'submit')
    ->getForm()
    ->handleRequest($request);

if ($form->isValid()) {
    // ...
}

return [('form' => $form->createView()];

<>如何降低查询的数量?

这里有几个要考虑的事项:

  • 节点元数据非常可缓存,因此我建议您为元数据启用缓存
  • 对于节点,也有缓存,但是当任何节点写入完成时,整个缓存都会失效,这可能有意义,也可能没有意义,具体取决于应用程序
  • 我们目前正在PHPCR ODM和Jackalope理论DBAL中改进读取节点的某些方面
  • 在某些情况下,增加获取深度(在PHPCR-ODM中,对于子集合,您还可以定义获取深度),这将自动读取指定深度的子对象,从而大大减少查询
  • 最后,所有查询(当通过路径或uuid遍历节点时)都是没有联接的PK查找,因此它们往往非常快(例如,要读取单个节点,包括其所有非结构化数据,除了二进制文件,不需要联接)
  • 话虽如此,我们确实希望Jackalope原则DBAL在性能方面仍有改进的空间,但到目前为止,我们主要集中在添加新特性上。但例如,cmf.symfony.com在SQLite上运行,没有任何反向代理,但使用Jackalope Doctrine DBAL支持的元数据和节点缓存,并提供相当可接受的性能

    $form = $this->createFormBuilder($doc = new Document(), ['required' => false])
        ->add('name', 'text')
        ->add('title', 'text')
        ->add('parent', 'phpcr_document', [
            'property' => 'id',
            'class'    => 'Acme\DemoBundle\Document\Document',
            'multiple' => false,
        ])
        ->add('content', 'textarea')
        ->add('submit', 'submit')
        ->getForm()
        ->handleRequest($request);
    
    if ($form->isValid()) {
        // ...
    }
    
    return [('form' => $form->createView()];