Pergunta

Estamos trabalhando em um projeto PHP, que tem estado em desenvolvimento há mais de 2 anos, e agora a equipe está pronta e sentir a vontade de mudar o desenvolvimento para um ORM. Porque ele realmente acelera o desenvolvimento e permitem operar por Objetos e não pensar em termos de código e banco de dados tabelas SQL maior parte do tempo.

Nós decidimos escolher o Doutrina ORM, porque tem YAML dados luminárias carga - precisamos muito dele para a nossa unidade-testes

.

O principal medo que eu tenho, é que a utilização de um novo quadro ORM pode diminuir o desempenho do site. Nós não podemos fazer uma conexão compartilhada entre a camada de abstração de banco de dados atual (que usa a sintaxe pg_connect, não PDO -compatível). O mecanismo de conexão banco de dados não pode ser mudado para DOP-compatível, porque há muitas incompatível código SQL com a sintaxe pdo_sqlite.

Então, como eu o entendo, se vamos começar a usá-lo, ele vai dobrar o número de conexões de banco de dados. Eu não tenho certeza do servidor de banco de dados será capaz de lidar com isso.

O que você recomendar-nos a fazer nessa circunstância?

Foi útil?

Solução

De que relevância é pdo_sqlite?

A menos que você realmente planeja usar o driver SQLite, em seguida, a compatibilidade não é obrigatória por PDO.

Se você não vai usar SQLite então eu iria fazer a camada DOP banco de dados legado compatível e re-utilizar as conexões até que você pode totalmente migrar para Doutrina.

Dito isso, o nível de conexões não vai ser a sua única preocupação desempenho de se mudar para um ORM. Eles são inerentemente ineficiente, então eu esperaria consultas mais lentas, maior utilização da largura de banda entre servidores de aplicativos e servidores de banco de dados e maior uso de memória no nível do aplicativo devido a dados redundantes, inevitavelmente, se selecionados. Dependendo da sua configuração atual, o acima pode ou não haver problemas.

Você provavelmente deve ter esse último parágrafo com uma pitada de sal, porque embora eles são apenas traços de ORMs em geral, e não a doutrina em particular, com a qual eu não tinha experiência.

Outras dicas

A coisa óbvia que você pode fazer é não abrir uma conexão com o banco até que você precisar. Eu pessoalmente uso código como este:

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;
}

para reduzir a quantidade de repetitivo e para abrir apenas uma conexão quando você precisar de um.

No seu caso, então você precisa para romper o menor pedaço que puder para começar. Idealmente, deve ser um fatia vertical , ou seja, esta fatia vai fazer quase todo o seu trabalho de banco de dados com o novo código e muito pouco com o velho. Desta forma, você pode mínimo dobrar de conexões de banco de dados e isso permite construir algumas habilidades e obter alguma experiência também.

Cuidado, porém, ORM não é por qualquer meio uma panacéia. Você pode odiar SQL e achar que é fiddly e propenso a erros, mas você é, em sua maior parte, simplesmente trocando um conjunto de problemas por outro. Eu pessoalmente acho que enquanto ORM pode ser útil que tenha sido exagerada e é mais de uma economia falsa do que muitos imaginam, quer ou estão dispostos a admitir. Eu escrevi mais sobre isso em Usando um ORM ou SQL simples?

Eu não estou dizendo que você não deve fazê-lo. Só não vá em pensar que vai resolver todos os seus problemas. Além disso, uma vez que esta reescrita não vai realmente mudar a funcionalidade em tudo (a partir do que você descreveu) Eu não tenho certeza se o custo de fazê-lo se compara favoravelmente com consertar o que já está lá. Muitas incógnitas para dizer de que maneira sua situação vai.

Bem, sim e não -. Suas conexões de banco de dados será apenas dobrou, desde que você tem tanto um não-PDO e uma conexão PDO

Eu não tenho certeza do que você quer dizer com a referência pdo_sqlite, desde SQLite é um banco de dados totalmente diferente do que o PostgreSQL parece que você está usando agora.

Você deve ser capaz de executar suas consultas atuais através PDO :: consulta como você faz hoje, a menos que você está fazendo algo muito errado:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top