Skip to content

avatar29A/hlc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hlc

Build Status Go Programming Language MIT License

Hybrid Logical Clock

Original Paper: Logical Physical Clocksand Consistent Snapshots in Globally Distributed Databases

Logical Clock is an important family of algorithms for ordering events into distributed system.

HLC presents enhanced Logic Clock's Lamport, which eliminates the gap between practical and theory of synchronised time.

How use it

Init HLC per Node

lc := hlc.New(&NTPClock{})

For every local event or sending, generate logical timestamp

ts := lc.Now() // 1605806872706744321

Notes: Timestamp compatible with NTP-format. First 48bit presents physical time and other 16bit logical time (see chapter "6.2 Compact Timestamping using l and c" of paper).

For every received event you should to update a local HLC instance

receivedHlc := hlc.FromTimestamp(receivedTC)
_ = lc.Update(receivedHlc) // skip a new timestamp

Useful links

  1. In-depth Analysis on HLC-based Distributed Transaction Processing
  2. Hybrid Logical Clocks F# implementation