1.4.0 • Published 1 day ago

@fluidframework/register-collection v1.4.0

Weekly downloads
3,400
License
MIT
Repository
github
Last release
1 day ago

@fluidframework/register-collection

A consensus register collection is a distributed data structure (DDS), which holds a set of registers and their versions generated during concurrent updates. In the simplest definition, two updates on a single register are concurrent if there is no causal relationship between them (i.e., neither knows about the other). On such cases of concurrent updates, a register internally stores all possible versions of a value.

Detecting concurrency in Fluid

In distributed systems literaure, detecting conucurrency requires some form of logical/phsical clock. A popular technique used in replicated databases such as dynamodb is called version vectors where each key stores a collection of [time, value] tuples. time is essentially a reference clock used to decide concurrency amongst updates. Each update to a key includes the time, essentially to indicate how caught up the replica was during that update.

In Fluid, each operation contains a referenceSequenceNumber (refSeq), which essenially refers to how caught up the client was (in terms of sequence number) during that update. We can use this property to implement a similar concurreny model. Mathematically, if an update has a refSeq N, it can overwrite/discard any other prior values with sequenceNumber (seq) <= N. It is safe to do so because the client must have seen all those updates before posting it's own update. Hence this update is not concurrent with those overwritten updates. However, the update is still concurrent with any other update with seq > N. Therefore those versions are still kept.

Conflict resolution policies

Below are the policies that the DDS implements:

  • Versions: Returns all stored concurrent versions. App is responsible for conflict resolution. Amazon's shopping cart policy based on dynamodb is a popular example of this policy.

  • LWW: The last write to a key always overwrites any prior writes (aka last write win policy). This is exactly same as Fluid's Shared Map policy.

  • Atomic: The policy follows the same semantics of a shared distributed lock. Amongst all concurrent updates, only the first writer wins. In distributed systems literature, the register update policy is called Atomic. This behavior requires a linearizable register. A linearizable register behaves as if there is only a single copy of the data, and that every operation appears to take effect atomically at one point in time. This definition implies that operations are executed in an well-defined order. On a concurrent update, we perform a compare-and-set operation, where we compare a register's stored seq with the incoming refSeq. The earliest operation overwriting the stored seq wins since every client reaches to an agreement on the value. Hence we can safely return the first value.

2.0.0-rc.4.0.1

7 days ago

2.0.0-rc.4.0.0

9 days ago

2.0.0-rc.2.0.7

19 days ago

2.0.0-rc.3.0.3

23 days ago

2.0.0-rc.2.0.6

23 days ago

2.0.0-rc.2.0.5

27 days ago

2.0.0-rc.1.0.9

29 days ago

2.0.0-rc.3.0.2

29 days ago

2.0.0-rc.2.0.4

29 days ago

2.0.0-rc.2.0.3

1 month ago

2.0.0-rc.3.0.1

1 month ago

2.0.0-rc.3.0.0

1 month ago

1.4.0

1 month ago

2.0.0-rc.2.0.2

1 month ago

2.0.0-rc.1.0.8

2 months ago

2.0.0-rc.1.0.7

2 months ago

2.0.0-rc.1.0.6

2 months ago

2.0.0-rc.2.0.1

2 months ago

2.0.0-rc.1.0.5

2 months ago

2.0.0-rc.2.0.0

2 months ago

2.0.0-rc.1.0.4

3 months ago

2.0.0-rc.1.0.3

3 months ago

2.0.0-rc.1.0.2

3 months ago

2.0.0-rc.1.0.1

4 months ago

2.0.0-rc.1.0.0

4 months ago

1.3.7

9 months ago

1.3.6

1 year ago

1.3.5-121405

1 year ago

1.3.5

1 year ago

1.3.4

1 year ago

1.2.8

1 year ago

1.4.0-121020

1 year ago

1.4.0-111997

1 year ago

1.3.3

1 year ago

1.3.1

2 years ago

1.3.0

2 years ago

1.4.0-115997

1 year ago

1.3.2-112998

1 year ago

1.4.0-108057

2 years ago

1.4.0-106438

2 years ago

1.3.0-97515

2 years ago

1.3.0-100520

2 years ago

1.2.7

2 years ago

0.59.4003

2 years ago

1.2.6-93452

2 years ago

1.2.6

2 years ago

0.59.2004

2 years ago

1.2.0-77818

2 years ago

1.2.3-83900

2 years ago

1.1.0-76254

2 years ago

1.2.0

2 years ago

1.2.5

2 years ago

1.2.4

2 years ago

1.2.3

2 years ago

1.2.2

2 years ago

1.2.1

2 years ago

1.2.0-78837

2 years ago

1.2.3-84921

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.1.2

2 years ago

1.1.0-75972

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

0.59.4002

2 years ago

0.59.1001

2 years ago

0.59.3000-67119

2 years ago

0.59.4000-71130

2 years ago

0.59.4000-71128

2 years ago

0.59.2002

2 years ago

0.59.2003

2 years ago

0.59.3003

2 years ago

0.59.3001

2 years ago

0.59.3002

2 years ago

0.59.3000

2 years ago

1.0.0

2 years ago

0.59.4000

2 years ago

0.59.4001

2 years ago

0.59.3000-66610

2 years ago

0.59.2001

2 years ago

0.59.2000-63294

2 years ago

0.59.2000

2 years ago

0.59.1001-62246

2 years ago

0.59.1000-61898

2 years ago

0.59.1000

2 years ago

0.59.2000-61729

2 years ago

0.58.3000-61081

2 years ago

0.56.11

2 years ago

0.56.10

2 years ago

0.58.2000-58133

2 years ago

0.58.2000

2 years ago

0.58.2002

2 years ago

0.58.2001

2 years ago

0.58.1000

2 years ago

0.58.1001

2 years ago

0.55.4

2 years ago

0.55.2

2 years ago

0.55.3

2 years ago

0.55.0

2 years ago

0.55.1

2 years ago

0.57.0-51086

2 years ago

0.56.5

2 years ago

0.56.6

2 years ago

0.56.3

2 years ago

0.56.4

2 years ago

0.56.1

2 years ago

0.56.2

2 years ago

0.56.0

2 years ago

0.56.9

2 years ago

0.56.7

2 years ago

0.56.8

2 years ago

0.58.0-55561

2 years ago

0.54.3

2 years ago

0.54.1

2 years ago

0.56.0-49831

2 years ago

0.54.2

2 years ago

0.54.0

2 years ago

0.55.0-48551

2 years ago

0.58.0-55983

2 years ago

0.54.0-47413

2 years ago

0.57.2

2 years ago

0.57.0

2 years ago

0.57.1

2 years ago

0.53.0

2 years ago

0.53.0-46105

2 years ago

0.52.0-44610

3 years ago

0.51.2

3 years ago

0.51.3

2 years ago

0.51.0

3 years ago

0.51.1

3 years ago

0.51.0-43124

3 years ago

0.52.1

2 years ago

0.52.0

2 years ago

0.50.3

3 years ago

0.50.4

2 years ago

0.50.2

3 years ago

0.50.1

3 years ago

0.50.0

3 years ago

0.50.0-41540

3 years ago

0.49.1

3 years ago

0.49.2

3 years ago

0.49.0

3 years ago

0.50.0-41365

3 years ago

0.48.5

3 years ago

0.49.0-39313

3 years ago

0.48.4

3 years ago

0.48.3

3 years ago

0.49.0-39015

3 years ago

0.48.2

3 years ago

0.48.1

3 years ago

0.48.0

3 years ago

0.48.0-38142

3 years ago

0.48.0-38105

3 years ago

0.46.2

3 years ago

0.47.1

3 years ago

0.47.0-36699

3 years ago

0.47.0

3 years ago

0.47.0-36362

3 years ago

0.46.1

3 years ago

0.47.0-35912

3 years ago

0.47.0-35961

3 years ago

0.46.0-34784

3 years ago

0.46.0

3 years ago

0.45.4

3 years ago

0.45.3

3 years ago

0.45.2

3 years ago

0.45.1

3 years ago

0.45.0

3 years ago

0.45.0-32948

3 years ago

0.44.1

3 years ago

0.39.8

3 years ago

0.44.0

3 years ago

0.39.7

3 years ago

0.44.0-30858

3 years ago

0.42.4

3 years ago

0.43.1

3 years ago

0.43.0

3 years ago

0.42.2

3 years ago

0.42.3

3 years ago

0.42.1

3 years ago

0.39.6

3 years ago

0.39.5

3 years ago

0.42.0-28410

3 years ago

0.42.0

3 years ago

0.41.3

3 years ago

0.41.4

3 years ago

0.41.2

3 years ago

0.42.0-27644

3 years ago

0.40.3

3 years ago

0.42.0-27549

3 years ago

0.42.0-27677

3 years ago

0.42.0-27683

3 years ago

0.41.1

3 years ago

0.41.0-27154

3 years ago

0.40.2

3 years ago

0.40.0

3 years ago

0.40.1

3 years ago

0.41.0

3 years ago

0.39.4

3 years ago

0.41.0-25957

3 years ago

0.40.0-25719

3 years ago

0.40.0-25851

3 years ago

0.38.2

3 years ago

0.38.1

3 years ago

0.38.4

3 years ago

0.38.3

3 years ago

0.39.0-23272

3 years ago

0.39.1

3 years ago

0.39.0

3 years ago

0.39.3

3 years ago

0.39.2

3 years ago

0.39.0-23254

3 years ago

0.38.0

3 years ago

0.38.0-22040

3 years ago

0.38.0-22000

3 years ago

0.38.0-21934

3 years ago

0.37.3-21287

3 years ago

0.37.4

3 years ago

0.37.3

3 years ago

0.37.2

3 years ago

0.37.1

3 years ago

0.37.0

3 years ago

0.37.0-20517

3 years ago

0.37.0-20427

3 years ago

0.36.2-20364

3 years ago

0.35.7-20343

3 years ago

0.36.1

3 years ago

0.35.5

3 years ago

0.35.6

3 years ago

0.36.0-18883

3 years ago

0.36.0

3 years ago

0.35.4

3 years ago

0.33.5

3 years ago

0.34.3

3 years ago

0.35.3

3 years ago

0.34.2

3 years ago

0.33.4

3 years ago

0.35.2

3 years ago

0.35.1

3 years ago

0.35.0

3 years ago

0.35.0-16887

3 years ago

0.35.0-16170

3 years ago

0.34.1

3 years ago

0.34.0

3 years ago

0.34.0-14942

3 years ago

0.33.3

3 years ago

0.32.5

3 years ago

0.32.4

3 years ago

0.33.2

3 years ago

0.33.1

3 years ago

0.33.0

3 years ago

0.33.0-13708

3 years ago

0.32.3

3 years ago

0.31.2

3 years ago

0.32.2

3 years ago

0.32.1

3 years ago

0.32.0

3 years ago

0.31.1

3 years ago

0.31.0

3 years ago

0.30.4

3 years ago

0.30.3

3 years ago

0.30.2

3 years ago

0.30.1

3 years ago

0.30.0

3 years ago

0.29.4

3 years ago

0.29.3

4 years ago

0.28.9

4 years ago

0.29.2

4 years ago

0.28.8

4 years ago

0.29.1

4 years ago

0.29.0

4 years ago

0.28.7

4 years ago

0.27.15

4 years ago

0.27.14

4 years ago

0.28.6

4 years ago

0.27.13

4 years ago

0.28.5

4 years ago

0.27.12

4 years ago

0.28.4

4 years ago

0.28.3

4 years ago

0.27.11

4 years ago

0.28.2

4 years ago

0.28.1

4 years ago

0.27.10

4 years ago

0.28.0

4 years ago

0.27.9

4 years ago

0.26.10

4 years ago

0.27.8

4 years ago

0.27.7

4 years ago

0.26.9

4 years ago

0.27.6

4 years ago

0.26.8

4 years ago

0.26.7

4 years ago

0.27.5

4 years ago

0.26.6

4 years ago

0.27.4

4 years ago

0.27.3

4 years ago

0.26.5

4 years ago

0.26.4

4 years ago

0.27.2

4 years ago

0.27.1

4 years ago

0.26.3

4 years ago

0.26.2

4 years ago

0.27.0

4 years ago

0.26.1

4 years ago

0.26.0

4 years ago

0.26.0-3177

4 years ago