CodeIgniter DataMapper会变慢吗?

Maj*_*son 1 php mysql codeigniter codeigniter-datamapper

我一直在与Codeigniter建立关系数据库,发现DataMapper对于严肃的项目来说是无用的.Codeigniter的活动记录是无用的,因为它不提供多对多或一对多的方法.DataMapper速度慢且不可配置!

  1. 它在您查询时将整个表加载到对象.
  2. 当您第二次放入"A"时,第二次放入"A"时,您将在数据库中有2个As.它没有像SQL这样的忽略选项.你必须查询一个项目是否存在,如果没有,则插入它.
  3. 他们为此做了大量编码,但对于建立庞大的数据库似乎没有任何好处
  4. 查询速度不快.

这似乎是社区的共识.你建议在php中使用纯mysql来执行多对多和一对多的操作吗?或者你认为我错了!请随时告诉我.我的问题是,作为专业的网页设计师,您使用什么来建立数据库?

Wan*_*ard 17

有点奇怪的说法.

您可以定义需求,然后选择满足这些要求的工具,而不是相反.

Datamapper是一个ORM,一个对象关系映射器.在这种情况下,一个遵循Active Record设计模式(不要将其与CI的AR混淆,它不是活动记录,它是一个查询构建器).它将数据实体(在本例中为RDBMS表中的记录)映射到对象,并且它知道这些对象之间的关系.

这是ORM的作用.它比使用PHP的本机函数直接访问数据库慢吗?绝对.添加的任何抽象级别都将增加处理时间.

ORM的目标不是数据操作中最快的,它的目标是从控制器逻辑中抽象出数据操作,这样可以更轻松,更快速地编写应用程序,并且更快地维护这些应用程序.正如商业环境中的时间= =金钱,这就是利益所在.如果您免费编码并在两位共享主机上运行代码,那么ORM可能不适合您.

另外,ORM不是瑞士军刀.它是为特定目的而设计的,这是一种面向对象的数据收集方法,并操纵这些集合及其关系.

如果它不是正确的工具,请不要使用它.如果您需要根据一些奇怪的标准批量更新一百万条记录,请改为编写本机SQL查询.在自定义模型方法中执行此操作,以保持从控制器中抽象出数据操作代码.

至于你的具体意见:

  • Datamapper很慢:与什么相比?
  • 它不可配置:请参阅http://datamapper.wanwizard.eu/pages/config.html.
  • 它加载整个表:如果你得到()整个表,是的.这对我来说并不奇怪.
  • 如果使用相同的数据创建两个对象,则会保存两次:是.如果您运行两次相同的UPDATE查询,则相同.
  • 它不适合大型数据库:我有Datamapper支持的应用程序与TB级大小的数据库,所以我没有看到与大小的关系.
  • 它并不快:见答案nr.1.

如果您是一名专业的Web设计人员,您应该了解使用MVC架构设计和构建应用程序的正确方法,并使用正确的工具集来完成工作,以便您可以及时地向客户交付应用程序.

时间==金钱,如果你能更快地交付,并且你可以更快地维持或改进,你将留住你的客户.ORM可以帮助您.但是不要将它用于不应该做的事情.