Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Doctrine, wydajność -> duże projekty, Czy mimo wysokiego zapotrzebowania na pamieć warto używać Doctrine?
Sajrox
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Witam,

Od kilku dni szukam coś o Doctrine oraz zastosowania tej biblioteki w dużych projektach.
Generalnie chodzi o to że Doctrine zużywa ponad 4 razy więcej pamięci niż użycie standardowych funkcji w php.

Na co dzień używam swojej własnej biblioteki do obsługi bazy danych z wykorzystaniem PDO i średnio zużycie pamięci wynosi około 1400 kb.
Po zainstalowaniu Doctrine zużycie pamięci przy jednym zapytaniu SELECT wzrosło do około 4500 kb.

Co o tym sądzicie, jak może to wpłynąć na duży projekt z dużym ruchem. Niestety 3 krotne zwiększenie zużycie pamięci może szybko spowodować że serwer może nie wyrobić.

Chciałbym się zapytać o wasze zdanie w tej sprawie, czy mimo tego Doctrone można śmiało używać w dużych projektach (także małych) bez zamartwiania się że serwer może nie dać rady ?

Wydaje mi się że przy np 1000 użytkownikach mogą być już problemy gdyż 4500 kb x 1000 = ok 4 GB.

Oczywiście wiem że można zastosować cachowanie, jednak tutaj chciałbym to wykluczyć i podyskutować o zastosowaniu Doctrone bez cache i innych dopalaczy.

Ciągle się wacham aby na stałe zacząć używać tej biblioteki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
murwazy
post
Post #2





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

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


Cytat(Sajrox @ 31.07.2009, 11:11:40 ) *
Ewentualnie gdyby ktoś miłą inny system cache do zaproponowania to czekam na sugestie np. jak korzystać z SqLite cache.  Może jakiś przykład kodu ? Na pewno się przyda  (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


w manualu masz wszystko...

  1. <?php
  2. $conn  = Doctrine_Manager::connection(new PDO('sqlite::result_cache.sq'), 'sqlite_cache_connection');
  3. $cacheDriver = new Doctrine_Cache_Db(array('connection' => $conn, 'tableName' => 'cache'));
  4. // za pierwszym razem odkomenuj te linie, trzeba stworzyc tabele
  5. //$cacheDriver->createTable();
  6.  
  7. $db = Doctrine_Manager::connection("mysql://user:pass@host/db", 'mysql');
  8. Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE, $cacheDriver);
  9. Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE_LIFESPAN, 3600);
  10. ?>


a pozniej juz uzywasz normalnie

  1. <?php
  2. $temp = Doctrine_Query::create()->from('Color c')->leftJoin('c.Translation t1 INDEXBY t1.lang')->where('c.id=?', $id)->setHydrationMode(Doctrine::HYDRATE_ARRAY)->useResultCache(true)->execute();
  3. ?>


wazne zeby uzywac Doctrine::HYDRATE_ARRAY z danymi, ktore keszujesz, obiektow nie mozesz keszowac (tracisz relacje)

profilerem sprawdzisz skad ida dane (z ktorej bazy bo profiler mozesz podlaczyc tez do sqlite (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ):
http://www.doctrine-project.org/documentat...erview:profiler

  1. <?php
  2. $profiler = new Doctrine_Connection_Profiler();
  3. $db->setListener($profiler);
  4. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.06.2026 - 12:37