[firebase-br] Tamanho de um campo Blob

Carlos H. Cantu listas em warmboot.com.br
Qui Jul 17 17:59:45 -03 2014


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





Mais detalhes sobre a lista de discussão lista