【问题标题】:Comparison of Vector clocks for event correlation用于事件关联的矢量时钟比较
【发布时间】:2012-11-13 11:48:46
【问题描述】:

我有一堆日志文件,其中包含事件日志及其中记录的矢量时钟。现在在比较任意两个事件的矢量时钟时,对矢量时钟的每个分量的平方和求根并用结果与另一个比较,然后得出结论是否正确较小的值先于另一个?

【问题讨论】:

    标签: logging event-log distributed-system vector-clock


    【解决方案1】:

    不,如果有办法将其减少到一个值,我们将使用它而不是向量!

    要比较向量时钟,您需要逐段比较整个向量。

    class VectorClock {
        private long[] clocks;
        ...
        /**
         * This is before other iff both conditions are met:
         * - each process's clock is less-than-or-equal-to its own clock in other; and
         * - there is at least one process's clock which is strictly less-than its
         *   own clock in other
         */
        public boolean isBefore(VectorClock other) {
            boolean isBefore = false;
            for (int i = 0; i < clocks.length; i++) {
                int cmp = Long.compare(clocks[i], other.clocks[i]);
                if (cmp > 0)
                  return false; // note, could return false even if isBefore is true
                else if (cmp < 0)
                  isBefore = true;
            }
            return isBefore;
        }
    }
    

    您可以只使用最小值和最大值进行不太准确的传递:

    class VectorClockSummary {
        private long min, max;
        ...
        public tribool isBefore(VectorClockSummary other) {
            if (max < other.min)
                return true;
            else if (min > other.max)
                return false;
            else
                return maybe;
        }
    }
    

    【讨论】:

    • 谢谢迈克尔,我最终使用了你上面建议的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2011-11-24
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多