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 valore lungo. 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 internamente con chiave in base a un ID di valore lungo (LID) e all'offset dei 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. La dimensione massima di un valore di colonna Long Text o Long Binary è 2 GB -1.

ESE supporta operazioni di sovrascrittura dell'intervallo di byte e dimensioni per le colonne di valore lungo per supportare implementazioni di flusso efficienti su questi tipi di colonna. Per impostazione predefinita, i dati di 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 JetSetColumno nel membro grbit JET_SETCOLUMN utilizzato nella chiamata a JetSetColumns come indicato di seguito:

  • Append: (JET_bitSetAppendLV)

  • Sovrascrittura intervallo byte: (JET_bitSetOverwriteLV)

  • Imposta dimensioni: (JET_bitSetSizeLV)

  • Forza separata: (JET_bitSetSeparateLV)

  • Store 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 per il BLOB di valori lunghi viene impostato nel membro ibLongValue della struttura di JET_SETINFO (per JetSetColumn) o nel membro ibLongValue della struttura JET_SETCOLUMN (per JetSetColumns). Il membro pvData di JET_SETCOLUMNe parametro pvData nella chiamata a JetSetColum n contiene i dati relativi al valore lungo. Gli aggiornamenti alle colonne di valore lungo devono essere eseguiti 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 valore lungo 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 vengono aumentati con gli stessi dati di valore lungo.

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.