murmur3

springboot Redis 布隆过滤器

℡╲_俬逩灬. 提交于 2020-12-06 19:53:35
一、布隆的定义是什么? 布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以 用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。 它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元 素不再集合,那肯定不在。如果判断元素存在集合中,有一定的概率判断错误。因此,Bloom Filter”不适合那些“零错误的应用场合。 而在能容忍低错误率的应用场合下,Bloom Filter比其他常见的算法(如hash,折半查找)极大节省了空间。 二、布隆的原理是什么 布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我 们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检 元素很可能在。这就是布隆过滤器的基本思想。 Bloom Filter跟单哈希函数Bit-Map不同之处在于:Bloom

Elasticsearch系列---聚合查询(二)

[亡魂溺海] 提交于 2020-08-08 19:58:54
概要 近似聚合算法 上一篇我们演练的聚合算法,在Elasticsearch分布式场景下,其实是有略微区别的,简单来说我们可以把这些聚合算法分成两类,易并行算法和不易并行算法。 易并行算法 比如max,min,就是多个node或shard可以单独并行计算,并且可以随着机器数的线性增长而横向扩展,没有任何协调操作,得到的结果返回给Coordinate Node时的数据量已经非常小了,像max或min,只需返回给Coordinate Node一个Long值就行。 不易并行算法 没有上述的优势,每个node或shard返回的数据都特别大,节点越多,Coordinate Node处理压力越大,如经典的TOP N问题。 近似算法 针对易并行算法,处理节点分散,结果准确,但针对不易并行算法,ES会采取近似聚合的方式,采用cardinality或percentiles算法,这两个算法近似估计后的结果,不完全准确,误差率约为0.5%,但是速度会很快,一般会达到完全精准的算法的性能的数十倍。 三角选择原则 有点类似于CAP理论,精准、实时、大数据,只能选择其中2个 精准+实时: 数据量小,随便玩 精准+大数据:hadoop,批处理,非实时,可以处理海量数据,保证精准,可能会跑几个小时 大数据+实时:es,不精准,近似估计,可能会有百分之几的错误率 没有什么方案是100%完美的,完美主义在这里不好使。

Cassandra最佳实践(3)配置篇

£可爱£侵袭症+ 提交于 2020-03-25 09:14:26
3 月,跳不动了?>>> 本篇文章我们主要介绍cassandra的相关配置,我把cassandra的相关配置中个人觉得相对比较重要的按照集群、节点这个横向维度进行介绍,可能有的配置我不会列在这里,那么具有见cassandra.yaml里面的详细介绍;如何配置cassandra,需要在集群启动的时候在conf目录下面的cassandra.yaml里面进行配置即可。此外我们的配置需要遵守yaml文件配置规则。本处以3.11.4进行介绍 集群维度 cluster_name: //集群的名字,默认是Test Cluster,用''括起来。不同的cluster name的节点无法组成一个集群 num_tokens: 256 //集群中单节点的的分配token数,因为使用vnode,也就是vnode的个数,每个token是随机生成的,此外如果不使用vnode的话,可以使用每个节点预分配一个初始的token,通过下面的配置下; initial_token: //如果集群不想使用vnode的话,需要手工给每个节点进行token配置,手工计算节点的token数,但是扩容的时候建议是成倍扩容。vnode不需要 partitioner: //集群的数据分配算法,也就是常见的一致性hash算法中计算hash的那个模块,其中默认使用org.apache.cassandra.dht

从Java脚本中的字符串生成哈希

六眼飞鱼酱① 提交于 2020-02-26 00:28:26
我需要将字符串转换为某种形式的哈希。 这在JavaScript中可行吗? 我没有使用服务器端语言,所以我不能那样做。 #1楼 编辑 根据我的jsperf测试,可接受的答案实际上更快: http ://jsperf.com/hashcodelordvlad 原版的 如果有人感兴趣,这是一个改进的(更快的)版本,它将在缺少 reduce 数组功能的旧版浏览器上失败。 hashCode = function(s){ return s.split("").reduce(function(a,b){a=((a<<5)-a)+b.charCodeAt(0);return a&a},0); } 单线箭头功能版本: hashCode = s => s.split('').reduce((a,b)=>{a=((a<<5)-a)+b.charCodeAt(0);return a&a},0) #2楼 我需要一个类似的函数(但有所不同)来根据用户名和当前时间生成一个唯一的ID。 所以: window.newId = -> # create a number based on the username unless window.userNumber? window.userNumber = 0 for c,i in window.MyNamespace.userName char = window