Ako riesit databazu – Dibi, Doctrine, Nette Database – co kedy pouzit?
- xHRo
- Člen | 13
Ahojte,
snazim sa prist na to, ako najlepsie pristupovat k databaze a spravovat ju. Trochu som tu posurfoval po fore a zistil som, ze je s Nette spojenych viacero moznosti. Mam v tom ale riadny chaos, tak by som chcel poprosit niekoho, kto sa vyzna, aby mi nejake veci objasnil:
- Nette Database – defaultny pristup k databaze. Docital som sa vsak, ze vela ludi tuto moznost odsudzuje, najma pre vacsie projekty. Preco je to tak?
- ORM databaza – Doctrine 2 – v com su vyhody tejto databazy? Je to rychlost alebo len syntax? Nasiel som k tomu velmi obluveny modul Kdyby .
- Dibi – k comu sluzi? Ide tam len o zjednodusenie syntaxe? V com je lepsie to pouzit ako Nette Database?
Dakujem.
- Šaman
- Člen | 2659
- NDb (resp. NDb\Table): Databázová vrstva přímo v Nette. Nejmladší a dlouhou dobu nejhůře odladěná a tedy nejproblematičtější část frameworku. (Před třemi lety.) Jejím autorem není David. Teď bych ji na menší projekty klidně použil. Problém je, že sám autor ji údajně opustil a vyvíjí nad ní ORM. (Resp. mám takový dojem, že se to tu řešilo. Zdroj se mi teď nechce hledat.)
- Zkoušel jsem různá ORM, ale dnes bych šel rovnou do Doctrine. Asi opravdu platí, že každý tam jednou dojde. Výhody jsou v tom, že je to plnohodnotné ORM. Rychlost bych řekl že není silná stránka, tou je objektovost a čistý návrh.
- Dibi je starší databázová vrstva od Davida, která se nikdy do Nette
nedostala, ale je stabilní a odladěná. Je stále poměrně nízkoúrovňová
(tedy více SQL syntaxe, zato je rychlá). IMHO stále dobrá volba, pokud
chceš být blizko databázi, ale nechceš používat nativní query a
procedurální PHP funkce. Obdobou je samotná
Nette\Database
bez\Table
- Namespace
- Člen | 80
Nette Database není vůbec špatná věc. Jen po čase narazíš třeba na problém s migracemi, verzováním databáze atp. Zas na druhou stranu je to celkem rychlé, intuitivní a stabilní řešení.
Doctrina je o jiném přístupu k databázi (ORM). Osobně si myslím, že člověk se k Doctrině musí dostat nějakou cestou. Když se teď hned začneš učit Doctrine, tak pravděpodobně neoceníš, co všechno přináší a co dělá jinak. Doctrina je nástroj, o kterém musí člověk vědět, že ho opravdu chce.
Dibi je předchůdce NTDB. Na pár projektech ji používám a jsem spokojený (je stále aktivně udržovaná).
EDIT: Jinak o Doctrine je docela pěkné video https://www.youtube.com/watch?…
Editoval Namespace (19. 7. 2015 12:50)
- Šaman
- Člen | 2659
Namespace napsal(a):
Dibi je předchůdce NTDB. Na pár projektech ji používám a jsem spokojený (je stále aktivně udržovaná).
Není předchůdce, je to řešení, které si jde jinou cestou. Resp. /Table jde úplně jinou cestou, ale tutoriály na NDb téměř vždy popisují magickou NDbT. Pěkné shrnutí je tady.
- Namespace
- Člen | 80
Šaman napsal(a):
Namespace napsal(a):
Dibi je předchůdce NTDB. Na pár projektech ji používám a jsem spokojený (je stále aktivně udržovaná).
Není předchůdce, je to řešení, které si jde jinou cestou. Resp. /Table jde úplně jinou cestou, ale tutoriály na NDb téměř vždy popisují magickou NDbT. Pěkné shrnutí je tady.
Aha, tak to se omlouvám za dezinformaci. Díky
- xHRo
- Člen | 13
Dakujem za rychle odpovede :) Kazdopadne, zatial som sa k ORM nedostal, takze keby si mam vybrat medzi klasickou NDB alebo Dibi, co by som mal volit? Ja s Dibi nemam ziadne skusenosti, iba som ju videl pouzitu v jednom projekte, tak ma to zaujalo. V com su jej vyhody oproti NDB? NDB mi pride lahsie implementovatelna, tak ze ci ma zmysel sa ucit Dibi..
- Pavel Macháň
- Člen | 282
xHRo napsal(a):
Dakujem za rychle odpovede :) Kazdopadne, zatial som sa k ORM nedostal, takze keby si mam vybrat medzi klasickou NDB alebo Dibi, co by som mal volit? Ja s Dibi nemam ziadne skusenosti, iba som ju videl pouzitu v jednom projekte, tak ma to zaujalo. V com su jej vyhody oproti NDB? NDB mi pride lahsie implementovatelna, tak ze ci ma zmysel sa ucit Dibi..
Pokud si s NDB pracoval tak použij ji. Osobně preferuju Dibi z důvodu, že v době kdy jsem řešil co použít bylo NDB strašně zabugované. Pidi projekty dělám s LeanMapperem (je postavený nad Dibi) a větší projekty nad Doctrine.
V dnešní době bych se NDB opravdu nebál.
- hrach
- Člen | 1838
Protoze jsem nenasel vhodny nastroj, napsal(i) jsme (s Jan Tvrdík) vlastni stack:
- Nextras/Dbal – neco jako dibi, akorat lehce bezpecnejsi a s lepsim API.
- Nextras/Orm – ORM, velmi efektivni prace s db, cisty navrh, Identity mapa.
- Nextras/Migrations – migrace (nejsou zavisle na dbalu/orm, lze je pouzit i pro NDB)
- Šaman
- Člen | 2659
@Hrach: Jaká je tedy pravděpodobná budoucnost NDb(T)? Jestli ty,
jako autor si vyvíjíš Dbal a ORM na ním, proč my ostatní bychom měli
důvěřovat NDbT?
Osobně jsem byl vždy spíš zastáncem, aby Nette obsahovalo Dibi, než
NotORM, čemuž by docela odpovídal ten Dbal (ještě jsem ho nezkoušel, ale
vypadá dobře). Tedy tenkou a nemagickou vrstvu pro objektovou a bezpečnou
komunikaci s databází. A ostatní vrstvy (Ormy, NotOrmy, pseudoOrmy ala
YetOrm) by si každý mohl natáhnout ve zvláštním balíčku.
P.S. Můžeš nám stručně shrnout, proč používat Dbal a nikoliv NDb (bez T)? Jestli to dobře chápu, tak spolu s Dibi jsou to tři knihovny s velmi podobnou syntaxí i použitím. Díky.
- hrach
- Člen | 1838
@Šaman: shrnu proc jsme pro ORM vytvorili novou knihovnu a nepouzily NDB/dibi:
- dibi: nema prilis mnoho testu, ma velmi starou architekturu (napr. fetchovani resultu znamena, ze se clonuje driver);
- dibi+ndb: zadna (az chybna) podpora pro praci s casovymi udaji – ve smyslu timezone;
- ndb: chybejici podpora modifikatoru pro scalarni typy;
- dibi: v nekterych pripadech je jeho chovani nebezpecne, protoze predany argument zpracovava aniz by melo specifikovany modifikator;
- dibi: chybejici query builder;
- ndb: chybejici podpora pro ruzne typy joinu v SqlBuilderu; naopak v nem prebyva funkcionality, kterou vubec nebylo potreba;
- ndb: pradivny, az nebezpecny, zpusob escapovani;
To jsou argumenty ktere nemusi byt pro samostatne uziti podstatne. :)
K budoucnosti NDB: koncept je to velmi pekny a mnohdy funkcni. Osobne jsem
ho opustil z politickych duvodu (zpusob vyvoje s DG, jina predstava
o budoucnosti) a osobnich duvodu (chtel jsem vice ORM, nestacila mi
funkcionalita). DG se jasne vyjadril, ze NDB bude podporovat dal, implementoval
i nejake nove modifikatory ?values
, etc. Na druhou stranu,
vnitrnosti NDB jsou navrhove zprasene a neni je mozne opravit – k tomu viz.
muj clanek. Osobne, stavet na nem nove aplikace nevidim jako
chytre rozhodnuti.