Dávkové zpracování SQL dotazů v Doctrine

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martk
Člen | 652
+
0
-

Dnes dopoledne jsem se trošku nudil a napadla mě jedna ďábelská myšlenka: zpracování několik SQL dotazů v doctrině naráz. Vyzkoušel jsem si to naprogramovat a bez hacků (celkem 2, přístup k privátním metodám třídy, kvůli lenosti) se to neobešlo, ale ve výsledku se mi to podařilo. Teď k diskuzi, jaké zápory má tohle zpracování nebo co si o tom celkově myslíte?

Zajímavost pod čarou:

Naměřená rychlost (testováno nad 50 SQL dotazy):

  • Jednotlivě mysql: ~ 17 ms celkem (php + mysql): ~ 39 ms
  • Dávkově mysql: ~ 0.9 ms celkem (php + mysql): ~ 23 ms

PHP kód:

		timer();
		for ($i = 0; $i < 50; $i++) {
			$this->em->getRepository(Gallery::class)->createQueryBuilder('e')->where('e.id = ?1')->setParameter(1, array_rand($pairs))->getQuery()->getResult();
		}
		endTimer();



		timer();
		$collection = new QueryCollection();
		for ($i = 0; $i < 50; $i++) {
			$collection->addQuery((string) $i,
				$this->em->getRepository(Gallery::class)->createQueryBuilder('e')->where('e.id = ?1')->setParameter(1, array_rand($pairs))
					->leftJoin('e.images', 'i')->addSelect('i')
					->getQuery()
				, TRUE);
		}
		$result = $collection->exec();
		endTimer();

Pokud někdo chce, tak můžu kód sdílet na gitu.