[firebase-br] Tamanho de um campo Blob

Rodrigo Gomes da Silva rodrgomes em gmail.com
Qui Jul 17 18:07:20 -03 2014


La mesmo.. nesta parte não fica tão claro, mas acima ele fala do fato de
ser guardado só um blob id junto com o data row, e que o conteúdo em si é
separado em uma pagina do tipo blob.

"Blobs are created as part of a data row, but because a blob could be of
unlimited length, what is actually stored with the data row is a BlobID,
the data for the blob is stored separately on special blob pages elsewhere
in the database."


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

> Pelo que vi, vc se baseou no artigo da IBPhoenix. Nesse mesmo artigo,
> não fica claro a questão de poder ser armazenado na página de dados:
>
> "A level 0 blob, is a blob that can fit on the same page as the blob
> header record, for a data page of 4096 bytes, this would be a blob of
> approximately 4052 bytes (Page overhead - slot - blob record header)."
>
> A chave ali é a palavra "blob header". Se quem escreveu o artivo usou
> "blob header" pra se referir ao ID do blob, então ele pode ser gravado
> na página de dados. Pelo menos essa é a informação que sempre obtive
> quando questionei no passado. Inclusive, uma das dicas dadas pelo
> IBAnalyst é referente a fragmentação que os blobs podem causar nos
> dados, quando são armazenados na página de dados junto com os outros
> campos.
>
> Vou tentar confirmar com algum core-developer.
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org
> www.warmboot.com.br - blog.firebase.com.br
>
> RGdS> Cantu, ao que parece um blob sempre é armazenado em uma pagina
> extra, e na
> RGdS> mesma pagina dos registros é guardado apenas 8 bytes de
> identificação.
> RGdS> Dito isto, na pagina inicial, tirando o overhead da pagina de 44
> bytes, se
> RGdS> o dado do blob couber no resto (4052 bytes em uma pagina de 4k) ele é
> RGdS> guardado usando apenas esta 1a pagina. Se não couber, esta 1a pagina
> é
> RGdS> usado apenas como um array de ponteiros de paginas do blob, e outras
> sendo
> RGdS> alocadas a cada 4052 bytes. Se precisar de mais de N paginas, sendo
> N igual
> RGdS> ao espaco livre desta 1a pagina dividido por 4 (tamanho do ponteiro
> de
> RGdS> paginas), então esta pagina passa ser um diretorio de ponteiros, para
> RGdS> paginas que contem ponteiros (!!!) para paginas de blob.
>
> RGdS> Assim não é muito trivial calcular o espaço disperdicado, apenas o
> fato que
> RGdS> vc tem pouco controle disto, importando apenas o tamanho da pagina na
> RGdS> definição do banco de dados.
>
>
> RGdS> Em 17 de julho de 2014 16:18, Carlos H. Cantu <
> listas em warmboot.com.br>
> RGdS> 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
> >>
> RGdS> ______________________________________________
> RGdS> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> RGdS> Para saber como gerenciar/excluir seu cadastro na lista, use:
> RGdS> http://www.firebase.com.br/fb/artigo.php?id=1107
> RGdS> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> 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