https://github.com/evertrue/monotone
A 64 bit monotonically increasing Id generator for distributed databases
https://github.com/evertrue/monotone
Last synced: 26 days ago
JSON representation
A 64 bit monotonically increasing Id generator for distributed databases
- Host: GitHub
- URL: https://github.com/evertrue/monotone
- Owner: evertrue
- License: mit
- Archived: true
- Created: 2014-10-28T21:25:07.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2015-10-28T13:49:03.000Z (over 9 years ago)
- Last Synced: 2024-11-04T18:46:43.622Z (6 months ago)
- Language: Java
- Size: 266 KB
- Stars: 7
- Watchers: 12
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - evertrue/monotone - A 64 bit monotonically increasing Id generator for distributed databases (Java)
README
monotone
========A 64 bit monotonically increasing Id generator for distributed databases.
[](https://travis-ci.org/evertrue/monotone)
# Purpose
As soon as you make a departure from an RDBMS for record based storage, you find yourself needing to generate Id's for those records as it's no longer afforded to you in most No-Sql stores.We wanted to provide a simple solution to this that reused popular infrastructure that companies likely already have running.
# Design
* Monotone is a very simple wrapper around popular storage enginges capable of generating monotonically increasing id's that are not vulnerable to the challenges surrounding coorindated system clocks.
* Underyling storage engine maven depdencies are scoped to `provided` so as to not pollute your depdendency tree for unused storage engine implementations.
* A clean interface with fluent style builders and no checked exceptions is exposed to your codebase.
* Monotone stores local ranges after it reserves them by incrementing a counter in the underlying storage engine implemtnation via atomic supported operations. This permits fast increments via a local `AtomicLong` in your application and only making a network hop when you have exhausted the local range.
# ZooKeeper Support
### Details
You may want to tune the `setMaxIdsToFetch` coniguration to your needs as this will dictate how frequent you have to do a write to ZK.This implementation has an upper bound to its performance, even with a higher limit on `setMaxIdsToFetch` configured. This is mainly because the implementation does not use sharded counters. This is under consideration for future development.
If `setMaxAttempts` is reached, a `RuntimeException` is thrown.
### Dead Simple Example
```java
IdGenerator gen = ZKGenerator.newBuilder(zkClient).build();
long nextId = gen.nextId();
```### Configuration Example
```java
IdGenerator gen = ZKGenerator.newBuilder(zkClient)
.setCounterName("orders")
.setMaxIdsToFetch(1000)
.setRootPath("/id_gen/my_app")
.build();
long nextId = gen.nextId();
```### Configuration
|Setting|Default Value|Description|
|-------|:-------------:|-----------|
|`setCounterName`|"default"|The name of your counter that will be stored in ZK. Cannot be null.|
|`setMaxIdsToFetch`|1000|The number of Id's to reserve for a given local range. Needs to be greater than 0.|
|`setRootPath`|"/monotone/id_gen"|The root path in ZK where the counter should live. Cannot be null.|
|`setMaxAttempts`|5|The number of times an `incr` operation will occur if a failure response is given by ZK. Needs to be greater than 0.|# Redis Support
# License
[Free as in beer](https://github.com/evertrue/monotone/blob/master/LICENSE)