LWWReg

LWW Register是一种数据结构,用于存储一个值和一个时间戳,支持读取和写入操作。在写入时,如果新的时间戳比原来的时间戳更大,那么就更新值和时间戳;在读取时,直接返回当前的值。这个数据结构可以用于分布式系统中,支持多个节点对同一个值进行读写操作,最终保证一致性。其中,merge函数用于合并两个LWW Register,返回时间戳更大的那个。

举例说明各个函数的运行功能:

  1. LWWReg()函数返回一个字典,包含'value'和'timestamp'两个键值对,分别表示当前存储的值和时间戳。
  2. zero()函数返回一个空的LWW Register。
  3. value(r)函数返回LWW Register中存储的值。
  4. set_val(r, value, timestamp)函数用于向LWW Register中写入新的值和时间戳。如果新的时间戳比原来的时间戳更大,那么就更新值和时间戳。最后返回更新后的LWW Register。
  5. merge(r1, r2)函数用于合并两个LWW Register。如果r1的时间戳更大,就返回r1;否则返回r2。
def LWWReg():
return {'value': None, 'timestamp': 0} def zero():
return LWWReg() def value(r: LWWReg):
return r['value'] def set_val(r: LWWReg, value, timestamp):
if (r['timestamp'] < timestamp):
r['value'] = value
r['timestamp'] = timestamp
return r def merge(r1: LWWReg, r2: LWWReg):
if (r1['timestamp'] > r2['timestamp']):
return r1
else:
return r2
public class LWWReg {
public static Map<String, Object> LWWReg() {
Map<String, Object> map = new HashMap<>();
map.put("value", null);
map.put("timestamp", 0);
return map;
} public static Map<String, Object> zero() {
return LWWReg();
} public static Object value(Map<String, Object> r) {
return r.get("value");
} public static Map<String, Object> set_val(Map<String, Object> r, Object value, int timestamp) {
if ((int)r.get("timestamp") < timestamp) {
r.put("value", value);
r.put("timestamp", timestamp);
}
return r;
} public static Map<String, Object> merge(Map<String, Object> r1, Map<String, Object> r2) {
if ((int)r1.get("timestamp") > (int)r2.get("timestamp")) {
return r1;
} else {
return r2;
}
}
}

实现一个CRDT工具库——LWWReg的更多相关文章

  1. 如何手写一个js工具库?同时发布到npm上

    自从工作以来,写项目的时候经常需要手写一些方法和引入一些js库 JS基础又十分重要,于是就萌生出自己创建一个JS工具库并发布到npm上的想法 于是就创建了一个名为learnjts的项目,在空余时间也写 ...

  2. [js高手之路] 跟GhostWu一起封装一个字符串工具库-架构篇(1)

    所谓字符串工具库就是利用javascript面向对象的知识封装一个常用的字符串处理方法库,首先给这个库起个名字,好吧就叫ghostwu.js. 看下ghostwu.js的整体架构: ; (functi ...

  3. [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展trim,trimLeft,trimRight方法(2)

    我们接着上一篇的继续,在上一篇我们完成了工具库的架构,本文扩展字符串去空格的方法, 一共有3个 1,trimLeft: 去除字符串左边的空格 2,trimRight: 去除字符串右边的空格 3,tri ...

  4. [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展字符串位置方法(4)

    本文,我们接着之前的框架继续扩展,这次扩展了一共有5个与字符串位置相关的方法 between( left, right ) 返回两个字符串之间的内容, 如果第二个参数没有传递,返回的是找到的第一个参数 ...

  5. [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展camelize与dasherize方法(3)

    在此之前,我们已经完成了4个方法: trimLeft, trimRight, trim, capitalize 本文,我们扩展驼峰式与下划线转化这两个对称的方法 camelize: 把空格,下划线,中 ...

  6. 一个PHP高性能、多并发、restful的工具库(基于multi_curl)

    This is high performance curl wrapper written in pure PHP. It's compatible with PHP 5.4+ and HHVM. N ...

  7. Underscore.js工具库

    Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象. 他解决了这个问题:“如果我面对一个空白的 HTML ...

  8. JavaScript工具库

    jPublic 交流QQ群:1017567122 前言 在我们开发项目的时候,无论项目规模大小,在所难免会写一些工具型函数来解决一些问题,随着项目开发和维护的时间越来越长,这些工具型函数会越来越多,同 ...

  9. 手把手教你使用Rollup打包📦并发布自己的工具库🔧

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...

  10. 自己的一个LESS工具函数库

    自己大概在一年前开始使用LESS编写样式,现在感觉不用LESS都不会写样式了.现在写静态页面完全离不开LESS与Zen Coding,我可以不用什么IDE,但这两个工具却必须要,当然也强烈推荐看到这篇 ...

随机推荐

  1. python机器学习——朴素贝叶斯算法

    背景与原理: 朴素贝叶斯算法是机器学习领域最经典的算法之一,仍然是用来解决分类问题的. 那么对于分类问题,我们的模型始终是:用$m$组数据,每条数据形如$(x_{1},...,x_{n},y)$,表示 ...

  2. element table合计行自定义及单元格合并

    问题:项目需求要求table下面加合计一行 图片展示: 代码示例: TEMPLATE:   span-method是自定义table单元 show-summary是展示合并行 summary-meth ...

  3. github秒变vscode

    方法一:github.sth -> github1s.sth 方法二:github保持登录状态,然后是英文输入法,点击'.'就行

  4. Java基础Day6-面向对象

    一.面向对象编程(Object-Oriented Programming, OOP) 面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据. 从认识论的角度:先有对象后有类.对象是具体 ...

  5. 如何运用Vue自定义组件以及组件的传值

    Vue自定义组件 引入组件 首先在项目内的components新建.vue文件. 创建完成之后搭建完整的框架.其实就是新建组件,在此之前,需要在VScode中引入一个插件(vue 2 snippets ...

  6. Python+Django(4)——创建其他网页(模板继承)

    模板继承: 1,修改主页 父模板:抽取通用元素,在index.html同级目录下新建base.html <p> <a href="{% url 'learning_logs ...

  7. 六、js创建页码器:分页、上一页下一页、省略页码

    表格数据太多,需要做成分页.因此需要写一个页码器. 1,初始化页码 获取数据之后渲染页码器,页码器初始化,小于6页的全部展示,否则展示前四页,后面是省略号,最后展示尾页.默认选中第一页,禁用前一页的箭 ...

  8. IDEA中maven项目右侧maven图标不见了

    右侧maven图标没有了 解决方法:双击shift(或者点击help-->Find Action) 打开搜索功能 ---> 搜素Maven Project--->选择Add Mave ...

  9. Visual Studio快速清除程序中的空行 删除空行

    Ctrl+H; 正则替换 ^(?([^\r\n])\s)*\r?$\r?\n 快速删除多个空行

  10. Day1.无敌难受且成功

    Markdown学习 标题 字体 ctrl+b.l.u.k加粗.斜体.下划线.超链接 引用 大于号+空格 分割线 三个*** ###都 图片 !+[]+() 英文输入法的符号 输入的图片路径可本地也要 ...