我们在运行时遇到了奇怪的性能问题:
我们确信这不是一个DB问题(用一个真实的MongoDB实例进行了尝试,结果仍然相同)。
我们以类似于以下方式定义了与Doctrine ODM一起工作的对象:
<?php
namespace CatalogueManager\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use Doctrine\Common\Collections\ArrayCollection;
/*
* @ODM\Document(repositoryClass="CatalogueManager\Repository\ProductRepository")
*/
class Item
{
/** @ODM\Id */
protected $id;
/** @ODM\String */
protected $name;
/** @ODM\Timestamp */
protected $created;
/** @ODM\Timestamp */
protected $updated;
// ---------------------------------------------------------------------- //
/**
* Return properties as an array. Helper method to assist with converting
* doctrine objects to arrays so we can return front-end api calls as json.
*
* Required as currently Doctrine ODM do not support array hydration of
* referenced documents.
*
* @access public
* @return array
*
*/
public function toArray()
{
$arr = ['id' => $this->id,
'name' => $this->name,
'urlSlug' => $this->urlSlug,
'desc' => $this->desc,
'metaData' => $this->metadata,
'category' => $this->category,
'brand' => $this->brand,
'assets' => $this->assets,
'shipping' => $this->shipping,
'specs' => $this->specs,
'attrs' => $this->attrs,
'optionTypes' => $this->optionTypes
];
return $arr;
}
// ---------------------------------------------------------------------- //
/**
* Getter
*
* @access public
* @return string
*
*/
public function getId()
{
return $this->id;
}
/**
* Getter
*
* @access public
* @return string
*
*/
public function getName()
{
return $this->name;
}
// ---------------------------------------------------------------------- //
/**
* Setter
*
* @param string $value Property value
*
* @access public
* @return void
*
*/
public function setName($value)
{
$this->name = $value;
}
}
我们使用这些工具将大约100种产品导入到产品数据库中。在真正的机器上,这一切大约需要5秒钟,但在虚拟机上进行尝试时,同样的操作大约需要25秒钟。
看起来问题可能出在Apache上,它在处理这一切时占用了99%的负载,但我很难确定到底发生了什么。
任何形式的建议都将不胜感激。。。
这似乎只在写入数据时发生。读取数据似乎还可以。
Webgrind数据(截图)可用:https://www.dropbox.com/s/jjlg7ano6epy6t1/webgrind.png?dl=0
所以这不是答案,我的目标是建议。在本地机器上运行较慢是正常的,更不用说在虚拟机器上了。
可能会有所帮助的事情:
config.vm.providerVirtualbox do|v|v.customize[
]end
还有一个旁注。为什么在12.04版本上运行PHP5.5,为什么不是14.04版本(它更可靠,但不那么精确)。设置起来比较容易。
在看了一些XDebug数据的屏幕截图后,我认为您只是以错误的方式使用了ORM/ODM,因为您正在批次处理作业
这种操作的正确解决方案http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html
发生的事情非常简单:-ODM从DB加载一条记录-ODM将该记录存储到UnitOfWork
-刷新时,ODM迭代UnitOfWork
中的所有条目,查找更改的文档/实体
如果您在工作单元
中继续存储更多数据,那么很明显,每次重复操作时,迭代将花费更长的时间。
您应该在正在处理的批处理块之间调用ObjectManager#clear()
。
目前我尝试使用Zend Framework 2的CSRF保护。 但每次我发送表单时,都会收到以下错误消息: 提交的表格不是来自预期的网站 我以这种方式实施了CSRF保护: 1)创建了一个Form Class并添加了csrf: 2)在view文件中呼应csrf元素: 我发现csrf令牌没有存储在会话中,但是为什么呢?
在Zf3项目中,我添加了条令和迁移模块,并配置了条令和迁移配置。 现在我通过以下命令创建迁移 有人帮我吗有什么问题吗?
您好,我遵循了Zend framework 3的入门教程,并设法使其正常工作。因此,我决定下载一个新的框架应用程序,并像在线商店一样对其进行调整。但是当我去运行模块时。php文件通过wamp我收到以下错误消息: 致命错误:在C:\wamp64\www\shop\module\shop\src\module中找不到接口“Zend\ModuleManager\Feature\ConfigProvide
问题内容: 有没有一种方法可以在Zend Framework中将SQL字符串作为查询执行? 我有一个像这样的字符串: 现在,我想直接执行此字符串,然后对其进行解析并“手动” 创建一个对象。或者,如果可能的话,从此字符串创建一个对象,以执行该对象。 我怎样才能做到这一点?我在Zend文档中找不到解决方案。 问题答案: 如果要在一开始创建Zend_DB对象,则可以使用该对象创建查询。请查看手册中的以下
Apache Struts 2 是一个简洁的,可扩展的框架,它用来创建企业级的 Java web 应用程序。框架的目的是随着时间的积累从构建,部署,维护应用程序上简化整个开发周期。Apache Struts 2 最初被称为 WebWork 2。
问题内容: 我遇到了一个可能非常简单的问题,在《 Zend Framework手册》或其他地方找不到令人满意的(主观上可以看到的)答案… 我有很多方法可以将php变量移交给我的sql查询,以致于我失去了概述,并且可能我对一般的引用缺乏一些了解。 准备的陈述 我知道,使用此解决方案,我不需要引用任何内容,因为数据库会为我处理此问题。 通过API查询Zend_Db_Table和_Row对象 $ use