概要

クエリの満たすべき性質

  • Safety: Queries should be sequentially consistent, regardless of the replica at which they are evaluated

  • Efficiency: Queries should be evaluated locally without coordination whenever possible

    • whenever possible…(kekeho)
  • Simplicity: The query model should be easy for developers to reason about.

  • Sequential Consistencyを満たすクエリの例: ローカルレプリカのGrow-only Setに対して、要素数がnを越えているかチェックするクエリ

    • ローカル状態はグローバル状態のサブセット。monotonicだ!
  • 満たさないクエリの例: [Potato Ferrari Problem]

    • ローカル状態がグローバル状態と等しいことを保証できない限り、ローカル状態がグローバル状態と等しいとはいえない。non-monotonicなクエリだ!
  • Monotone query: a query is monotone if

    • はState-based CRDTの取りうる状態集合
    • 任意の状態i, jについて、iがjよりも小さいならば、クエリが真ならばも真となる
      • CRDTの状態が進むにつれて、クエリの結果は偽から真になることはあっても、真から偽に変わることはない(kekeho)
    • Safety, Efficiency, Simplicityを満たす
    • monotone queryの合成もまた、monotoneである(CALM TheoremでのComposabilityの議論)
  • CRDTsでは、Non-MonotonicなQueryのみを順序付けてやればよい