Go: vclock

Пакет vclock предлагает полную поддержку векторных часов для языка Golang. Он позволяет записывать и анализировать события в распределенной системе, что удобно для решения задач синхронизации данных.

Кроме этого vclock предоставляет дополнительный функционал для более эффективной работы:

  • Сериализация/десериализация
  • Усечение (минимальное/максимальное количество записей, минимальное/максимальное время обновления)
  • Независимое от модуля время обновления
  • Поддержка мерджа двух векторов
  • Эффективно использует память

Для установки пакета нужно воспользоваться командой:

go get labix.org/v1/vclock

Ниже представлен пример использования vclock:

package main

import (
  "fmt"
  "labix.org/v1/vclock"
)

func main() {
  vc1 := vclock.New()
  vc1.Update("A", 1)

  vc2 := vc1.Copy()
  vc2.Update("B", 0)

  fmt.Println(vc2.Compare(vc1, vclock.Ancestor))   // true
  fmt.Println(vc1.Compare(vc2, vclock.Descendant)) // true

  vc1.Update("C", 5)

  fmt.Println(vc1.Compare(vc2, vclock.Descendant)) // false
  fmt.Println(vc1.Compare(vc2, vclock.Concurrent)) // true

  vc2.Merge(vc1)

  fmt.Println(vc1.Compare(vc2, vclock.Descendant)) // true

  data := vc2.Bytes()
  fmt.Printf("%#v\n", string(data))

  vc3, err := vclock.FromBytes(data)
  if err != nil {
    panic(err)
  }

  fmt.Println(vc3.Compare(vc2, vclock.Equal)) // true
}

Для получения дополнительной информации воспользуйтесь документацией по пакету.

 

19.01.2019









 
архив

подписка