and at least one of those relationships is strictly smaller (that is, ). denotes that event happened before event . It is defined as: if , then Properties: Antisymmetry: if , then ¬ Transitivity: if and , then ; or, if and , then Relation with other orders: Let be the real time when event occurs. If , then Let be the Lamport timestamp of event . If , then Other mechanisms In 1999, Torres-Rojas and Ahamad developed Plausible Clocks, a mechanism that takes less space than vector clocks but that, in some cases, will totally order events that are causally concurrent. In 2005, Agarwal and Garg created Chain Clocks, a system that tracks dependencies using vectors with size smaller than the number of processes and that adapts automatically to systems with dynamic number of processes. In 2008, Almeida et al. introduced Interval Tree Clocks. This mechanism generalizes Vector Clocks and allows operation in dynamic environments when the identities and number of processes in the computation is not known in advance. In 2019, Lum Ramabaja developed Bloom Clocks, a probabilistic data structure whose space complexity does not depend on the number of nodes in a system. If two clocks are not comparable, the bloom clock can always deduce it, i.e. false negatives are not possible. If two clocks are comparable, the bloom clock can calculate the confidence of that statement, i.e. it can compute the false positive rate between comparable pairs of clocks. See also Lamport timestamps Matrix clocks Version vector References External links Why Logical Clocks are Easy (Compares Causal Histories, Vector Clocks and Version Vectors) Explanation of Vector clocks Timestamp-based vector clock implementation in Erlang Vector clock implementation in Objective-C Vector clock implementation in Erlang Why Vector Clocks are Hard Why Cassandra doesn’t need vector clocks Logical clock algorithms