Поделиться через


Столбцы длинных значений

Применимо к: Windows | Windows Server

Столбцы длинных значений

Типы столбцов ESE JET_coltypLongText и JET_coltypLongBinary называются типами столбцов с длинными значениями. Эти столбцы представляют собой большие строки и большие двоичные объекты, которые могут храниться в отдельных деревьях B+ от основного индекса. Если длинные значения хранятся отдельно от первичной записи, они получают внутренний ключ по идентификатору длинного значения (LID) и смещению байтов и обращаются к ней как к потоку. Столбцы длинных значений добавляются в таблицу в вызове JetAddColumn с элементом coltypструктуры JET_COLUMNDEF , для которых задано значение JET_coltypLongText или JET_coltypLongBinary. Максимальный размер столбца "Длинный текст" или "Длинный двоичный" составляет 2 ГБ -1.

ESE поддерживает операции добавления, перезаписи диапазона байтов и задания размера для столбцов с длинными значениями для поддержки эффективных реализаций потоков в этих типах столбцов. По умолчанию данные длинных значений хранятся в отдельном дереве B+, если они больше 1024 байт, или если запись не помещается на одной странице базы данных, когда данные длинных значений хранятся в записи. Приложение может переопределить поведение по умолчанию, задав параметры для хранения данных длинных значений в записи (JET_bitSetIntrinsicLV) или принудительного хранения их в отдельном дереве B+ (JET_bitSetSeparateLV). Эти значения задаются в параметре grbit в JetSetColumn или элементе grbit, JET_SETCOLUMN используется в вызове JetSetColumns следующим образом:

  • Добавление: (JET_bitSetAppendLV)

  • Перезапись диапазона байтов: (JET_bitSetOverwriteLV)

  • Размер набора: (JET_bitSetSizeLV)

  • Принудительное разделение: (JET_bitSetSeparateLV)

  • Store In Record (JET_bitSetIntrinsicLV)

Данные длинного значения задаются путем указания смещения в большом двоичном объекте с длинным значением и длины данных длинного значения в большом двоичном объекте. Смещение большого двоичного объекта с длинным значением задается в элементе ibLongValueструктуры JET_SETINFO (для JetSetColumn) или в элементе ibLongValueструктуры JET_SETCOLUMN (для JetSetColumns). Член pvDataJET_SETCOLUMN и параметр pvData в вызове JetSetColumn содержат данные long value. Обновления столбцов с длинными значениями должны выполняться внутри транзакции.

Данные длинных значений всегда хранятся в отдельной таблице, когда приложение задает JET_bitSetSeparateLV или JET_bitSetIntrinsicLV, в противном случае это эвристически определяется. ESE сохраняет длинное значение, разделенное, если оно больше 1024 байт или если запись не помещается на одной странице базы данных, если она хранится в записи.

На следующей схеме показаны данные длинных значений, хранящиеся в отдельной таблице. Если длинное значение хранится вне записи, создается новый идентификатор с длинным значением для ссылки на его значение. Это позволяет нескольким записям ссылаться на одно и то же значение столбца. Количество ссылок на данные увеличивается, если несколько записей в данных указывают на одни и те же данные с длинным значением.

ESE_Documentation_longvaluedtree2

ESE также поддерживает функцию хранилища одного экземпляра, которая позволяет нескольким записям ссылаться на один и тот же большой двоичный объект, как если бы каждая запись имела собственную копию информации; это позволяет избежать повторяющихся копий данных значения столбца. Эта функция включена в вызове JetPrepareUpdate с параметром JET_prepInsertCopy, заданным в параметре подготовки .