一、
依赖的jar包
[com.google.guava/guava 14.0.1]
二、具体实现
(defn vnodes
"生成n个随机的vnode"
[n]
(vec (sort (repeatedly n #(rand-int 65536)))))
(defn short-hash
"产生一个0..2^16范围的hash值"
[s]
;; SHA-1 used for uniform value distribution
(bit-and (->> (.hashString (com.google.common.hash.Hashing/sha1) s) (.asInt)) 0xffff))
(defn closest-before
"查找之前最近的一个vnode"
[coll el]
(let [idx (java.util.Collections/binarySearch coll el compare)]
(cond
(= -1 idx) -1 ;;
(neg? idx) (coll (- -2 idx))
:else (coll idx))))
(defn responsible
"超找某个数据hash之后应该属于哪个node。因为一个node包含一组vnode。所以多了个这个方法,不然用到closest-before其实就够了。"
[hash ^List ring]
(let [found (apply max-key #(closest-before % hash) ring)]
(.lastIndexOf ring found)))
(closest-before [1 2 3 4 20 30 60 80 1020 34045] 50)
;;==>30
;;假设有node1:[100 200 300]。100,200,300是vnode。
;;假设有node2:[400 500 600]。
;;结果为1。可以把这连个node串成一个环(ring)来看。往前找最近的,就是node2了。所以返回index值为1。
(responsible 50 [[100 200 300] [400 500 600]] )
;;==> 1
分享到:
相关推荐
Music Compojure 是一个基于 Clojure 的音乐语法和算法作曲的相关工具。Music Compojure 不隶属于 Compojure,也不应与 Compojure 混淆,后者是 clojure 的 Web 框架。
Lacinia 纯Clojure实现的GraphQL
一个小型遗传算法框架,用 Clojure 编写
Darwin 是一个灵活的遗传算法编程框架,旨在研究应用。它与表示无关,对于简单的 GA 示例和对于复杂的遗传编程问题一样有效。它可以配置为执行单目标和多目标优化,包括 SPEA2 算法。它具有自适应进化的功能,其中...
clojure_manifold Clojure 中的算法。说明:用法在这两种情况下,M 都是一个矩阵,我们尝试将 M 拟合到 k 维,其中 k < M> ( use 'clojure-manifold.data :reload )niluser> ( def M ( load-data " foo.csv " ))MDS...
概述 我最喜欢的用 Clojure 编写的元启发式优化算法,用于试验该语言的并发特性。
[Pragmatic Bookshelf] 网络应用开发 (Clojure 实现) (英文版) [Pragmatic Bookshelf] Web Development with Clojure Build Bulletproof Web Apps with Less Code (E-Book) ☆ 图书概要:☆ If the usual ...
排序算法 这是在Clojure中实现的一组排序算法示例。 他们专注于以函数式编程风格进行分类的经典方式。 排序算法列表: 选择排序 插入排序 快速分类 合并排序 气泡排序 贝壳类
uNGM{nTNHMzIVnn → Clojure实现是用CLJC文件编写的,因此可以像Clojure和ClojureScript代码一样使用它们。编码方式您可以使用功能blurhash.encode/encode将图像编码为blurhash。 它将图像作为RGB矩阵,当前表示为...
cljc-bloom 一个用Clojure(脚本)实现的跨平台布隆过滤器
利用Clojure实现的一个可拖放的“看板”示例
clojurec, 在C 之上,一个Clojure实现 ClojureC这是面向的面向对象编程语言的编译器。 它基于 ClojureScript,并开始于ClojureScript提交 0e0aa7fdd379649bf87f8fff5c6a64e37fe616a4 社区和组织我们使用
这是Programming Clojure 电子版的 纸质版本在美国亚马逊要到2009年3月才能上架 Paperback: 200 pages Publisher: Pragmatic Bookshelf (March 15, 2009) Language: English ISBN-10: 1934356336 ISBN-13: 978-...
pagerank-clj pagerank 算法的 Clojure 实现 执照 版权所有 :copyright: 2015 Emrehan Tüzün 在 MIT 许可下分发
Clojure is an opinionated language—it doesn’t try to cover all paradigms or provide every checklist bullet-point feature. Instead it provides the features needed to solve all kinds of real-world ...
Practical Clojure Clojure语言书籍
Clear, practical Clojure for the professional programmer Professional Clojure is the experienced developer's guide to functional programming using the Clojure language. Designed specifically to meet ...
clojure clojure clojureclojure clojure
Nginx-Clojure 是一个 Nginx 的模块,用于嵌入 Clojure 或者 Java 或者 Groovy 程序。 可以通过nginx-clojure实现JAVA扩展nginx的功能,如权限验证。
在今后的软件设计中无论使用Clojure语言,还是坚持使用Java语言,Clojure语言都将与java做比较,哪种是设计软件的最佳方式。 Clojure语言是一个JVM(包括Groovy,Jython和JRuby等语言)的新语言,它提供了活力,...