Freigeben über


Spalten mit langen Werten

Gilt für: Windows | Windows Server

Spalten mit langen Werten

Die ESE-Spaltentypen JET_coltypLongText und JET_coltypLongBinary werden als Spaltentypen mit langen Werten bezeichnet. Bei diesen Spalten handelt es sich um große Zeichenfolgen und große binäre Objekte, die in separaten B+-Strukturen gespeichert werden können, die vom primären Index entfernt sind. Wenn lange Werte getrennt vom primären Datensatz gespeichert werden, werden sie intern für eine LONG-Wert-ID (LID) und byte offset schlüsselt und als Stream darauf zugegriffen. Lange Wertspalten werden der Tabelle im Aufruf von JetAddColumn hinzugefügt, wobei das Coltypelement der JET_COLUMNDEF-Struktur entweder auf JET_coltypLongText oder JET_coltypLongBinary festgelegt ist. Die maximale Größe eines Long Text- oder Long Binary-Spaltenwerts beträgt 2 GB -1.

ESE unterstützt Anfügevorgänge, Bytebereichsüberschreibungen und Festlegen von Größenvorgängen für Spalten mit langen Werten, um effiziente Streamimplementierungen für diese Spaltentypen zu unterstützen. Standardmäßig werden Langwertdaten in einer separaten B+-Struktur gespeichert, wenn sie größer als 1.024 Bytes sind oder wenn der Datensatz nicht auf eine einzelne Datenbankseite passt, wenn die Langen-Wert-Daten im Datensatz gespeichert sind. Die Anwendung hat die Möglichkeit, das Standardverhalten zu überschreiben, indem Sie Optionen zum Speichern von Daten mit langen Werten im Datensatz (JET_bitSetIntrinsicLV) festlegen oder erzwingen, dass sie in der separaten B+-Struktur (JET_bitSetSeparateLV) gespeichert werden. Diese Werte werden im grbit-Parameter in JetSetColumn oder im grbit-ElementJET_SETCOLUMN im Aufruf von JetSetColumns wie folgt festgelegt:

  • Anfügen: (JET_bitSetAppendLV)

  • Bytebereichsüberschreibung: (JET_bitSetOverwriteLV)

  • Größe festlegen: (JET_bitSetSizeLV)

  • Trennen erzwingen: (JET_bitSetSeparateLV)

  • In Datensatz speichern: (JET_bitSetIntrinsicLV)

Die Long-Wert-Daten werden festgelegt, indem der Offset in das Long-Wert-Blob und die Länge der Langwertdaten im Blob angegeben wird. Der Offset auf das Long-Wert-Blob wird im ibLongValue-Member der JET_SETINFO-Struktur (für JetSetColumn) oder im ibLongValue-Element der JET_SETCOLUMN-Struktur (für JetSetColumns) festgelegt. Der pvData-Member von JET_SETCOLUMN- und pvData-Parameter im Aufruf von JetSetColumn enthält die Long-Wertdaten. Updates spalten mit langen Werten müssen innerhalb einer Transaktion ausgeführt werden.

Die Langwertdaten werden immer in einer separaten Tabelle gespeichert, wenn die Anwendung die JET_bitSetSeparateLV oder JET_bitSetIntrinsicLV festlegt, andernfalls wird dies heuristisch entschieden. ESE speichert den long-Wert getrennt, wenn er größer als 1024 Bytes ist oder wenn der Datensatz nicht auf eine einzelne Datenbankseite passt, wenn er im Datensatz gespeichert ist.

Das folgende Diagramm zeigt die Daten mit langen Werten, die in einer separaten Tabelle gespeichert sind. Wenn ein long-Wert außerhalb des Datensatzes gespeichert wird, wird eine neue ID mit langen Werten erstellt, um auf seinen Wert zu verweisen. Dadurch können mehrere Datensätze auf denselben Spaltenwert verweisen. Die Verweisanzahl auf die Daten wird erhöht, wenn mehr als ein Datensatz in den Daten auf denselben langen Wert verweist.

ESE_Documentation_longvaluedtree2

ESE unterstützt auch eine einzelne instance Speicherfunktion, die es mehreren Datensätzen ermöglicht, auf dasselbe große binäre Objekt zu verweisen, als hätte jeder Datensatz eine eigene Kopie der Informationen. Dadurch werden doppelte Kopien der Spaltenwertdaten vermieden. Dieses Feature wird beim Aufruf von JetPrepareUpdate aktiviert, wobei die Option JET_prepInsertCopy im Prep-Parameter festgelegt ist.