ReservationCollection クラス

定義

レコード シーケンスで行われた領域予約のコレクションを管理します。Manages the collection of space reservations made in a record sequence.

public ref class ReservationCollection abstract : System::Collections::Generic::ICollection<long>, System::Collections::Generic::IEnumerable<long>
public abstract class ReservationCollection : System.Collections.Generic.ICollection<long>, System.Collections.Generic.IEnumerable<long>
type ReservationCollection = class
    interface ICollection<int64>
    interface seq<int64>
    interface IEnumerable
Public MustInherit Class ReservationCollection
Implements ICollection(Of Long), IEnumerable(Of Long)
継承
ReservationCollection
実装

次の例に示すように、予約は 2 つの方法で実行できます。Reservations can be performed in two ways as shown in the following examples. 信頼性の高い処理を行うサンプルでこの方法を採用できます。You can adopt the practices in the samples for robust processing. このタスクは、CLFS ベースの LogRecordSequence クラスを使用している場合のみ実行できることに注意してください。Notice that this task can only be performed when using the CLFS-based LogRecordSequence class.

//Using the ReserveAndAppend Method  
ReservationCollection reservations = recordSequence.CreateReservationCollection();  
long[] lengthOfUndoRecords = new long[] { 1000 };  
recordSequence.ReserveAndAppend(recordData,  
                                                     userSqn,  
                                                     previousSqn,  
                                                     RecordSequenceAppendOptions.None,  
                                                     reservations,  
                                                     lengthOfUndoRecords);  
recordSequence.Append(undoRecordData,    // If necessary …  
                                    userSqn,  
                                    previousSqn,  
                                    RecordSequenceAppendOptions.ForceFlush,  
                                    reservations);  
  
// Using the Manual Approach  
ReservationCollection reservations = recordSequence.CreateReservationCollection();  
reservations.Add(lengthOfUndoRecord);  
try  
{  
   recordSequence.Append(recordData, userSqn, previousSqn, RecordAppendOptions.None);  
}  
catch (Exception)  
{  
   reservations.Remove(lengthOfUndoRecord);  
   throw;  
}  
  
recordSequence.Append(undoRecordData, userSqn, previousSqn, RecordAppendOptions.ForceFlush, reservations);  

注釈

このクラスは、レコード シーケンスで行われる一連の予約領域を表します。This class represents a set of reservation areas that are made in a record sequence. コレクションに項目を追加すると、新しい予約が割り当てられます。Adding items to the collection allocates new reservations. コレクションから項目を削除すると、予約が解放されます。Removing items from the collection frees those reservations.

ログに書き込む予定のデータがある場合、アプリケーションはログ内に領域を予約しますが、直ちに書き込むことはできません。An application reserves space in the log when it has data that is to be written to the log in the future, but cannot write it immediately. 予約することにより、ログに書き込む予定のデータを確実に書き込むことができます。Reservations provide a guarantee that the data can be written to the log when the data is available to be written. ログを使用する場合、アプリケーションでは、多くの場合、1つまたは複数のログレコードがマーシャリング領域に予約されます。When using logs, applications often reserve one or more log records in a marshaling area. レコードは追加する前に予約する必要があります。You must reserve records prior to appending them.

予約により、データのコミットは操作が完了してから行い、操作が未完了の場合は変更をロールバックするという処理を確実にすることができます。Reservations can be used to guarantee that an operation can be completed before the data is committed; otherwise, the changes are rolled back. また、ログの "取り消し操作" を記録することも可能になります。It can also be used to record an "undo action" in the log. ロールバック操作中には、途中で割り込みが発生する場合を考慮して、トランザクションのリソース マネージャー (RM) が状態を回復できるようにしておく必要があります。During a rollback operation, a transactional resource manager (RM) must be able to recover its state if the RM is interrupted during the rollback operation. 予約領域を使用すれば、RM が処理を開始する前に、ログの領域を予約することができます。By using a reservation area, an RM can reserve space in a log before it is used.

ReserveAndAppend メソッドは、呼び出し時に指定されたパラメーターに応じて、領域の予約またはデータの追加のいずれか、あるいは両方を行います。The ReserveAndAppend method can either reserve space or append data, or both, depending on the parameters that are specified when making the call. トランザクション処理の進行中に、取り消し情報を追加し、補正レコードの領域を予約することができます。As work progresses in a transaction, an application can append the undo information and reserve space for compensation records. ロールバック操作中に作成された補正レコードは、ディスク上で取り消された処理の内容を示します。During a rollback operation, compensation records that are created indicate what has been undone on the disk. レコードの追加には、以前に予約された領域を使用します。The records are appended using space that has been previously reserved. これにより、ロールバック操作中に RM のログ領域が不足するという致命的な状況が確実に防止されます。This guarantees that an RM does not run out of log space, which is a fatal condition, while performing a rollback operation. トランザクションの処理中にログがいっぱいになっても、アプリケーションは非揮発性データを破壊することなく、トランザクションを確実にロールバックできます。If a log fills up during a transaction, an application can safely roll back a transaction without corrupting durable data.

CLFS は、先書きログとして使用できる ARIES 準拠のログ システムです。CLFS is an ARIES-compliant logging system, meant for write-ahead logging. アプリケーションは、操作を実行する前に、先書きログに取り消しレコードを書き込み、補正レコードの書き込みに必要なログ内の領域を予約して、ロールバック時に使用します。In write-ahead logging, an application writes an undo record before it performs the operation, reserving the amount of space it takes in the log to write a compensating record, which may be used during rollback. 予約した領域は、後で補正レコードの書き込みを実際に行うときに使用されます。Later, the reserved space is used when the compensation record is actually written.

アプリケーションは、いつでもロング スペースを予約またはアクセスできますが、予約とアクセスを同時に行うことはできません。Applications can either reserve or access long space at any given time (they are mutually exclusive operations). コミットしたレコードをログに書き込んだ後、アプリケーションは補正レコードの予約を解放できます。After a commit record is written to the log, an application can free up the reservations for the compensation records. これを行うには、FreeReservation メソッドまたは ReserveAndAppend メソッドを呼び出します。This action can be done by calling either the FreeReservation or ReserveAndAppend method. ReserveAndAppend メソッドを呼び出した場合、操作がアトミックであることが保証されますが、FreeReservation メソッドを呼び出した場合、操作がアトミックであるかどうかは保証されません。Calling the ReserveAndAppend method guarantees that the operation is atomic, while calling the FreeReservation method does not.

レコードを解放する場合、ReserveAndAppend メソッドの前回の呼び出しと共に予約した同じレコードを解放する必要があります。When you free records, you must free the same records that you reserved together in a previous call to the ReserveAndAppend method.

注意

IRecordSequence の実装では、実際に予約の割り当ておよび割り当て解除を行うには、MakeReservation メソッドおよび FreeReservation メソッドを実装する必要があります。Your implementation of IRecordSequence must implement the MakeReservation and FreeReservation methods to perform the actual reservation allocation and deallocation. また、予約した領域にレコードを書き込むときに、ReservationFreed を呼び出す必要があります。In addition, your implementation must also call ReservationFreed when a record is written into a reserved space.

コンストラクター

ReservationCollection()

ReservationCollection クラスの新しいインスタンスを初期化します。Initializes a new instance of the ReservationCollection class.

プロパティ

Count

コレクション内の予約の数を取得します。Gets the number of reservations in the collection.

IsReadOnly

コレクションが読み取り専用かどうかを示す値を取得します。Gets a value that indicates whether the collection is read-only.

メソッド

Add(Int64)

予約を割り当てて、コレクションに追加します。Allocates a reservation and adds it to the collection. このメソッドは継承できません。This method cannot be inherited.

Clear()

コレクション内の予約のすべてを解放します。Releases all of the reservations in the collection. このメソッドは継承できません。This method cannot be inherited.

Contains(Int64)

指定されたサイズの予約が行われているかどうかを判断します。Determines whether a reservation of the specified size has been made. このメソッドは継承できません。This method cannot be inherited.

CopyTo(Int64[], Int32)

コレクション全体を 1 次元配列にコピーします。コピー操作は、コピー先配列の指定したインデックスから始まります。Copies the entire collection to a one-dimensional array, starting at the specified index of the target array. このメソッドは継承できません。This method cannot be inherited.

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判定します。Determines whether the specified object is equal to the current object.

(継承元 Object)
Finalize()

ReservationCollection がガベージ コレクターによって破棄される前に、リソースを解放できるようにします。Allows the ReservationCollection to free resources before it is destroyed by the garbage collector.

FreeReservation(Int64)

派生クラスでオーバーライドされると、指定したサイズの予約を解放します。When overridden in a derived class, releases a reservation of the specified size.

GetBestMatchingReservation(Int64)

派生クラスでオーバーライドされると、指定したサイズに最適な予約を取得します。When overridden in a derived class, gets the best matching reservation for a given size.

GetEnumerator()

ReservationCollection を反復処理できる列挙子を返します。Returns an enumerator that can iterate through the ReservationCollection. このメソッドは継承できません。This method cannot be inherited.

GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
MakeReservation(Int64)

派生クラスでオーバーライドされると、指定したサイズの予約を割り当てます。When overridden in a derived class, allocates a reservation of the specified size.

MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
Remove(Int64)

指定されたサイズの予約が行われている場合、その予約を解放します。Releases a reservation of the specified size, if one has been made. このメソッドは継承できません。This method cannot be inherited.

ReservationFreed(Int64)

派生クラスでオーバーライドされると、予約が解放されていることを示します。When overridden in a derived class, indicates that a reservation has been released.

ReservationMade(Int64)

派生クラスでオーバーライドされると、予約されていることを示します。When overridden in a derived class, indicates that a reservation has been made.

ToString()

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)

明示的なインターフェイスの実装

IEnumerable.GetEnumerator()

ReservationCollection を反復処理できる列挙子を返します。Returns an enumerator that can iterate through the ReservationCollection. このメソッドは継承できません。This method cannot be inherited.

拡張メソッド

CopyToDataTable<T>(IEnumerable<T>)

指定した入力 DataTable オブジェクトに応じて (ジェネリック パラメーター DataRowIEnumerable<T>)、T オブジェクトのコピーを格納する DataRow を返します。Returns a DataTable that contains copies of the DataRow objects, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

指定した入力 DataRow オブジェクトに応じて (ジェネリック パラメーター DataTableIEnumerable<T>)、指定した TDataRow オブジェクトをコピーします。Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

指定した入力 DataRow オブジェクトに応じて (ジェネリック パラメーター DataTableIEnumerable<T>)、指定した TDataRow オブジェクトをコピーします。Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

Cast<TResult>(IEnumerable)

IEnumerable の要素を、指定した型にキャストします。Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

指定された型に基づいて IEnumerable の要素をフィルター処理します。Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

クエリの並列化を有効にします。Enables parallelization of a query.

AsQueryable(IEnumerable)

IEnumerableIQueryable に変換します。Converts an IEnumerable to an IQueryable.

Ancestors<T>(IEnumerable<T>)

ソース コレクション内のすべてのノードの先祖が格納された、要素のコレクションを返します。Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName)

ソース コレクション内のすべてのノードの先祖が格納され、フィルター処理された要素のコレクションを返します。Returns a filtered collection of elements that contains the ancestors of every node in the source collection. 一致する XName を持つ要素のみがコレクションに含められます。Only elements that have a matching XName are included in the collection.

DescendantNodes<T>(IEnumerable<T>)

ソース コレクション内のすべてのドキュメントおよび要素の子孫ノードのコレクションを返します。Returns a collection of the descendant nodes of every document and element in the source collection.

Descendants<T>(IEnumerable<T>)

ソース コレクション内のすべての要素とドキュメントの子孫要素が格納された要素のコレクションを返します。Returns a collection of elements that contains the descendant elements of every element and document in the source collection.

Descendants<T>(IEnumerable<T>, XName)

ソース コレクション内のすべての要素とドキュメントの子孫要素が格納され、フィルター処理された要素のコレクションを返します。Returns a filtered collection of elements that contains the descendant elements of every element and document in the source collection. 一致する XName を持つ要素のみがコレクションに含められます。Only elements that have a matching XName are included in the collection.

Elements<T>(IEnumerable<T>)

ソース コレクション内のすべての要素およびドキュメントの子要素のコレクションを返します。Returns a collection of the child elements of every element and document in the source collection.

Elements<T>(IEnumerable<T>, XName)

ソース コレクション内のすべての要素およびドキュメントの、フィルター処理された子要素のコレクションを返します。Returns a filtered collection of the child elements of every element and document in the source collection. 一致する XName を持つ要素のみがコレクションに含められます。Only elements that have a matching XName are included in the collection.

InDocumentOrder<T>(IEnumerable<T>)

ソース コレクション内のすべてのノードがドキュメント順に並べ替えて格納された、ノードのコレクションを返します。Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>)

ソース コレクション内のすべてのドキュメントおよび要素の子ノードのコレクションを返します。Returns a collection of the child nodes of every document and element in the source collection.

Remove<T>(IEnumerable<T>)

ソース コレクション内の親ノードからすべてのノードを削除します。Removes every node in the source collection from its parent node.

適用対象