https://github.com/awinterman/vector-clock
A vector clock implementation for node.js
https://github.com/awinterman/vector-clock
Last synced: over 1 year ago
JSON representation
A vector clock implementation for node.js
- Host: GitHub
- URL: https://github.com/awinterman/vector-clock
- Owner: AWinterman
- Created: 2013-12-02T01:27:59.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2014-04-06T22:00:34.000Z (about 12 years ago)
- Last Synced: 2025-03-18T20:40:44.495Z (over 1 year ago)
- Language: JavaScript
- Size: 145 KB
- Stars: 14
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
#`vector-clock-class`#
## Overview ##
A [vector clock][vclock-paper] is a data structure for keeping
track of logical time for a set of events, allowing them to be partially
ordered.
Install it with
```
npm install --save vector-clock-class
```
## API ##
```javascript
var Clock = require('vector-clock-class')
Clock(
String | Number id,
(Integer start) | null
) -> vector_clock
```
- `id` should distinguish this clock from all the others. It is
saved to the class instance as `id`
- `start` is an optional parameter which sets the version number from which the
clock should start counting.
## Methods and Attributes ##
In the methods below, `id` is a hashable object. Semantically, it should be the
unique identifier of another clock.
###`vector_clock.clock`###
The vector clock-- a map from `source_ids` to version numbers. Like the `C`
function from [Lamport's paper][vclock-paper]. It's worth noting that this
means this module plays well with [npm.im/vectorclock][vectorclock], although this
breaks the contract somewhat, since [mixu](https://github.com/mixu)'s library
expects object literals.
###`vector_clock.get(id)` -> `Integer version`###
Returns the version number for the specified `id`, or `-Infinity` if it cannot be
found.
###`vector_clock.update(id, version)` -> `Integer|false`###
Bump the entry for a given id. `version` is required to ensure updates from
*this* `vector_clock` which occur after the bump have a later version number.
Note that the `version` is optional **only** if `id === vector_clock.id`. The
return value is `false` if `version` is not specified when it should be.
Otherwise it is the new version number for `id`.
###`vector_clock.createReadStream()` -> `stream`###
This method creates a stream; randomly orders the keys of the clock; pushes
onto a newly-created readableStream one object of form `{id: key, version: n}`
per key; and then closes the stream. It also
`vector_clock.update(vector_clock.id)`. This facilitates easily creating
digests of all the updates the clock has seen, useful for the [scuttlebutt][]
# The competition #
There's already another [venerable vector clock](vectorclock) library out
there. This one more or less grew out of my [scuttlebutt][] implementation. It
differs from [vectorclock][] in it's scope (slightly smaller), that it presents
a way to stream clock data out of it, and it's API.
[vclock-paper]: http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf
[vectorclock]: https://npmjs.org/package/vectorclock
[scuttlebutt]: https://github.com/AWinterman/simple-scuttle