[firebase-br] Tamanho de um campo Blob

Carlos H. Cantu listas em warmboot.com.br
Qui Jul 17 18:39:35 -03 2014


Acabei de falar com o Vlad, e ele confirmou que os blobs podem sim ser
armazenados na mesma página de dados que outros campos "não blobs",
conforme eu havia dito.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

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

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


RGdS> Em 17 de julho de 2014 17:59, Carlos H. Cantu <listas em warmboot.com.br>
RGdS> 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
>>
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