Serializace vs. Textový soubor vs. Databáze – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Serializace vs. Textový soubor vs. Databáze – .NET – Fórum – Programujte.comSerializace vs. Textový soubor vs. Databáze – .NET – Fórum – Programujte.com

 

Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #1
-
0
-

Dobrý den,

chtěl bych se zeptat - co, kdy a proč? Tedy představu mám, ale nejsem si nikdy jist, zda-li jsem použij nejvhodnější řešení. Tedy kdy si vyvtořit vlastní soubor, s vlastním formátem a používat klasicky using(StreamReader ...)? Kdy používat instance a serializovat? A kdy už to bude databáze?

Děkuji.

Nahlásit jako SPAM
IP: 78.136.150.–
liborb
~ Redaktor
+18
Guru
6. 8. 2013   #2
-
0
-

Serializace je proces převodu vnitřního stavu programu do uložitelné podoby (nejčastěji při ukončování programu), ze které se dá tento vnitřní stav znovu obnovit (nejčastěji při spouštění programu).

Vzhledem k tomu, že je zde podpora pro serializaci, tak není nutné znovu vynalézat kolo, tj. není moc důvodů, proč používat vlastní formát.

A kdy to bude databáze? Asi nikdy neb serializovaná data se vlastně používají jen na začátku a na konci programu (principielně) a data z databáze se používají v tomto mezidobí. A dále v databázi tě většinou zajímají výsledná data a nikoliv vnitřní stavy. Samozřejmě, pokud v programu zpracováváš databázová data a místo uložení do databáze použiješ jejich serializaci, tak by ses asi zase mohl hádat :).

Nahlásit jako SPAM
IP: 188.75.135.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #3
-
0
-

Já se ptám, co kdy k uložení použít. Zmínil jsem 3 formáty. Všechny dobře znám - ptám se kdy jaký používat...

Nahlásit jako SPAM
IP: 78.136.150.–
liborb
~ Redaktor
+18
Guru
6. 8. 2013   #4
-
0
-

Všechny dobře znám - ptám se kdy jaký používat...

Odpověděl jsem ti, ale ještě jednou ve zkratce:

1. Serializaci podporovanou v .NET používat k serializaci dat, tj. ukládání/načítání stavu aplikace/programu

2. Serializaci do vlastního formátu - proč?

3. Databáze - zpracovávaná data - SQL příkazy - atd.

Nahlásit jako SPAM
IP: 188.75.135.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #5
-
0
-

Ale ty mě nechápeš. Ptám se, kdy data uložit do textového souboru standardním using(...). Kdy k tomu použít Serializaci. A kdy na obojí kašlat a použít databázi... Stav aplikace mohu uložit do txt když každou proměnnou vypíši na jeden řádek atd. Takže zaznamenat stav jde všemi 3mi způsoby. Proč a kdy ale použít jeden konkrétní?

Nahlásit jako SPAM
IP: 78.136.150.–
Evzen+2
Návštěvník
6. 8. 2013   #6
-
0
-

#5 Matěj Andrle
Do textového souboru v podobě textu se ukládají data, u kterých už nepředpokládáš další zpracování, rádoby export.

Pokud s nimi chceš pracovat, resp. opětovně je načítat, je vhodné je serializovat a pracovat s nimi v XML, protože je snadno deserializuješ, tedy převedeš na objekty.

Databáze umí samozřejmě to samé, ale ta si umí uchovávat konzistentní stavy, takže by nikdy nemělo dojít k poškození dat např. výpadkem elektriky.

Dále taky hlídá integritu dat, pomocí constrainů, primárních a cizích klíčů.

Nespornou výhodou je, že databáze je k tomu optimalizovaná, zrychluje vyhledávání atp.

Obecně bych na kritický data používal jen databázi, nedokážu si představit, že by banka ukládala a načítala z XML.

Evžen

Nahlásit jako SPAM
IP: 193.179.183.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #7
-
0
-

Jenže data mohou ležet minutu, den rok... Ale kyž už něco z aplikace uložím, lze předpokládat, že tyto data budu opět potřebovat. Serailizace je například pomalá. O práci s databází nemluvě. Jediné, čím jsem si jist - textový soubor nebudu používat jako holubník... Pročež se streamem bych nechodil hned do souboru. Tak se zeptám lépe - kde jsou slabiny každého řešení? (rychlost, opakovanost, HDD náročnost,...)

Nahlásit jako SPAM
IP: 78.136.150.–
KIIV
~ Moderátor
+43
God of flame
6. 8. 2013   #8
-
0
-

Slabiny jsou treba pro xml neskutecnej overhead (metadata) ... treba v perlu sem resil ukladani cache a nejrychlejsi byl nakonec JSON (xml nepadalo moc do uvahy protoze bylo priserne pomaly). U xml pak jeste zalezi na pouzitem parseru - obzvlaste pokud je par stovek MB dat, tak to chce neco, co to nenacita cely do pameti ale zpracovava postupne.

Nacitani z textoveho souboru chce obvykle nejakej rychlejsi pristup nez obycejne nacitani pomoci standardnich funkci (pouzit poradne buffery a tak) - ale je to jen text... jak jsou v tom binarni data, je to obvykle necitelny a ne zrovna moc pouzitelny...

Jeste muzes zvazit objektovou databazi... byvaji perzistentni a na "dotazy" ti vyflusnou rovnou objekty...

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #9
-
0
-

Jenže abstrakce stojí HDD. Dostává mne Word. Tak nějak mi nejde do hlavy, proč každý styl musí být opakován xy. (Proč neudělá hlavičku se styly - a jako v CSS, každý textový/obrázkový/... blok bude mít ID/class.) Tudíž jaký je kompromis mezi abstrakcí, rychlostí a stabilitou? (bezpečností)

Nahlásit jako SPAM
IP: 78.136.150.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #10
-
0
-

Jo a lze nějak lépe, než modifikátory, řešit souběh?

Nahlásit jako SPAM
IP: 78.136.150.–
liborb
~ Redaktor
+18
Guru
6. 8. 2013   #11
-
0
-

#5 Matěj Andrle
Evzen už ti na něco odpověděl. Pokud data předáš něčemu, co má v sobě zabudovaný zálohovací mechanismus, tak si samozřejmě ještě polepšíš. Jen tak mimochodem, v MFC se k serializaci používala binární forma, která je samozřejmě krajně nebezpečná, protože když provedeš vypnutí aplikace a zappnutí nové aplikace, tak ti nebudou sedět změněné velikosti a délky atributů. Ze stejného důvodu je i textový soubor špatně. Samozřejmě si tam můžeš přidat metadata, ale to už je lepší použít XML. I proto se používá.

A jinak k tomu dalšímu přeskakování z tématu na téma v tomhle vlákně. Serializace je z principu pomalá, ale používá se k jistému účelu. Pokud máš program, který potřebuje uložit několik MB dat jako svůj vnitřní stav několikrát za sekundu, protože nemáš zálohování systému, tak to jistě budeš optimalizovat, protože se ti pokaždé nezmění celých x MB dat. Serializace dat se používá k trvalému uložení stavů, tj. data je potřeba uložit až ve chvíli, kdy víš, že program končí.

Monžá by stálo za to vědět, co vlastně chceš udělat, protože na obecnou otázku dostaneš obecnou odpověď.

Každé řešení má samozřejmě svoje výhody a nevýhody. Textový soubor je třeba nepoužitelný (viz výše). XML je sice ukecané, ale kdo dneska řeší zabrané místo na HDD. Jde o jednoduchost.

A poslední věc - na souběh tu jsou synchornizační prostředky - semafor, mutex, kritcká sekce .... což vede od serializace dat k serializaci procesů.

Nahlásit jako SPAM
IP: 188.75.135.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #12
-
0
-

Jaké přeskakování? Chtěl jsem od začátku odpověď na to, který z těch 3 kdy použít... Akorát ten souběh mě teď ještě napadl. Mohl by jsi k němu přiložit nějaké materiály týkající se .NET - nejlépe C#? Dále XML - přecijen jsi to řekl příliž zaujatě. Parsovat a validovat XML - to už je jiná, že... To už raději popadnu databázi, která může být taktéž použita pro vylití aplikace a přitom se mi postará o validaci atd. Já jsem tedy zase naopak zaujatý proti XML... I když musím přiznat, že databáze zase ráda nulluje... Jen nechápu narážku na ukládání streamu do DB. Stačí převést na pole byte a není probém - ne?

Nahlásit jako SPAM
IP: 78.136.150.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #13
-
0
-

Mimochodem jsem Unixák - takže pro mě je proces taktéž soubor...

Nahlásit jako SPAM
IP: 78.136.150.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
6. 8. 2013   #14
-
0
-

Ptal jsem se proto, že jsem se již mnohokrát rozhodoval, co použiji tentokrát...

Nahlásit jako SPAM
IP: 78.136.150.–
host
~ Anonymní uživatel
17 příspěvků
6. 8. 2013   #15
-
+2
-
Zajímavé

#14 Matěj Andrle
Rád čtu tvoje diskuze, ty se dycky se všema pohádáš, protože "ti nikdo nerozumí" :D

Nahlásit jako SPAM
IP: 88.102.250.–
liborb
~ Redaktor
+18
Guru
7. 8. 2013   #16
-
0
-

#12 Matěj Andrle
Jaké přeskokování? Vlákno je o serialiaci a spol. a najednou Word a CSS a pak zase souběh .... skoro to vypadá na neschpopnost udržet myšlenku ;).

Mám pocit, že jsem napsal všechno, co se dalo. Serializace dat, tak jak jí chápu, se používá k uchování vnitřního stavu aplikace na dobu neběhu aplikace. Tudíž tě může maximálně zajímat, jak moc je to uložení bezpečné vzhledem k aplikaci. Bankovní aplikace neděláš a nikdy dělat nebudeš, takže ti stačí XML. Ale pokud to chceš mastit do svého oblíbeného jednosloupcového textového souboru, tak ti v tom nikdo nezabrání.

Jinak co se týká XML. Ano, mám XML rád, protože když poznáš jeho sílu (při jeho jednoduchosti), tak se ti otevřou nové možnosti. Parsování a validování k tomu patří a není to vůbec žádný problém. Pokud potřebuješ rychlý parser, tak zkus AsmXML. S největší pravděpodobností to bude pořád rychlejší než tvoje ukládání do souboru v .NET :). 

Pokud něco postavíš na XML, tak máš zaručenou (pokud tedy návrh struktury XML dokumentu neuděláš nějak extra blbě) zpětnou (i dopřednou) kompatibilitu. U té serialiace to není tak vidět, ale pokud ukládáš data ze svého programu do XML, tak s nimi následně můžeš dělat moc věcí, a to ti umožňuje spousta nástojů a XSLT. Třeba já jsem postavil na XML celý jeden velký projekt - vše se ukládá v XML. S rychlostí není problém i když jsou projektové soubory v jednotkách MB. A co jsem za to získal? Třeba to, že vezmu XML soubory projektů, vhodnou XSL transformací z nich udělám DocBook, ze kterého nechám vygenerovat dokumentaci (HTML, CHM a přes FO i PDF). Nebo si nechám generovat XSLT soubory pro převod mezi jednotlivými typy podporovaných jednotek. Je to rychlé, mě to nic nestojí a dělá se to automaticky.

XML se používá i na grafiku (SVG), dájí se s ním dělat weby (spolu se šablonami XSLT), používá se ke komunikaci (XMPP), různé otevřené formáty jsou na něm postavené (OpenOffice apod.) atd. atd.

Ale pokud si unixák, tak chápu, že máš z XML pupínky.

No a co se týká materiálů na souběh v .NET, tak od toho tu je MSDN, tam toho najdeš plno (třeba tady).

Nahlásit jako SPAM
IP: 188.75.135.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
7. 8. 2013   #17
-
0
-

XML sem rozhodně patří - vždyť můžeš serializovat do bytů, nebo do SOAP. A CSS jsem tu vůbec neřešil - poukazoval jsem na zbytečné plácání HDD - a že by se to dalo vyřešit systémem CSS. Ale nerozebíral jsem podrobněji CSS... Držím se jednoho tématu. Dokonce i souběh neodmyslitelně patří k serializaci. Jestli nechápeš, tak serializace vezme paralelní data a zarovná je do řady. A protože jsou ta zdrojová data paralelně, souběh nastat může... A vůbec, když budu chtít ukládat stream atd. Ne - rozhodně se jedná o jedno širší téma...

Nahlásit jako SPAM
IP: 78.136.150.–
liborb
~ Redaktor
+18
Guru
7. 8. 2013   #18
-
0
-

#17 Matěj Andrle
Máš pravdu, je to tak jako vždy - ty se tu ptáš, proto tomu rozumíš, kdežto já odpovídám, tak o tom nemám ani páru   .

Serializace obecně není o datech. A stejně tak jde jen o to, jak se serializace provede. Třeba u takového STA thread modelu v COM se k serializaci procesů využívá smyčka zpráv, která je jedna a všechno se vykonává hezky za sebou.

Nahlásit jako SPAM
IP: 188.75.135.–
Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
7. 8. 2013   #19
-
0
-

Ano - rozumím tomu. Zde se pouze ujišťuji, zda-li volím vždy vhodné řešení problému... Jedná se mi jen o váhání mezi způsobem uložení...

Nahlásit jako SPAM
IP: 78.136.150.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Textový soubor do 2D pole — založil Gregory

SOUBOR.BAT>SOUBOR.EXE — založil wokena

Serializace — založil Sony

Serializace v C++ — založil Deril

Serializace XML — založil Jerryss

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý