[ 
https://issues.apache.org/jira/browse/IGNITE-9435?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16666330#comment-16666330
 ] 

Igor Seliverstov commented on IGNITE-9435:
------------------------------------------

[~Artem Budnikov], several comments from me:

There are several mistakes in implementation description:

 
{noformat}
When a transaction requests a specific data item to work on, it does not work 
with the item directly, but obtains a version of that item (a copy of the 
current value). This version is confined to the context of the transaction and 
cannot be modified by other users. If another transaction accesses the same 
item, it obtains yet another version and works with it. Thus, multiple versions 
of the same item can coexist, by they are isolated from each other and confined 
to the transactions they were generated for. Each transaction, as it were, sees 
a snapshot of data at the time the transaction starts and can only modify the 
data within that snapshot. The snapshot is always consistent and guaranteed not 
to be modified by other transactions.{noformat}
 

a version of item isn't a copy of current value - it's a version of value at 
the specific time.

Transactions don't copy items while requesting them - they read already existed 
entries applying a special filter not to see too old or too new versions but 
see the most actual (at the time the transaction have been started) ones, to do 
that we use *snapshots* - a kind of point at the global timeline having an 
information about finished and active transactions at this specific time.

Modifying an entry a transaction doesn't made any modifications in existed 
values - it makes a new version of entry with modified fields/columns values. 
That means all versions are mutable and can be easily shared between several 
transactions/queries - that's why we don't need any locks to read an entry.

Before modifying a transaction has to acquire a write lock on an entry, all the 
locks will be released as soon as the transaction is finished. That means what 
*we allow non-blocking reads but blocking writes*.

Versions aren't put (copied) into any context, we just restrict cleaning 
versions, which may be visible for any query or transaction and share them 
between active transactions.

After the version become invisible (when there is a later version of entry 
which is visible for any query/transaction or the version is a result of rolled 
back transaction) it will be cleaned by the first writer who modified the entry 
or by vacuum worker in background.

 

Another comment - the article has 2.6 version, isn't it a mistake? We don't 
have such feature in Ignite 2.6

> Document MVCC
> -------------
>
>                 Key: IGNITE-9435
>                 URL: https://issues.apache.org/jira/browse/IGNITE-9435
>             Project: Ignite
>          Issue Type: Task
>          Components: documentation, mvcc
>            Reporter: Vladimir Ozerov
>            Assignee: Igor Seliverstov
>            Priority: Major
>             Fix For: 2.7
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to