2012-08-22 8 views
5

단일 쿼리로 여러 엔티티를 DB에 삽입 할 수 있습니까? 내가 here에서 예를 사용하는 경우 나는 웹 디버거 Doctrine2 일괄 삽입

2012년 8월 23일

업데이트]

여러 쿼리를 볼 수 있습니다 나는 다음과 같은 관련 링크를 발견했다.

어떤 사람들은 궁금해 할 것 같다 :

  1. http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
  2. doctrine2 - How to improve flush efficiency?
  3. Doctrine 2: weird behavior while batch processing inserts of entities that reference other entities

주요 것들 : 나는 그것을 일괄 처리를 이해하는 사람에게 도움이되기를 바랍니다 Doctrine이 복수 삽입 ( )을 사용하지 않는 이유 (삽입하는 (...) 값 (...), (...), ... (...) ...

우선이 구문은 mysql 및 최신 postgresql 버전에서만 지원됩니다. 둘째, AUTO_INCREMENT 또는 SERIAL을 사용하고 ORM이 ID 관리 개체를 관리하기위한 식별자를 필요로 할 때 이러한 다중 삽입에서 모두 생성 된 식별자를 쉽게 얻을 수있는 방법이 없습니다. 마지막으로, 삽입 성능은 ORM의 병목 현상이 거의 없습니다 ( ). 보통 삽입은 대부분의 상황에서 충분히 빠르며 빠른 대량 삽입을 원한다면 다중 삽입이 가장 좋은 방법은 아닙니다. 즉, Postgres COPY 또는 Mysql LOAD DATA INFILE이 몇 배 더 빠릅니다 .

ORM에 의 mysql 및 postgresql에 다중 삽입을 수행하는 추상화를 구현하려는 노력의 가치가없는 이유입니다. 몇 가지 의문점을 없애기를 바랍니다.

답변

0

나는 여러 삽입 문이 있지만 "플러시"호출 당 하나의 쿼리 만 데이터베이스에 있다고 생각합니다. http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html

각 "지속"현재의 UnitOfWork에 작업을 추가 할 것입니다 여기에 언급 한 바와 같이

후 실제로 (데이터베이스에 쓰기의 모든 작업을 캡슐화합니다 EntityManager의 번호 플러시 (호출)입니다 단일 트랜잭션에서 UnitOfWork).

그러나 위에서 설명한 동작이 실제 동작인지 확인하지 않았습니다.

안부, 크리스토프 당신의 응답을

+0

감사합니다,하지만 난' "플러시"call' 당 데이터베이스에 하나의 쿼리, 나는 각 INSERT 문에 대한 실행의 시간을 볼 수 있기 때문에 모르겠어요 . 즉, 각 INSERT 문은 DB에 대한 하나의 쿼리입니다. 내 질문을 업데이트했습니다. – Mikhail