1

我一直在使用 Codeigniter 研究关系数据库,发现 DataMapper 对于严肃的项目毫无用处。Codeigniter 的活动记录没有用,因为它也没有提供多对多或一对多的方法。DataMapper 速度慢且不可配置!

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

这似乎是社区之间的共识。是否推荐在php中使用纯mysql对多对多和一对多进行操作?还是你认为我错了!请随时给我建议。我的问题是,作为一名专业的网页设计师,你用什么来做你的数据库?

4

1 回答 1

17

有点奇怪的说法。

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

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

这就是 ORM 所做的。是不是比使用 PHP 的原生函数直接访问数据库要慢?绝对地。添加的任何抽象级别都会增加处理时间。

ORM 的目标不是在数据操作方面最快,它的目标是从控制器逻辑中抽象出数据操作,这使得编写应用程序变得更容易和更快,并且绝对更快地维护这些应用程序。就像在商业环境中时间 == 金钱一样,这就是好处所在。如果您免费编码并在两位共享主机上运行您的代码,那么 ORM 可能不适合您。

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

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

至于您的具体意见:

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

如果您是一名专业的网页设计师,您应该了解使用 MVC 架构设计和构建应用程序的正确方法,并使用正确的工具集完成工作,以便及时将应用程序交付给您的客户。

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

于 2012-04-25T20:01:23.753 回答