Class UInt64LinksTransactionsLayer.Transaction

Namespace
Platform.Data.Doublets
Assembly
Platform.Data.Doublets.dll

Groups link changes for commit or rollback.

public class UInt64LinksTransactionsLayer.Transaction : DisposableBase, IDisposable, IDisposable
Inheritance
DisposableBase
UInt64LinksTransactionsLayer.Transaction
Implements
IDisposable
Inherited Members
DisposableBase.Dispose()
DisposableBase.Destruct()
DisposableBase.IsDisposed
DisposableBase.ObjectName
DisposableBase.AllowMultipleDisposeAttempts
DisposableBase.AllowMultipleDisposeCalls

Remarks

Другие варианты реализации транзакций (атомарности): 1. Разделение хранения значения связи ((Source Target) или (Source Linker Target)) и индексов. 2. Хранение трансформаций/операций в отдельном хранилище Links, но дополнительно потребуется решить вопрос со ссылками на внешние идентификаторы, или как-то иначе решить вопрос с пересечениями идентификаторов.

Где хранить промежуточный список транзакций?

В оперативной памяти: Минусы: 1. Может усложнить систему, если она будет функционировать самостоятельно, так как нужно отдельно выделять память под список трансформаций. 2. Выделенной оперативной памяти может не хватить, в том случае, если транзакция использует слишком много трансформаций. -> Можно использовать жёсткий диск для слишком длинных транзакций. -> Максимальный размер списка трансформаций можно ограничить / задать константой. 3. При подтверждении транзакции (Commit) все трансформации записываются разом создавая задержку.

На жёстком диске: Минусы: 1. Длительный отклик, на запись каждой трансформации. 2. Лог транзакций дополнительно наполняется отменёнными транзакциями. -> Это может решаться упаковкой/исключением дублирующих операций. -> Также это может решаться тем, что короткие транзакции вообще не будут записываться в случае отката. 3. Перед тем как выполнять отмену операций транзакции нужно дождаться пока все операции (трансформации) будут записаны в лог.

Constructors

Transaction(UInt64LinksTransactionsLayer)

Initializes a new UInt64LinksTransactionsLayer.Transaction instance.

public Transaction(UInt64LinksTransactionsLayer layer)

Parameters

layer UInt64LinksTransactionsLayer

A layer.

Exceptions

NotSupportedException

Nested transactions not supported.

Properties

IsCommitted

Gets or sets the is committed value.

public bool IsCommitted { get; }

Property Value

bool

IsReverted

Gets or sets the is reverted value.

public bool IsReverted { get; }

Property Value

bool

Methods

Commit()

Commits this instance.

public void Commit()

Dispose(bool, bool)

Disposes the manual.

protected override void Dispose(bool manual, bool wasDisposed)

Parameters

manual bool

The manual.

wasDisposed bool

The was disposed.

EnsureTransactionAllowsWriteOperations(Transaction)

Ensures the transaction allows write operations using the specified transaction.

public static void EnsureTransactionAllowsWriteOperations(UInt64LinksTransactionsLayer.Transaction transaction)

Parameters

transaction UInt64LinksTransactionsLayer.Transaction

The transaction.

Exceptions

InvalidOperationException

Transation is commited.

InvalidOperationException

Transation is reverted.

SetCurrentTransaction(UInt64LinksTransactionsLayer, Transaction)

Sets the current transaction using the specified layer.

public static void SetCurrentTransaction(UInt64LinksTransactionsLayer layer, UInt64LinksTransactionsLayer.Transaction transaction)

Parameters

layer UInt64LinksTransactionsLayer

The layer.

transaction UInt64LinksTransactionsLayer.Transaction

The transaction.