[firebase-br] Tamanho de um campo Blob

Rodrigo Gomes da Silva rodrgomes em gmail.com
Qui Jul 17 16:31:19 -03 2014


Cantu, ao que parece um blob sempre é armazenado em uma pagina extra, e na
mesma pagina dos registros é guardado apenas 8 bytes de identificação.
Dito isto, na pagina inicial, tirando o overhead da pagina de 44 bytes, se
o dado do blob couber no resto (4052 bytes em uma pagina de 4k) ele é
guardado usando apenas esta 1a pagina. Se não couber, esta 1a pagina é
usado apenas como um array de ponteiros de paginas do blob, e outras sendo
alocadas a cada 4052 bytes. Se precisar de mais de N paginas, sendo N igual
ao espaco livre desta 1a pagina dividido por 4 (tamanho do ponteiro de
paginas), então esta pagina passa ser um diretorio de ponteiros, para
paginas que contem ponteiros (!!!) para paginas de blob.

Assim não é muito trivial calcular o espaço disperdicado, apenas o fato que
vc tem pouco controle disto, importando apenas o tamanho da pagina na
definição do banco de dados.


Em 17 de julho de 2014 16:18, Carlos H. Cantu <listas em warmboot.com.br>
escreveu:

> Sobre o segment size, veja o artigo que eu te mandei.
>
> Em relação a como o FB grava o blob:
>
> Até onde eu sei, se o blob couber no espaço restante da página de
> dados onde os demais campos (não blobs) estão gravados, ele será
> gravado na página de dados, caso contrário, apenas o ponteiro do blob
> será gravado na página de dados, e será alocada quantas páginas de
> blob forem necessárias para gravar o blob em si, sendo que pode haver
> sobra de espaço, dependendo do tamanho do blob e do PageSize do BD. O
> segment size não interfere nisso. Lembrando que uma página de blob só
> pode armazenar um único blob.
>
> A coisa é um pouco mais complexa que isso...
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org
> www.warmboot.com.br - blog.firebase.com.br
>
> JFF> Cantu,
>
>
> JFF>   Eu sei q eles não limite de tamanho.
>
>
> JFF> Minha ponderação é:
>
>
> JFF> Segundo entendi o segment size é o minimo de espaço alocado pelo FB
> para o objeto inserido.
>
>
> JFF> Sabendo disso quero fazer um ajuste caso necessário. Digamos que
> JFF> eu tenho o segment size 1024 (bytes) e eu irei inserir muitos
> arquivos.
>
>
> JFF> Quando insiro um arquivo com 500b, joguei fora 524b, qdo insiro
> 1200b, joguei fora 524b.
> JFF> Se eu tenho um segment size de 512, por exemplo, no primeiro
> JFF> caso perco 12b e no segundo perco 336b.
> JFF>   O que eu queria na realidade era de acordo com o tipo de
> JFF> arquivo que irei armazenar calcular um valor que seja compatível pra
> segment size.
>
> JFF>
> JFF> Até onde sei o FB trabalha assim, não aproveita as sobras do
> JFF> segmento, se estiver errado, pf me corrijam.
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista