Condividi tramite


Colonne valore lungo

Si applica a: Windows | Windows Server

Colonne valore lungo

I tipi di colonna ESE JET_coltypLongText e JET_coltypLongBinary sono denominati tipi di colonna long value. Queste colonne sono stringhe di grandi dimensioni e oggetti binari di grandi dimensioni che possono essere archiviati in alberi B+ separati dall'indice primario. Quando i valori lunghi vengono archiviati separati dal record primario, vengono inseriti internamente in una chiave con ID valore lungo (LID) e offset di byte e a cui si accede come flusso. Le colonne con valore lungo vengono aggiunte alla tabella nella chiamata a JetAddColumn con il membro coltyp della struttura JET_COLUMNDEF impostata su JET_coltypLongText o JET_coltypLongBinary. Le dimensioni massime di un valore di colonna Long Text o Long Binary sono pari a 2 GB -1.

ESE supporta operazioni di sovrascrittura dell'intervallo di byte e dimensioni per le colonne con valori lunghi per supportare implementazioni efficienti del flusso su questi tipi di colonna. Per impostazione predefinita, i dati con valore lungo vengono archiviati in un albero B+ separato se è maggiore di 1024 byte o se il record non rientra in una singola pagina del database quando i dati di valore lungo vengono archiviati nel record. L'applicazione ha la possibilità di eseguire l'override del comportamento predefinito impostando le opzioni per archiviare i dati di valore lungo nel record (JET_bitSetIntrinsicLV) o forzarli a essere archiviati nell'albero B+ separato (JET_bitSetSeparateLV). Questi valori vengono impostati nel parametro grbit in JetSetColumn o nel membro grbitJET_SETCOLUMN usato nella chiamata a JetSetColumns come indicato di seguito:

  • Append: (JET_bitSetAppendLV)

  • Sovrascrittura intervallo byte: (JET_bitSetOverwriteLV)

  • Imposta dimensioni: (JET_bitSetSizeLV)

  • Forza separata: (JET_bitSetSeparateLV)

  • Archivio in record: (JET_bitSetIntrinsicLV)

I dati di valore lungo vengono impostati indicando l'offset nel BLOB di valori lunghi e la lunghezza dei dati di valore lungo nel BLOB. L'offset al BLOB di valori lunghi viene impostato nel membro ibLongValue della struttura JET_SETINFO (per JetSetColumn) o nel membro ibLongValue della struttura JET_SETCOLUMN (per JetSetColumns). Il membro pvData di JET_SETCOLUMN e il parametro pvData nella chiamata a JetSetColumn contiene i dati di valore lungo. Aggiornamenti colonne con valori lunghi devono essere eseguite all'interno di una transazione.

I dati di valore lungo vengono sempre archiviati in una tabella separata quando l'applicazione imposta il JET_bitSetSeparateLV o JET_bitSetIntrinsicLV, altrimenti viene deciso in modo euristico. ESE archivia il valore lungo separato se è maggiore di 1024 byte o se il record non si adatta a una singola pagina del database se archiviato nel record.

Il diagramma seguente mostra i dati di valore lungo archiviati in una tabella separata. Quando un valore long viene archiviato all'esterno del record, viene creato un nuovo ID con valori lunghi per fare riferimento al relativo valore. Ciò consente a più record di fare riferimento allo stesso valore di colonna. I conteggi dei riferimenti ai dati vengono aumentati se più record nei punti dati corrispondono agli stessi dati di valore lungo.

ESE_Documentation_longvaluedtree2 ESE_Documentation_longvaluedtree2

ESE supporta anche una singola funzionalità di archivio di istanze che consente a più record di fare riferimento allo stesso oggetto binario di grandi dimensioni come se ogni record avesse una propria copia delle informazioni; evitando così copie duplicate dei dati del valore della colonna. Questa funzionalità è abilitata nella chiamata a JetPrepareUpdate con l'opzione JET_prepInsertCopy impostata nel parametro di preparazione .