Go Lang: DB vrstva a migrace

Go Lang: DB vrstva a migrace
« kdy: 07. 01. 2020, 13:39:06 »
Ahoj,
vyvíjím primátně v php a docela se mi líbí golang, ale nemůžu najít (tedy spíš se rozhodnout) pro žádnou konkrétní db vrstvu a migrace. Na svých php projektech používám Doctrinu2 a Nextras migrations, kde udělám změny v entitách a mapování, Doctrina mi vyhodí sql pro aktualizaci a to přidám jako novou nextras migraci.

Proč používám nextras migrace, když doctrina má vlastní:
  • jsou podstatně striktnější, když omylem změnim nějakou již puštěnou migraci a migrace pustim, nextras se může potento
  • rozlišuje změny strukturu schéma a základní data (např číselníky) a má i dummy data pro testovací účely, tedy struktura vypadá nějak migrations/{structure,basic-data,dummy-data}; u doctriny lidi používají fixtures, který se mi moc nelíbí
  • umí reset (rozhrabu si data, pustim reset a migrace mi kompletně smaže a vytvoří schéma a znovu ho naplní basic a případně i dummy daty)

Nevíte někdo o nějaké podobné alternativě v golangu? Případně co používáte vy? Prošel sem víceméně všechny migrační nástroje, či knihovny na awesome go, ale víceméně žádná mi uplně nevyhovuje. Přemejšlim, že bych si napsal vlastní za pomoci knihovny darwin a nějaký cli knihovny, ale do toho se mi moc nechce :D

Co očekávám od db vrstvy... popravdě nevim. Asi by mi stačil nějakej sql builder, ale také se nejsem schopný rozhodnout. Jediný, co by mi asi trošku chybělo, by byla změna entity a následný nechání si vygenerování sql pro update schema, kuli tomu jedinému stále zvažuji orm. Jaký používáte vy sql builder, nebo orm?

Díky
« Poslední změna: 07. 01. 2020, 13:54:15 od Petr Krčmář »


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:golang - db vrstva a migrace
« Odpověď #1 kdy: 07. 01. 2020, 13:56:28 »
Já bych od použití ORM v případě Go odrazoval, ten jazyk má dost pomalou reflexi. Osobně používám v malém měřítku buď wrapper nad SQLite, ten ale vyžaduje cgo, což není zrovna ideální, nebo nověji BoltDB (ta ale není relační), nebo prostě přímo SQL. SQL builder, pokud je potřeba, bych psal vlastní, to bude rychlejší než se plácat s externí knihovnou.

alex6bbc

  • *****
  • 1 615
    • Zobrazit profil
    • E-mail
Re:Go Lang: DB vrstva a migrace
« Odpověď #2 kdy: 07. 01. 2020, 14:03:41 »
musite mit db?
nejde pouzit jiny typ uloziste?

https://github.com/dgraph-io/badger
« Poslední změna: 07. 01. 2020, 14:05:21 od alex6bbc »

Re:Go Lang: DB vrstva a migrace
« Odpověď #3 kdy: 07. 01. 2020, 15:04:10 »
Možná jsem mohl zmínit, že bych rád zůstal u webového vývoje, kde si často nedokážu představit řešení bez relační nebo alespoň dokumentové db :))

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Go Lang: DB vrstva a migrace
« Odpověď #4 kdy: 07. 01. 2020, 15:42:09 »
Možná jsem mohl zmínit, že bych rád zůstal u webového vývoje, kde si často nedokážu představit řešení bez relační nebo alespoň dokumentové db :))
Jako dokumentová DB se dá použít každé KV úložiště s uspořádanými klíči, jako ta BoltDB. Jinak jak říkám, obvyklé řešení je použít standardní API a prostě se připojit k DB serveru, kde spravovat schéma přímo.


Re:Go Lang: DB vrstva a migrace
« Odpověď #5 kdy: 08. 01. 2020, 09:24:44 »
zavádět zvyky z jednoho jazyka do druhé není vždy nejlepší nápad, v tomhle případě rozhodně ne. Go není s ORM zrovna kompatibilní a nebylo na to v návrhu nijak myšleno, pokud chceš ORM, máš na výběr z nepřeberného množství nástrojů nad javou, ruby a python.

Jaké pak bude mít výhody pro tebe go, když v něm budeš chtít psát jako v php? Není lepší pak již zůstat u php?

Re:Go Lang: DB vrstva a migrace
« Odpověď #6 kdy: 08. 01. 2020, 09:50:07 »
zavádět zvyky z jednoho jazyka do druhé není vždy nejlepší nápad, v tomhle případě rozhodně ne. Go není s ORM zrovna kompatibilní a nebylo na to v návrhu nijak myšleno, pokud chceš ORM, máš na výběr z nepřeberného množství nástrojů nad javou, ruby a python.

Jaké pak bude mít výhody pro tebe go, když v něm budeš chtít psát jako v php? Není lepší pak již zůstat u php?

Jak jsem zmínil, pravděpodobně by mi stačil sql builder. Z předchozí odpovědi od Idrise jsem pochopil, že ORM v Go neni uplně ideální, tak by mě teď spíš zajímal nějakej sql builder; zatim na todle tema je jedno doporučení a to psát si vlastní. Nad ORM jsem přemejšlel jen z toho důvodu, že by mi to zjednodušovalo udržování db, ale to neni nic nutnýho.

K tomu tahání zvyků z jednoho jazyka do jinýho, proto jsem tady, abych se zeptal :)

Re:Go Lang: DB vrstva a migrace
« Odpověď #7 kdy: 08. 01. 2020, 13:43:47 »
pokud ti nestačí výchozí database/sql (https://golang.org/pkg/database/sql/) a ani poměrně slušná extenze https://github.com/jmoiron/sqlx, můžeš použít https://github.com/Masterminds/squirrel



Re:Go Lang: DB vrstva a migrace
« Odpověď #8 kdy: 08. 01. 2020, 15:00:17 »
pokud ti nestačí výchozí database/sql (https://golang.org/pkg/database/sql/) a ani poměrně slušná extenze https://github.com/jmoiron/sqlx, můžeš použít https://github.com/Masterminds/squirrel
Souhlas, jen bych doplnil, že sqlx a squirrel se vzájemně nevylučují  ;)
A po migrace mohu doporučit https://github.com/golang-migrate/migrate

Re:Go Lang: DB vrstva a migrace
« Odpověď #9 kdy: 21. 01. 2020, 10:27:55 »
Ahoj,
děkuji všem za vaše příspěvky, nakonec jsem se tedy rozhodl použít pro migrace migrate a pro sql sqlx.

Udělal jsem si dva adresáře s migracema, jeden obsahuje migrace struktur i základních dat a druhý dummy data. Na vývojovym prostředí tedy pouštim navíc ještě migrace z dummy dat. Tim tedy migrace splňujou veškerou mnou požadovanou funkcionalitu (s drobnym scriptem) a já jsem spokojenej :D