Diskuze: Doporučení No-SQL object databáze pro použítí v .NETu?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 24 zpráv z 24.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zkus to trošku více rozvést, co třeba myslíš tím
jeden objekt má haldy vlastností s proměnou délkou.
?
Tím mám na mysli např Listy.
Jde o RPG hru, takže jeden hráč má pod sebou například postavičku, kterých je proměnlivý počet a ta má pod sebou určitá kouzla a určité vybavení, určitý inventář s proměnlivým počtem slotů atp.
Jasně, že se to dá řešit klasickýma tabulkama a vazbami jako to má 99% aplikací a firem, nicméně mnohem rád bych vyzkoušel objektové databáze, které mi v tomhle přijdou daleko blíže principu OOP, než zažité SQL
Zatím mě asi velmi zaujala tahle databáze https://cs.wikipedia.org/wiki/MongoDB
Navrhni si tu databázi v jsonu i v sqlku na jednoduchém příkladu ("objektu"). Zamysli se, jak projekt poroste a jak k tomu budeš přistupovat. Budeš potřebovat vazby? Něco jimi hlídat? Chceš škálovat? jak? redundance?
.NET nepoužívám, ale asi budeš chtít aby existoval driver pro zvolené úložiště. Na to je také dobré dávat pozor. V případě sql databáze možná i nějaké ORM ( i když může být nakonec brzdou výkonu, navzdory rychlejšímu vývoji...)
No-SQL přístupů existuje také celá řada, proto musíš hlavně vědět co chceš
O to právě jde, navrhnout jeden json objekt mi přijde úplně krásné a přehledné, než mít data v xx tabulkách rozházené, tak že pro nezasvěceného člověka je to akorát halda IDček odkazující na jiné tabulky a pořád dokola. (příklad. hráč má xx postav, ty mají xx kouzel, ty mají xx věcí v inventáři atp.)
Knihovna pro databázového klienta v c# je samozřejmost
Preferuji jednoduchý přístup pro ukládání a načítání dat vcelku rozsáhlých větvících se objektů, které půjdou snadno rozšiřovat podle nových požadavků aplikace což mě jako pro databázového neznalce přijde v MSSQL nebo MySQL apod. daleko složitější
Co se týče rychlosti, ta hádám, že není u tahového RPG, kde na víc se většina potřebných transakcí do DB načte ihned při přihlášení uživatele do hry, vůbec prioritou.
Trošku se mi zdá, že mícháš víc věcí dohromady. To, co se tobě zdá "krásné a přehledné", může jinému připadat jako chaos. Ale hlavně "nezasvěcenému člověku" je úplně jedno, jestli se data berou z jedné hromady, nebo jestli na pozadí hry se data tahají z tabulek. Ten, kdo bude hru hrát, chce vidět jak se ta hra dobře hraje a ne jak ten kašpárek na pozadí ta data získá, jakým způsobem se ukládají a načítají jednotlivé stavy apod.
Osobně si teda myslím, že každému nováčkovi, který nikdy neviděl RDBMS systém, tak mu přijde objekt v jsonu daleko přehlednější než 10 tabulek s vazbami.
Nezasvěceným člověkem samozřejmě nemyslím hráče, ale člověka, který například nějak minimálně spolupracuje na vývoji. Mě fakt nenapadlo, že to někdo pochopí jako hráče, to pardon
To je tvůj osobní názor. Dovol abych také jeden přidal. Zvlášť
nezasvěcený člověk dovede špatně navrhnout no-sql databázi. V sql je
jistá šance, že tě to donutí navrhnout aspoň trochu slušně. A i v no-sql
(třeba mongo) se používá více kolekcí a reference mezi nimi.
Proto jsem ti psal ať si zkusíš nějakou jednoduchou entitu reprezentoval
oběma přístupy a zamyslíš se nad tím jak to bude vypadat dál
No to už jsem prakticky zkusil. V aplikaci mám objekt hráčův profil, který je prakticky to nejpodstatnější v celé hře a obsahuje všechny informace o hráči. v MySql mám momentálně tabulku, Profile, která v sobě obsahuje IDčka k tabulce Postavy ty obsahují IDčka k tabulkám kouzla,itemy apod.
Nicméně jsem se taky zasekl jak udělat proměnlivý počet postav pro daného hráče. Což zatím mé znalosti neumožňují implementovat
V Jsonu to z mého pohledu vypadá daleko přehledněji vše v jednom objektu tak jak se s tím pracuje v aplikaci.
postni co máš. Mrknem na to.
Nic konkrétního nejspíše ani nemám, tohle je to z čeho momentálně vycházím:
zde JSON podoba:
{
"name": "",
"account_level": 0,
"character_1": {
"name": "",
"strength": 10,
"vitality": 10,
"spell_1": {
"dmg": 5
},
"spell_2": {
"dmg": 10
},
"spell_3": {
"dmg": 15
},
"spell_4": {
"dmg": 20
},
"spell_5": {
"dmg": 25
}
},
"character_2": {...
A v příloze SQL podoba.
Mně osobně přijdou pohodlnější a přehlednější SQL tabulky (JSON
jsem zatím nikdy nepotřeboval, tudíž ho neumím).
"Proměnlivým počtem postav" myslíš, že hráč může mít najednou při
jedné hře přiřazeno více postav? V SQLku by byla tabulka
hráči, tabulka postavy a "vazební" tabulka
kde by bylo ID hráče a ID postavy a tím pádem bys mohl hráči přiřadit
kolik postav chceš, resp.kolik jich je v té tabulce "postavy"...
Netuším, jak funguje JSON a jak to tam je s případným přidáváním či
odebíráním dalších vlastností či jiných požadavků na rozšíření,
ale u SQL je to (alespoň pro mě) naprosto jednoduché...
Netuším jak funguje vnitřně např ta MongoDB, který ten JSON formát používá, ale standardně si prostě ubereš nebo odebereš parametr jak potřebuješ a uložíš znovu.
Hmm to zní zajímavě, v tomhle je ten problém, že jsem vůbec nevěděl, že se ty vazby např dělají další tabulkou, proto narážím na to, že pro člověka kdo s tím neumí to moc snadnější a pohodlnější není. Zvlášť když jsem na to nenašel nějaké hezké návody. Všude včetně IT networku jsou detailní návody, na instalaci, vytvoření tabulek, selecty, inserty atp. Ale nějaké tutoriály jak na návrhy komplexnější databáze s nějakými příklady jsem bohužel nenašel.
Ty "návrhy komplexnější databáze" trošku paradoxně většinou nejsou
uvedeny u databází, ale spíše u konkrétních programovacích jazyků,
protože to bývá spojeno s programováním nějaké konkrétní aplikace a
tvorba DB pak závisí na potřebách "té" aplikace. Ta vazební tabulka se
dělá jen v případě vazby M:N, tzn., třeba u tvého případu jeden hráč
může mít více postav a zároveň jedna postava může figurovat u více
hráčů. Pokud by měl jeden hráč pouze jednu postavu, dal by se jen do
tabulky "hráči" cizí klíč - ID postavy...
Ale každému může vyhovovat jiný přístup a je na každém, aby si vybral
tu nejvhodnější variantu pro svou aplikaci...
No asi jsem přesvědčen o tom, že MySQL tabulka dokáže být krásně přehledná, ale to bych se to musel prvně naučit.
Hlavně vůbec nechápu všechny ty druhy klíčů o kterých mluvíš nebo spíše jejich použití v praxi.
A jak říkal Jiří Sedláček mám právě daleko větší obavu, že tu SQL databázi navrhnu úplně hrozně, že když se na to někdo používá tak se zděsí, a bude to nemožné zpravit jinak než celé zahodit.
json třeba takhle?
https://www.itnetwork.cz/dev-lighter/930
Jo vlastně pole, má fixní pozice, takže to nemusím IDčkovat ano správně.
Možná to z mých komentářů nebylo úplně zjevné, ale jsem spíše zastánce sql přístupu. Nicméně rozhodnutí je na Tobě
No jo, asi u ní i zůstanu tedy, nicméně už teď si myslím, že je ten můj návrh špatný, jak jsem řekl jsem v tom úplný nováček. Když se nad tím později zamyslím a vytvořím nějaký návrh pomohl by jsi mi říct co je špatně nebo dobře?
Ano, ale je třeba znát i nějaký koncept. Čeho chceš dosáhnout, jinak se nad tím nedá moc uvažovat
No tak to je jasné, že k návrhu přidám i stručně pár vět co si od toho představuji.
U návrhu DB je potřeba postupovat "odzadu". Musíš vědět, jaká data chceš, aby ti program vyplivnul a podle toho pak určíš, jaká data potřebuješ do programu nasypat. Tím pádem budeš pak vědět jaká data by měla DB obsahovat...
Zobrazeno 24 zpráv z 24.