Firebird campo Blob SubType Text X Quantidade de caractes

08/12/2006

41

Pessoal
Dei uma olhada aqui no forum, encontrei muito materia sobre o assunto mas nao consegui tirar esta pulga atraz da orelha.
Tenho em meu BD alguns campos do tipo BLOB com o SubType setado para Text pois nestes campos eu gravo apenas texto puro ... tipo informacoes diversas.
O que eu gostaria de encontrar ou saber é a quantidade de caracteres que o campo vai suportar dependendo do numero que eu informar na propriedade Size.

Exemplo: Atravez do IbExpert quando se cria um campo do tipo BLOB o IbExpert ja seta a propriedade Size para 80 dai eu mudo SubType para Text e ai vem minha duvida: Quantos caractes eu posso colocar dentro deste novo campo criado?

Espero que tenha conseguido passar minha duvida claramente. Se alguem puder dar uma luz fico agradecido.


Responder

Post mais votado

08/12/2006

EmersonEN,

Seu texto foi bastante exclarecedor e me ajudou bastante ... entao resumindo:

1 - Entao Segment Size esta ligado diretamente no desempenho de acesso a informação armazenada no campo blob e não a quantidade?

2 - Mesmo eu tendo um campo do tipo blob onde vou armazenar pouco texto se eu mudar o valor de 80 para 2048 eu vou ter um ganho de performance ou neste caso em especifico nao faria tanta diferença?

3 - Ficou bem claro que Segment Size nao limita a capacidade de armazenamento do campo, entao me exclareça uma coisa. Certa vez aconteceu de eu colocar um texto em um dbMemo ligado a um campo Blob ... Quando eu mandava salvar eu nao recebia nenhuma mensagem de erro mas tambem a informação não era gravada no banco de dados. Entao aumentei o Segment Size de 80 para 100 e tudo começou a funcionar ... Desde então até agora estava com isso na cabeça de que ali eu estava definindo a capacidade do campo. Este problema que eu tive entao se deu em decorrencia de que? Era muita informação para ser processada mas o banco nao tinha autonomia para fazer o mesmo devido a configuração do Segment Size?

4 - Voce disse que a limitação do campo se da no momento em que o mesmo é criado. Tenho um banco de dados criado com Page Size = 1024, entao para eu nao ter este tipo de problema - capacidade do compo - eu deveria sempre criar meu banco de dados com a pagina setada para o maximo ??? No caso ai 16384 ???


Bom não querendo abusar da sua boa vontade mas ja abusando, quando voce tiver um tempo comenta este texto que deixei acima.

Mais uma vez muito obrigado pela atenção.
Abraço.


Responder

Mais Posts

o segment size (tamanho do segmento) é definido para aumentar o desempenho de entrada e saída dos dados no blob.
ele deve variar conforme o tipo de informação que se deseja guardar. para memos curtos - mesmo que em alguns casos se estenda um pouco mais - pode-se definir o tamanho como 100 bytes, que informa que devem ser procesados blocos de 100 bytes de cada vez.
para vídeos ou gráficos grandes, deve ser informado um comprimento maior. o comprimento máximo é de 65536 bytes (64 Kb), isto porque todos os índices do blob são armazenados e lidos em bloco.
quando um blob é lido, o seu conteúdo é extraído em blocos por isso, quanto maior o bloco, maior o número de bytes processados simultaneamene, aumentando a performance.

anteriormente o valor padrão era de 80 bytes (porque cabiam 80 caracteres numa linha do monitor), mas para os computadores atuais esse valor pode ser maior. 2048 é um valor recomendado como padrão desde a versão 6 do Interbase.

lembrando que o segment size não limita o tamanho do campo, mas sim como ele é manipulado.

a limitação do campo se dá em função do tamanho da página (page size) informado ao criar o banco de dados.
Page size         Tam. máximo do blob
---------------------------------------------------
1Kb   (1024)  =>   64 Mb blod
2Kb   (2048)  =>  512 Mb
4Kb   (4096)  =>    4 Gb
8Kb   (8192)  =>   32 Gb
16kb (16384)  =>  256 Gb grande o suficiente...  :-)



Responder
comentando...

1 - exato.

2 - depende de quanto texto. se você for gravar textos do tamanho desse que você postou no fórum, haverá um certo ganho de performance pois, ao invés de ler blocos de 80 caracteres - e seu texto tem bem mais que isso - ele lerá/gravará o texto inteiro de uma só vez. teoricamente, quanto mais texto for esperado, maior deverá ser o segment size, tomando como mínimo um valor de 100 Kb.

3 - não sei te dizer o que ocorreu. como dito, não é o segment size que limita a capacidade do campo.
o que acontece quando você tem textos maiores que o bloco, é que são processados n blocos quantos forem necessários: supondo que você digitasse 100 caracteres, seriam gravados 2 blocos, 1 completo e outro com apenas 20 caracteres.
uma coisa a se atentar é o fato de colocar o segment size num valor que não será alcançado. pelo que eu me informei são gravados sempre blocos ´completos´, ou seja, se você informar o segment size de 2048 e gravar apenas 5 caracteres, o espaço será totalmente ocupado, sendo alocado um bloco de 2048 bytes sem necessidade.

4 - cada caso é um caso. eu nunca precisei de um campo maior que 3 MB. na situação que você apresenta (1024 bytes), seu blob pode ter até 64 MB (64 megabytes!). é espaço pra caramba.
se criar com page size de 16384 poderá ter um blob de até 256 GB, tem noção?
mas como eu disse, o page size depende de avaliação ao projetar o banco (mas pode ser alterado posteriormente, via gsec). eu crio os meus com page size 4096. a performance é ótima.


Responder

08/12/2006

Mmoreira

EmersonEN,

Sua ajuda foi sem duvida nenhuma muito grande, agora sim estou bem exclarecido quanto a este assunto.
Só tenho mesmo é que agradecer mais uma vez.

Muito obrigado mesmo.

Abraço!!


Responder

05/09/2019

Rogério Neves

ótimo conteúdo, esclarecedor.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira