Bloom Filter概念和原理
焦萌 2007年1月27日
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。
继续阅读 »
mdtoc start
内容简介
分布式系统的可靠性问题: 冗余和多副本
EC的基本原理
栗子🌰1: 实现k+1的冗余策略, 大概需要小学3年级的数学知识
栗子🌰2: 实现k+m的冗余策略, 大概需要初中2年级的数学知识
增加1个校验块, 变成k+2
实现k+m 的冗余
EC编码矩阵的几何解释
k=2, 为2个数据块生成冗余校验块
k=3, 4, 5...时的数据块的冗余
通过高次曲线生成冗余数据
从曲线方程得到的系数矩阵
EC解码过程: 求解n元一次方程组
[Vandermonde] 矩阵保证方程组有解
新世界: 伽罗华域 [Galois-Field] GF(7)
EC在计算机里的实现: 基于 伽罗华域 [Galois-Fiel
继续阅读 »
Mysql索引 - B树/B+树
介绍
B树/B+树介绍
B树
B+树
索引介绍
MylSAM 索引
InnoDB 索引
继续阅读 »
简介
Dremel 是Google 的“交互式”数据分析系统。可以组建成规模上千的集群,处理PB级别的数据。MapReduce处理一个数据,需要分钟级的时间。作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到秒级,作为MapReduce的有力补充。Dremel作为Google BigQuery的report引擎,获得了很大的成功。最近Apache计划推出Dremel的开源实现Drill,将Dremel的技术又推到了浪尖上。
继续阅读 »
写在前面
本系列是综合了自己在学习spark过程中的理解记录 + 对参考文章中的一些理解 + 个人实践spark过程中的一些心得而来。写这样一个系列仅仅是为了梳理个人学习spark的笔记记录,所以一切以能够理解为主,没有必要的细节就不会记录了,而且文中有时候会出现英文原版文档,只要不影响理解,都不翻译了。若想深入了解,最好阅读参考文章和官方文档。
继续阅读 »
作者简介:芭芭拉•明托,麦肯锡公司第一位女性咨询顾问。明托是哈佛商学院录取的第二批女学员之一,毕业时被国际知名管理咨询公司——麦肯锡聘请为该公司有史以来的第一位女性咨询顾问。她在写作方面的优势很快得到麦肯锡高层的赏识,负责提高麦肯锡公司员工的写作能力,致力于探索条理清晰的文章所必需的思维结构。本书在1973年首次出版,当即引起轰动,畅销欧美市场30年不衰,书中传授的方式与技巧,被公认为即便对于最有经验的管理者来说也是十分关键的。
表达的逻辑
为什么要用金字塔结构
文章中的思想必须符合以下规则:
- 纵向:文章中任一层次上的思想必须是其下一层次思想的概括
- 横向:每组中的思想必须属于同一逻辑范畴
- 横向:每组中的思想必须按逻
继续阅读 »
本文基于Koa v2.0.0。
1. Koa vs Express
Koa是继Express之后,Node的又一主流Web开发框架。相比于Express,Koa只保留了核心的中间件处理逻辑,去掉了路由,模板,以及其他一些功能。详细的比较可以参考Koa vs Express。
另一方面,在中间件的处理过程中,Koa和Express也有着一定区别,看下面例子:
```js
// http style
http.createServer((req, res) => {
// ...
})
// express style
app.use((req, res, next) => {
// ...
})
// koa st
继续阅读 »
RESTful API 调用很多人都在用 Retrofit,说到 Retrofit 就不得不提动态代理,虽然这不是它唯一的亮点,而且也不是动态代理的典型使用场景,但大家就是爱问:说说动态代理是怎么回事吧?Retrofit 的解析请见 拆轮子系列:拆 Retrofit。
继续阅读 »
greenlet是Python众多协程实现技术中的一种,eventlet是基于greenlet实现的。而eventlet和libev又是gevent的核心。greenlet的上下文切换清晰易懂,可以结合IO事件循环构建出一些高效的事件处理逻辑。不同于yield类型的上下文切换,greenlet的上下文切换从表现形式上看更纯粹,可以直接switch到另一个greenlet,不用管目标greenlet是否已经在运行,不同greenlet之间处于完全对等的状态,可以相互switch。基于yield实现的协程往往只能切换回自己的直接或间接调用者,要想在嵌套的调用中切换出去是比较麻烦的。本质上是因为yield只能保留栈顶的帧,Python3对
继续阅读 »
环境
Lucene 6.0.0
Java "1.8.0_111"
OS Windows 7 Ultimate
线程安全
在Lucene中,打开一个IndexWrite之后,就会自动在索引目录中生成write.lock文件,这个文件中并不会有内容,不管是在索引打开期间还是在索引关闭之后,其大小都为0KB,并且在IndexWriter关闭之后,并不会删除该文件。如果同时打开多个IndexWriter的话,后打开的IndexWriter就会抛出LockObtainFailedException异常。这是个很重要的保护机制,因为若针对同一索引打开两个writer的话,会导致索引损坏。所以Lucene中的锁主要针对并发写的情况,在写
继续阅读 »