Colonnes de valeur longue
S’applique à : Windows | Windows Server
Colonnes de valeur longue
Les types de colonnes ESE JET_coltypLongText et JET_coltypLongBinary sont appelés types de colonnes à valeur longue. Ces colonnes sont des chaînes volumineuses et des objets binaires volumineux qui peuvent être stockés dans des arborescences B+ distinctes, à l’écart de l’index principal. Lorsque des valeurs longues sont stockées séparément de l’enregistrement principal, elles sont clé en interne sur un ID de valeur longue (LID) et un décalage d’octets et sont accessibles en tant que flux. Les colonnes de valeur longue sont ajoutées à la table dans l’appel à JetAddColumn avec le membre coltyp de la structure JET_COLUMNDEF défini sur JET_coltypLongText ou JET_coltypLongBinary. La taille maximale d’une valeur de colonne Texte long ou Binaire long est de 2 Go -1.
ESE prend en charge les opérations d’ajout, de remplacement de plage d’octets et de définition de la taille pour les colonnes à valeur longue afin de prendre en charge des implémentations de flux efficaces sur ces types de colonnes. Par défaut, les données de valeur longue sont stockées dans une arborescence B+ distincte si elles sont supérieures à 1 024 octets, ou si l’enregistrement ne tient pas sur une seule page de base de données lorsque les données de valeur longue sont stockées dans l’enregistrement. L’application a la possibilité de remplacer le comportement par défaut en définissant des options pour stocker les données de valeur longue dans l’enregistrement (JET_bitSetIntrinsicLV) ou pour les forcer à être stockées dans l’arborescence B+ distincte (JET_bitSetSeparateLV). Ces valeurs sont définies dans le paramètre grbit dans JetSetColumn, ou le membre grbitJET_SETCOLUMN utilisé dans l’appel à JetSetColumns comme suit :
Ajout : (JET_bitSetAppendLV)
Remplacement de la plage d’octets : (JET_bitSetOverwriteLV)
Définir la taille : (JET_bitSetSizeLV)
Forcer la séparation : (JET_bitSetSeparateLV)
Stocker dans l’enregistrement : (JET_bitSetIntrinsicLV)
Les données de valeur longue sont définies en indiquant le décalage dans l’objet blob de valeurs longues et la longueur des données de valeur longue dans l’objet blob. Le décalage vers l’objet blob de valeurs longues est défini dans le membre ibLongValue de JET_SETINFO structure (pour JetSetColumn) ou le membre ibLongValue de la structure JET_SETCOLUMN (pour JetSetColumns). Le membre pvData de JET_SETCOLUMN et le paramètre pvData dans l’appel à JetSetColumn contiennent les données de valeur longue. Mises à jour à des colonnes de valeur longue doivent être effectuées à l’intérieur d’une transaction.
Les données de valeur longue sont toujours stockées dans une table distincte lorsque l’application définit le JET_bitSetSeparateLV ou JET_bitSetIntrinsicLV, sinon, elle est décidé de manière heuristique. ESE stocke la valeur longue séparée si elle est supérieure à 1 024 octets ou si l’enregistrement ne tient pas sur une seule page de base de données s’il est stocké dans l’enregistrement.
Le diagramme suivant montre les données de valeur longue stockées dans une table distincte. Lorsqu’une valeur longue est stockée en dehors de l’enregistrement, un nouvel ID à valeur longue est créé pour faire référence à sa valeur. Cela permet à plusieurs enregistrements de faire référence à la même valeur de colonne. Les nombres de références aux données sont augmentés si plusieurs enregistrements dans les données pointent vers les mêmes données de valeur longue.
ESE prend également en charge une fonctionnalité de magasin de instance unique qui permet à plusieurs enregistrements de référencer le même objet binaire volumineux comme si chaque enregistrement avait sa propre copie des informations, évitant ainsi les copies en double des données de valeur de colonne. Cette fonctionnalité est activée dans l’appel à JetPrepareUpdate avec l’option JET_prepInsertCopy définie dans le paramètre prep .