Colunas de valor longo

Aplica-se a: Windows | Windows Server

Colunas de valor longo

Os tipos de coluna ESE JET_coltypLongText e JET_coltypLongBinary são chamados de tipos de coluna de valor longo. Essas colunas são grandes cadeias de caracteres e objetos binários grandes que podem ser armazenados em árvores B+ separadas do índice primário. Quando valores longos são armazenados separados do registro primário, eles são inseridos internamente em uma LID (ID de valor longo) e deslocamento de bytes e acessados como um fluxo. Colunas de valor longo são adicionadas à tabela na chamada para JetAddColumn com o membro coltyp da estrutura JET_COLUMNDEF definido como JET_coltypLongText ou JET_coltypLongBinary. O tamanho máximo de um valor de coluna Long Text ou Long Binary é de 2 GB -1.

O ESE dá suporte a operações de acréscimo, substituição de intervalo de bytes e definição de tamanho para colunas de valor longo para dar suporte a implementações de fluxo eficientes nesses tipos de coluna. Por padrão, os dados de valor longo serão armazenados em uma árvore B+ separada se forem maiores que 1024 bytes ou se o registro não se ajustar a uma única página de banco de dados quando os dados de valor longo forem armazenados no registro. O aplicativo tem a opção de substituir o comportamento padrão definindo opções para armazenar dados de valor longo no registro (JET_bitSetIntrinsicLV) ou para forçá-los a serem armazenados na árvore B+ separada (JET_bitSetSeparateLV). Esses valores são definidos no parâmetro grbit em JetSetColumn ou o membro grbitJET_SETCOLUMN usado na chamada para JetSetColumns da seguinte maneira:

  • Acrescentar: (JET_bitSetAppendLV)

  • Substituição de intervalo de bytes: (JET_bitSetOverwriteLV)

  • Definir Tamanho: (JET_bitSetSizeLV)

  • Forçar separado: (JET_bitSetSeparateLV)

  • Armazenar em registro: (JET_bitSetIntrinsicLV)

Os dados de valor longo são definidos indicando o deslocamento para o blob de valor longo e o comprimento dos dados de valor longo no blob. O deslocamento para o blob de valor longo é definido no membro ibLongValue da estrutura JET_SETINFO (para JetSetColumn) ou no membro ibLongValue da estrutura JET_SETCOLUMN (para JetSetColumns). O membro pvData do JET_SETCOLUMN e o parâmetro pvData na chamada para JetSetColumn contém os dados de valor longo. Atualizações para colunas de valor longo devem ser executadas dentro de uma transação.

Os dados de valor longo são sempre armazenados em uma tabela separada é quando o aplicativo define o JET_bitSetSeparateLV ou JET_bitSetIntrinsicLV, caso contrário, é heuristicamente decidido. O ESE armazena o valor longo separado se for maior que 1024 bytes ou se o registro não caber em uma única página de banco de dados se armazenado no registro.

O diagrama a seguir mostra os dados de valor longo armazenados em uma tabela separada. Quando um valor longo é armazenado fora do registro, uma nova ID de valor longo é criada para se referir ao seu valor. Isso permite que vários registros se refiram ao mesmo valor de coluna. As contagens de referência para os dados serão aumentadas se mais de um registro nos dados apontar para os mesmos dados de valor longo.

ESE_Documentation_longvaluedtree2

O ESE também dá suporte a um recurso de armazenamento de instância única que permite que vários registros referenciem o mesmo objeto binário grande como se cada registro tivesse sua própria cópia das informações; evitando cópias duplicadas dos dados de valor de coluna. Esse recurso está habilitado na chamada para JetPrepareUpdate com a opção JET_prepInsertCopy definida no parâmetro prep .