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
-
DisposableBaseUInt64LinksTransactionsLayer.Transaction
- Implements
-
IDisposable
- Inherited Members
-
DisposableBase.Dispose()DisposableBase.Destruct()DisposableBase.IsDisposedDisposableBase.ObjectNameDisposableBase.AllowMultipleDisposeAttemptsDisposableBase.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
layerUInt64LinksTransactionsLayerA layer.
Exceptions
- NotSupportedException
Nested transactions not supported.
Properties
IsCommitted
Gets or sets the is committed value.
public bool IsCommitted { get; }
Property Value
IsReverted
Gets or sets the is reverted value.
public bool IsReverted { get; }
Property Value
Methods
Commit()
Commits this instance.
public void Commit()
Dispose(bool, bool)
Disposes the manual.
protected override void Dispose(bool manual, bool wasDisposed)
Parameters
EnsureTransactionAllowsWriteOperations(Transaction)
Ensures the transaction allows write operations using the specified transaction.
public static void EnsureTransactionAllowsWriteOperations(UInt64LinksTransactionsLayer.Transaction transaction)
Parameters
transactionUInt64LinksTransactionsLayer.TransactionThe 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
layerUInt64LinksTransactionsLayerThe layer.
transactionUInt64LinksTransactionsLayer.TransactionThe transaction.