Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Propel vs Doctrine - wynik testu - może jakiś komentarz ?
yankes
post 9.05.2010, 20:36:10
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


wczoraj z okazji prac nad pewnym projektem i odwiecznego pytania: Doctrine vs Propel poszukałem i znalazłem

dla potomnych: http://code.google.com/p/php-orm-benchmark...unk/doctrine_12
prosty benchmark: PDO / Propel 1.4 / Propel 1.5 / Propel 1.5 ( with Cache ) / Doctrine 1.2 / Doctrine 2 / Doctrine 2 ( with Cache )

zanim zdecydujecie się samemu pogrzebać/testować pamiętajcie, że Doctrine 2 pracuje z php 5.3.2

oki.. wynik moich testów 'delikatnie' mnie zdziwił:
  1.  
  2. | Insert | findPk|complex| hydrate| with |
  3. |--------|--------|--------|--------|--------|
  4.  
  5. PDOTestSuite | 153 | 154 | 110 | 116 | 103 |
  6.  
  7. Propel14TestSuite | 1214 | 529 | 137 | 321 | 315 |
  8.  
  9. Propel15TestSuite | 1122 | 725 | 250 | 426 | 439 |
  10.  
  11. Propel15WithCacheTestSuite | 1026 | 453 | 171 | 346 | 331 |
  12.  
  13. Doctrine12TestSuite | 2168 | 3697 | 569 | 1990 | 2545 |
  14.  
  15. Doctrine2TestSuite | 189 | 503 | 426 | 1408 | 1284 |
  16.  
  17. Doctrine2WithCacheTestSuite | 203 | 543 | 137 | 769 | 431 |



z tego wynika, że bardzo popularny obecnie Doctrine 1.2 to niezły 'żółw'.....
może ktoś doda coś od siebie na ten temat ? snitch.gif bo może ja coś przeoczyłem ... wstydnis.gif

Ten post edytował yankes 9.05.2010, 22:58:00
Go to the top of the page
+Quote Post
Zyx
post 17.05.2010, 18:14:43
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


A może byś tak jeszcze napisał, co oznaczają te cyferki, jak uruchamiałeś, ogólnie metodologię? Takie pseudobenchmarki z cyferkami i bez słowa komentarza to o kant czterech liter można rozbić.

Natomiast Doctrine 1.x demonem szybkości nie jest i to nie jest żadna tajemnica, zwłaszcza jak robisz hydrację wyników do obiektów zamiast do tablic.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
yankes
post 18.05.2010, 08:03:33
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


Zyx: specjalnie, żeby nie było pytań o metodologię i na użytek innych dałem link do skryptu, którym testowałem.
Jest to czas w mikrosekundach jaki dany ORM potrzebował na wykonanie zapytania.

Tu masz główną klasę abstract:
  1. public function initTables()
  2. {
  3. try {
  4. $this->con->exec('DROP TABLE [book]');
  5. $this->con->exec('DROP TABLE [author]');
  6. } catch (PDOException $e) {
  7. // do nothing - the tables probably don't exist yet
  8. }
  9. $this->con->exec('CREATE TABLE [book]
  10. (
  11. [id] INTEGER NOT NULL PRIMARY KEY,
  12. [title] VARCHAR(255) NOT NULL,
  13. [isbn] VARCHAR(24) NOT NULL,
  14. [price] FLOAT,
  15. [author_id] INTEGER
  16. )');
  17. $this->con->exec('CREATE TABLE [author]
  18. (
  19. [id] INTEGER NOT NULL PRIMARY KEY,
  20. [first_name] VARCHAR(128) NOT NULL,
  21. [last_name] VARCHAR(128) NOT NULL,
  22. [email] VARCHAR(128)
  23. )');
  24. }
  25.  
  26. public function run()
  27. {
  28. $t1 = $this->runTest('runAuthorInsertion', 1700);
  29. $t1 += $this->runTest('runBookInsertion', 1700);
  30. $t2 = $this->runTest('runPKSearch', 1900);
  31. $t3 = $this->runTest('runComplexQuery', 190);
  32. $t4 = $this->runTest('runHydrate', 750);
  33. $t5 = $this->runTest('runJoinSearch', 700);
  34. echo sprintf("%30s | %6d | %6d | %6d | %6d | %6d |\n", get_class($this), $t1, $t2, $t3, $t4, $t5);
  35. }



a tu klase od Doctrine 1.2, która dziedziczy z tej abstrakcyjnej:

  1. function runAuthorInsertion($i)
  2. {
  3. $author = new Author();
  4. $author->first_name = 'John' . $i;
  5. $author->last_name = 'Doe' . $i;
  6. $author->save($this->con);
  7. $this->authors[]= $author->id;
  8. }
  9.  
  10.  
  11. function runBookInsertion($i)
  12. {
  13. $book = new Book();
  14. $book->title = 'Hello' . $i;
  15. $book->author_id = $this->authors[array_rand($this->authors)];
  16. $book->isbn = '1234';
  17. $book->price = $i;
  18. $book->save($this->con);
  19. $this->books[]= $book->id;
  20. }
  21.  
  22. function runPKSearch($i)
  23. {
  24. $author = Doctrine_Core::getTable('Author')->find($this->authors[array_rand($this->authors)]);
  25. }
  26.  
  27. function runComplexQuery($i)
  28. {
  29. $authors = Doctrine_Query::create()
  30. ->from('Author a')
  31. ->where('a.id > ?', $this->authors[array_rand($this->authors)])
  32. ->orWhere('(a.first_name || a.last_name) = ?', 'John Doe')
  33. ->limit(5)
  34. ->count();
  35. }
  36.  
  37.  
  38. function runHydrate($i)
  39. {
  40. $books = Doctrine_Query::create()
  41. ->from('Book b')
  42. ->where('b.price > ?', $i)
  43. ->limit(5)
  44. ->execute();
  45. foreach ($books as $book) {
  46. // removing the record from the instance pool, otherwise we are not testing hydration time!
  47. $book->free(true);
  48. }
  49. }
  50.  
  51. function runJoinSearch($i)
  52. {
  53. $book = Doctrine_Query::create()
  54. ->from('Book b')
  55. ->leftJoin('b.Author a')
  56. ->where('b.title = ?', 'Hello' . $i)
  57. ->limit(1)
  58. ->fetchOne();
  59. }
Go to the top of the page
+Quote Post
Zyx
post 18.05.2010, 16:33:09
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


Widzę, że dałeś. Sęk w tym, że nie wszyscy mają czas, by to ściągać, uruchamiać i rozkminiać wszystko metodą inżynierii wstecznej tylko po to, by się dowiedzieć, że wyniki są w mikrosekundach, bo autor benchmarka umarłby z wysiłku, gdyby o tym wspomniał. Ponadto sam kod nie mówi nic o tym czy np. testy uruchamiałeś kilkakrotnie, czy i jak uśredniałeś wyniki, czyli o wszystkich tych rzeczach związanych z późniejszą obróbką.

Powtarzam:

Cytat
Doctrine 1.x demonem szybkości nie jest i to nie jest żadna tajemnica, zwłaszcza jak robisz hydrację wyników do obiektów zamiast do tablic.


Ten post edytował Zyx 18.05.2010, 16:33:43


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
yankes
post 18.05.2010, 21:41:25
Post #5





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


Zyx: testy były uruchamiane min 10 razy na 3 różnych maszynach, wynik ciągle przybliżony. A co do Doctrine 1.2 to jest 'załamany' jego wydajnością. I poważnie zastanawiam się co dalej.. Wybiorę Propel to niedługo ( albo i już ) będzie dodatkowym pluginem do Symfony. Głównym jest doctrine 1.2 a potem ma być doctrine 2. Z tego co widzę to coraz więcej pluginów jest robionych pod Doctrine ;/ ciężki wybór dry.gif
Go to the top of the page
+Quote Post
Zyx
post 18.05.2010, 23:01:45
Post #6





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


W porządku, to może jeszcze byś odpowiedział na wątpliwość, którą już trzeci raz powtórzę:

Cytat
zwłaszcza jak robisz hydrację wyników do obiektów zamiast do tablic.


Dlaczego używasz hydracji do obiektów we wszystkich testach, skoro sami autorzy piszą w dokumentacji, że jest ona dość wolna i aby nie używać jej, jeśli nie chcemy później wykonywać modyfikacji danych za pomocą tych obiektów.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
yankes
post 19.05.2010, 09:18:53
Post #7





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


Zyx: wiem, że hydrację wyników do obiektów zamiast do tablic jest wolniejsza, dziś zrobie te same testy z hydracją do tablic przy insert i szukaniu po PK.

Jeżeli możesz podziel się linkiem do dokumenacji gdzie jest mowa o: "skoro sami autorzy piszą w dokumentacji, że jest ona dość wolna i aby nie używać jej".
Go to the top of the page
+Quote Post
stloyd
post 19.05.2010, 09:43:28
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 17.06.2004

Ostrzeżenie: (0%)
-----


Cytat(yankes @ 19.05.2010, 11:18:53 ) *
Jeżeli możesz podziel się linkiem do dokumenacji gdzie jest mowa o: "skoro sami autorzy piszą w dokumentacji, że jest ona dość wolna i aby nie używać jej".

Zyx'owi chodziło chyba o to.


--------------------
[workstation] PHPStorm, Apache 2/nginx, php 5.3/5.4, MySQL 5.5/5.6
[employers] Infor S.A., Gadu-Gadu S.A., Redefine, HBM, KnpLabs
Go to the top of the page
+Quote Post
yankes
post 10.06.2010, 19:47:34
Post #9





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


oki smile.gif chyba tak .. bo tylko to znalazłem na stronie Doctrine. Dziś nowe testy ;] zobaczymy jak wyjdzie.

Wracam do zapomnianego wątku smile.gif

w przykładach było wyraźnie zaznaczone, że nie liczony jest czas hydracji :

  1. foreach ($books as $book) {
  2. // removing the record from the instance pool, otherwise we are not testing hydration time!
  3. $book->free(true);
  4. }


ale pomimo tego postanowiłem zrobić dodatkową klasę z hydracją do tablic ( dla doctrine 1.2 ) wynik testów:



Doctrine12TestSuiteARRAY - hydracja przeprowadzona dla wariantu: hydrate i with... rezultat... smile.gif krzyż na drogę Doctrine smile.gif
poczekam sobie spokojnie na dopracowane Symfony 2 + Doctrine 2 smile.gif ale to pewnie jakiś rok czasu smile.gif
Go to the top of the page
+Quote Post
murwazy
post 15.06.2010, 14:31:24
Post #10





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Cytat(yankes @ 10.06.2010, 20:47:34 ) *
  1. foreach ($books as $book) {
  2. // removing the record from the instance pool, otherwise we are not testing hydration time!
  3. $book->free(true);
  4. }


ale pomimo tego postanowiłem zrobić dodatkową klasę z hydracją do tablic ( dla doctrine 1.2 ) wynik testów:

Doctrine12TestSuiteARRAY - hydracja przeprowadzona dla wariantu: hydrate i with... rezultat... smile.gif krzyż na drogę Doctrine smile.gif
poczekam sobie spokojnie na dopracowane Symfony 2 + Doctrine 2 smile.gif ale to pewnie jakiś rok czasu smile.gif

ja nie wiem jak to testujesz bo na svenie nie ma klasy z hydracja do tablic (1.2) ale z mojego szybkiego testu wynika ze jest ona conajmniej 2x szybsza na prostym findAll ze zlaczeniami.

  1. $query = new Doctrine_Query();
  2. $query->from('Product p');
  3. $query->leftJoin("p.Translation t1 INDEXBY t1.lang");
  4. $query->leftJoin("p.accessories a INDEXBY a.id");
  5. $query->leftJoin("a.Translation t2 INDEXBY t2.lang");
  6. $query->leftJoin("p.countries c INDEXBY c.id");
  7. $query->leftJoin("c.Translation t3 INDEXBY t3.lang");
  8. $query->leftJoin("p.product_category pc");
  9. $query->leftJoin("pc.Translation t4 INDEXBY t4.lang");
  10. $query->addOrderBy('t4.name');
  11. $query->addOrderBy('p.position');
  12. $query->addOrderBy('t1.name');
  13. //$query->setHydrationMode(Doctrine::HYDRATE_ARRAY); // 2x szybsze
  14. $query->setHydrationMode(Doctrine::HYDRATE_RECORD);
  15. $query->execute();


powiedz jeszcze po kiego ten foreach?

caly ten twoj test i wnioski sa.. hm, slabe smile.gif

Ten post edytował murwazy 15.06.2010, 14:32:21
Go to the top of the page
+Quote Post
yankes
post 15.06.2010, 20:34:12
Post #11





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

Ostrzeżenie: (0%)
-----


słaby to jest Doctrine i myślenie niektórych o nowościach promowanych przez Fabiena:

kawałek kodu którego użyłem to pomiary z hydracją:

  1. function runComplexQuery($i)
  2. {
  3. $authors = Doctrine_Query::create()
  4. ->from('Author a')
  5. ->where('a.id > ?', $this->authors[array_rand($this->authors)])
  6. ->orWhere('(a.first_name || a.last_name) = ?', 'John Doe')
  7. ->limit(5)
  8. ->setHydrationMode(Doctrine::HYDRATE_RECORD)
  9. ->execute();
  10. }
  11.  
  12. function runHydrate($i)
  13. {
  14. $books = Doctrine_Query::create()
  15. ->from('Book b')
  16. ->where('b.price > ?', $i)
  17. ->limit(5)
  18. ->setHydrationMode(Doctrine::HYDRATE_RECORD)
  19. ->execute();
  20. /*foreach ($books as $book) {
  21. // removing the record from the instance pool, otherwise we are not testing hydration time!
  22. $book->free(true);
  23. }*/
  24. }


jak na moje foreach jest wyraźnie zakomentowany winksmiley.jpg - a po co tam jest ? zapytaj autora skryptu, który pobierasz z SVN

druga sprawa smile.gif to czemu upieracie się żeby testować Propel ( defaultowe ustawienia - hydracja obiekt ) vs Doctrine ( hydracja do tablic ) ?

aaa i nie jest to mój test... ;] tylko ROZWAŻANIA na podstawie gotowego skryptu smile.gif

Cytat
ja nie wiem jak to testujesz bo na svenie nie ma klasy z hydracja do tablic (1.2)

zauważ, że w teście pojawiła się klasa: Doctrine12TestSuiteARRAY - której to nie ma na tym SVN-ie biggrin.gif

Ten post edytował yankes 15.06.2010, 20:36:51
Go to the top of the page
+Quote Post
murwazy
post 15.06.2010, 22:02:06
Post #12





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Cytat(yankes @ 15.06.2010, 21:34:12 ) *
słaby to jest Doctrine i myślenie niektórych o nowościach promowanych przez Fabiena:

kawałek kodu którego użyłem to pomiary z hydracją:

  1. function runComplexQuery($i)
  2. {
  3. $authors = Doctrine_Query::create()
  4. ->from('Author a')
  5. ->where('a.id > ?', $this->authors[array_rand($this->authors)])
  6. ->orWhere('(a.first_name || a.last_name) = ?', 'John Doe')
  7. ->limit(5)
  8. ->setHydrationMode(Doctrine::HYDRATE_RECORD)
  9. ->execute();
  10. }
  11.  
  12. function runHydrate($i)
  13. {
  14. $books = Doctrine_Query::create()
  15. ->from('Book b')
  16. ->where('b.price > ?', $i)
  17. ->limit(5)
  18. ->setHydrationMode(Doctrine::HYDRATE_RECORD)
  19. ->execute();
  20. /*foreach ($books as $book) {
  21. // removing the record from the instance pool, otherwise we are not testing hydration time!
  22. $book->free(true);
  23. }*/
  24. }


jak na moje foreach jest wyraźnie zakomentowany winksmiley.jpg - a po co tam jest ? zapytaj autora skryptu, który pobierasz z SVN

kawalek kodu z hydracja do obiektu a nie do tablicy, w tym rzecz.
wczesniej nie podales kodu, ktory testowales, skad mam wiedziec czy tym razem wykomentowales

Cytat(yankes @ 15.06.2010, 21:34:12 ) *
druga sprawa smile.gif to czemu upieracie się żeby testować Propel ( defaultowe ustawienia - hydracja obiekt ) vs Doctrine ( hydracja do tablic ) ?

skoro doctrine ma taki ficzer to dlaczego go nie uzywac? zwlaszcza jesli jest to szybsze rozwiazanie. po co na sile promowac propela? imho liczy sie czas wykonania zadania, skoro doctrine ma tu przewage (hydracja do tablic) to dlaczego jej nie uzywac?
propel byc moze jest szybszy we wbijaniu gwozdzi ale doctrine ma metode wiertarka winksmiley.jpg

Cytat(yankes @ 15.06.2010, 21:34:12 ) *
aaa i nie jest to mój test... ;] tylko ROZWAŻANIA na podstawie gotowego skryptu smile.gif

przyjalem do wiadomosci smile.gif

Cytat(yankes @ 15.06.2010, 21:34:12 ) *
zauważ, że w teście pojawiła się klasa: Doctrine12TestSuiteARRAY - której to nie ma na tym SVN-ie biggrin.gif

owszem, ale nie podales zrodel do ostatniego testu smile.gif
pozdrawiam

Ten post edytował murwazy 15.06.2010, 22:02:38
Go to the top of the page
+Quote Post
Fifi209
post 16.06.2010, 19:33:38
Post #13





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Wyniki powiem, że mnie bardzo zadziwiły - myślałem, że PDO będzie na samym końcu, a tutaj niespodzianka, najszybszy, konkurencja bez szans - no ale jednak, co stworzone przez twórców języka, chodzi troszkę lepiej. ;p


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Crozin
post 16.06.2010, 20:22:00
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@fifi209: Może dlatego, że PDO nie jest ORMem? sciana.gif
Go to the top of the page
+Quote Post
Fifi209
post 16.06.2010, 21:30:49
Post #15





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(Crozin @ 16.06.2010, 21:22:00 ) *
@fifi209: Może dlatego, że PDO nie jest ORMem? sciana.gif


Miałem na myśli samo zaskoczenie jak wypada PDO - większość ludzi mówi, że jest takie wolne itd.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Pr0100
post 16.06.2010, 23:05:06
Post #16





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat
myślałem, że PDO będzie na samym końcu, a tutaj niespodzianka, najszybszy, konkurencja bez szans - no ale jednak, co stworzone przez twórców języka, chodzi troszkę lepiej. ;p


http://github.com/doctrine/doctrine1/blob/.../Connection.php
http://svn.propelorm.org/tags/1.5.1/runtim...n/PropelPDO.php

taa... sciana.gif

Cytat
Doctrine 1.2 to niezły 'żółw'


fakt, metody magiczne robią swoje

Cytat
ciężki wybór


czemu wybierasz ORM ze względu na wydajność?

1. W większości przypadków optymalizacja jest nieopłacalna, dokupienie sprzętu jest tańsze niż czas pracy programisty
2. Jeżeli projekt okaże się niespodziewanym sukcesem i okaże się że warto go optymalizować to wtedy bawisz się w cache'owanie wszystkie co się da
3. Jeżeli w projekcie wydajność jest kluczowa to zrezygnuj z ORM'a

Cytat
słaby to jest Doctrine


najwidoczniej jeszcze słabo znasz propela winksmiley.jpg




--------------------
Go to the top of the page
+Quote Post
xdev
post 17.09.2011, 20:26:47
Post #17





Grupa: Zarejestrowani
Postów: 39
Pomógł: 3
Dołączył: 17.09.2011

Ostrzeżenie: (0%)
-----


PDO pewnie ma "łatkę" wolnego bo gdyby puścić benchmark najprostszego api (mysql_*) to czasy byłyby prawdopodobnie jeszcze lepsze. Kiepskie wyniki ORM-ów wcale mnie nie dziwią. PHP do najszybszych języków nie należy, kod wypluwany przez ORM-y też z wydajnością ma niewiele wspólnego.

Z resztą żadna warstwa abstrakcji ani wirtualizacji jeszcze nigdy niczego nie przyspieszyła. Założenia przy tworzeniu takich systemów to nie wzrost prędkości.

Oczywiście macie rację, że czas programisty kosztuje dużo więcej niż nawet najlepszy sprzęt i gdyby kod był nawet 10 razy wolniejszy ale projekt można byłoby skończyć tydzień szybciej to by się pewnie w wielu przypadkach opłaciło. Jednak problem jest inny. SQL to świetny model, OOP do którego tłumaczy ORM jest strasznie "drewniane". Może wam się wydaje, że zaoszczędzicie trochę czasu na pisaniu prostych selectów po kluczu, ale szybko zrozumiecie, że kiedy trzeba zrobić coś bardziej skomplikowanego to SQL jest nie dość, że dużo prostsze to jeszcze bardzo elastyczne i łatwe w modyfikacji.

Lepiej bardzo dobrze poznać SQL niż uczyć się redundantnej technologii której jedynym plusem jest to, że chroni osoby całkowicie zielone przed SQL-Injection. Ściągnąć sobie jakieś dobre narzędzie do graficznego projektowania baz, żeby nie tracić czasu na klepanie w kółko tego samego. Zwłaszcza, że jeśli zaczniecie jakieś bardziej skomplikowane projekty to i tak się skończy na analizie czystego SQL-a i pisaniu kwerend z palca (macie 5 krotny spadek wydajności dla prostych selectów, dla bardziej skomplikowanych analiz danych zależnie od optymalizacji kwerendy mogą się wykonywać 2 dni albo 2 minuty).

Dla tabel poniżej 10-100k wierszy optymalizacja nie ma znaczenia, dlatego wydaje się, że ORM jest taki fajny... nawet nie taki wolny i tak się w nim szybko pisze projekty. Projekt się rozrośnie, będziecie brali ten garbage który wypluwa wasz ulubiuony ORM, wrzucali przed to EXPLAIN i klęli tongue.gif

http://en.wikipedia.org/wiki/Technical_debt
Design debt... szybciej stworzycie pierwszą wersję skryptu, ale za złą decyzję projektową jaką jest w większości wypadków użycia ORMa (jakiegokolwiek) będziecie "płacić" wolnym rozwojem projektu przez cały cykl życia kodu.
Go to the top of the page
+Quote Post
javert
post 21.04.2015, 10:08:21
Post #18





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.12.2014
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Czy może ktoś porównywał najnowsze wersje Propela i Doctrine - czyli dwójki? Jestem na etapie decyzji, który ORM wybrać - Doctrine2 czy Propel 2, ale dosłownie nigdzie w sieci nie ma żadnych testów i ocen. Są tylko wpisy na temat starych wersji. Znalazłem artykuł Side by side: Doctrine2 and Propel 2, ale on zawiera porównanie cech i funkcjonalności. Wiem, że to też jest bardzo ważne, ale chciałbym, żeby ktoś mi wyraźnie napisał, którego ORM użyć (czyli który ORM jest lepszy jego zdaniem) i dlaczego. Ktoś pomoże?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 11:06