Forum Delphi.cz

Databáze => Firebird a Interbase => Téma založeno: Jirka 15-01-2019, 15:04:20

Název: Použítí BLOB nebo velkého VarChar
Přispěvatel: Jirka 15-01-2019, 15:04:20
Ahoj všem
Potřeboval bych ukládat XML soubor do databáze. Soubor může mít maximálně 1000 znaků
S tímto uloženým xml údajem  se už nebude prakticky dál pracovat a slouží pouze pro archivaci,
ale s tabulkou jako takovou (ostatními údaji) se pracuje vcelku intenzivně (přes Left Join)
Co je lepší použít z hlediska rychlosti  načítáním když už ten blob přes left join nebudu používat   ?

Varchar 1000 
nebo 
BLOB textového typu
BLOB SUB_TYPE 1 SEGMENT SIZE 100 CHARACTER SET UTF8 COLLATE UTF8 
Název: Re:Použítí BLOB nebo velkého VarChar
Přispěvatel: vandrovnik 15-01-2019, 15:10:58
Řekl bych, že méně zatěžující bude BLOB, protože tam jsou data jako taková "mimo" a při normálním procházení tabulky se tím pádem nezpracovávají. Navíc nemusíš hlídat, jestli XML po nějakých změnách náhodou už nemá 1020 bajtů...
Název: Re:Použítí BLOB nebo velkého VarChar
Přispěvatel: KarelHorky 15-01-2019, 15:30:34
Určitě Blob, nikdy se nemůžeš spolehnout na to, že za rok, dva se xml nerozkošatí a 1000 znaků bude najednou málo. Do Blobu můžeš zapisovat stále a bez omezení.
Název: Re:Použítí BLOB nebo velkého VarChar
Přispěvatel: Jirka 15-01-2019, 15:53:55
Ano nehlídat velikost může být jako bonus, ale primárně mi jde o rychlost načítání , přenos přes net, případně pamětové nároky při načítání.
Segment size může být v tomto případě třeba 1 ?
Název: Re:Použítí BLOB nebo velkého VarChar
Přispěvatel: Stanislav Hruška 15-01-2019, 16:27:02
Ale pri načítaní predsa definuješ, pomocou Query, že ten XML nechceš. Takže ťahať ho nebudeš! Nech už je v akejkoľvek podobe.
Název: Re:Použítí BLOB nebo velkého VarChar
Přispěvatel: vandrovnik 15-01-2019, 17:03:26
Pokud je to varchar, tak je součástí každého záznamu, a jakmile Firebird musí tu tabulku procházet a daný záznam rozbalit, pracuje vždy i s tímhle polem (přestože se pak třeba neposílá na klienta, tak ho stejně musí načíst z disku apod.). Když to bude blob, měl by být uložený mimo záznam a nebude téměř zdržovat. Co ale nevím, je efektivita ukládání těch blobů - jestli se vždy ukládají na samostatné databázové stránky (a může být víc blobů v jedné stránce, nebo tam zůstává hromada volného místa?), nebo zda se ukládají mezi normální záznamy.

Segment size většinou uvádějí, že je ignorován :-)
Název: Re:Použítí BLOB nebo velkého VarChar
Přispěvatel: Jirka 16-01-2019, 11:18:56
Segment size většinou uvádějí, že je ignorován :-)

Já si doposud myslel že pokud se data vejdou velikostně do   segment size  tak se ukladají přímo do tabulky k ostatním datům
a ne do samostatného blobu na který odkazuje interní BlobId
Název: Re:Použítí BLOB nebo velkého VarChar
Přispěvatel: Delfin 16-01-2019, 18:26:06
Co je lepší použít z hlediska rychlosti  načítáním když už ten blob přes left join nebudu používat   ?

Varchar 1000 
nebo 
BLOB textového typu
BLOB SUB_TYPE 1 SEGMENT SIZE 100 CHARACTER SET UTF8 COLLATE UTF8

To je jedno, protoze ten obsah nectes. Jde tedy jen o efektivitu jeho ukladani pripadne rychlost jeho cteni (coz tedy neni Tvuj pripad, "ten blob přes left join nebudu používat"). Jak uz tady bylo receno (https://forum.delphi.cz/index.php/topic,16508.msg103274.html#msg103274).