我们正在开发一个PHP项目,该项目已经开发了2年多,现在团队已经准备好并且感觉愿意将开发转换为ORM。因为它确实加快了开发速度并允许您按对象操作,而不是在大多数时间考虑SQL代码和数据库表。

我们决定选择 Doctrine ORM,因为它有YAML数据夹具负载 - 我们非常需要它来进行单元测试。

我担心的主要问题是使用新的ORM框架会降低网站的性能。我们无法在当前数据库抽象层(使用 pg_connect 语法,而不是 PDO 兼容)。数据库连接机制无法切换到PDO兼容,因为有许多SQL代码与PDO_SQLITE语法不兼容。

因此,据我所知,如果我们开始使用它,它将使数据库连接数增加一倍。我不确定数据库服务器是否能够处理这个问题。

在这种情况下,您建议我们做什么?

有帮助吗?

解决方案

PDO_SQLITE的相关性是什么?

除非您实际计划使用SQLite驱动程序,否则PDO不会强制要求兼容性。

如果您不打算使用SQLite,那么我将使旧数据库层PDO兼容并重新使用这些连接,直到您可以完全迁移到Doctrine。

也就是说,连接级别不会成为您转向ORM的唯一性能问题。它们本身效率低下,所以我期望查询速度变慢,应用程序服务器和数据库服务器之间的带宽使用量增加,以及应用程序级别的内存使用量增加,因为冗余数据不可避免地被选中。 根据您当前的设置,上述内容可能是也可能不是问题。

你应该把最后一段用一小撮盐拿走,因为它们只是一般ORM的特征,而不是特别是Doctrine,我没有经验。

其他提示

您可以做的显而易见的事情是在您需要之前不打开数据库连接。我个人使用这样的代码:

public function connect() {
  if (!defined('CONNECT')) {
    mysql_connect(...);
  }
}

public function db_query($query) {
  connect();
  $ret = mysql_query($query);
  if (!$ret) {
    die(mysql_error());
    error_log(mysql_error() . ' - ' . $query);
  }
  return $ret;
}

减少重复次数,只在需要时才打开连接。

在你的情况下,你需要打破你可以开始的最小块。理想情况下,它应该是垂直切片,这意味着这个切片几乎可以使用新代码完成所有数据库工作,而使用旧代码则很少。通过这种方式,您可以最大限度地减少数据库连接的倍增,这可以让您积累一些技能并获得一些经验。

请注意,ORM绝不是灵丹妙药。您可能讨厌SQL并且发现它很繁琐而且容易出错,但在大多数情况下,您只是将一组问题交给另一组。我个人认为,虽然ORM可能有用,但它被夸大了,而且比许多人意识到或愿意承认的更为虚假经济。我在使用ORM或纯SQL?

我不是说你不应该这样做。只是不要认为它会解决你所有的问题。此外,由于这种重写实际上根本不会改变功能(从你所描述的内容),我不确定这样做的成本是否优于修复已有的成本。太多未知数,无法说出你的情况会走向何方。

嗯,是的,没有–只要您同时拥有非PDO和PDO连接,您的数据库连接就会加倍。

我不确定您对PDO_SQLITE引用的意思,因为SQLite与您现在使用的PostgreSQL完全不同。

您应该能够像今天一样通过PDO :: query运行当前查询,除非您做了一些非常错误的事情:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top