- 博客(9)
- 问答 (1)
- 收藏
- 关注
原创 布隆过滤器 学习笔记
一、前言布隆过滤器是大数据领域一个经常用到的算法,他经常用于在海量数据的场景中,快速判断某个元素在不在一个庞大的集合中。二、原理2.1、布隆过滤器用于解决什么问题在我们通常的理解中,要想判断某个元素是否在一个集合中,经典的结构应该是平衡树和Hash表。但无论哪种方法,都逃不开一点,就是存储原值。比如在爬虫场景中,我们需要记录下之前爬过的网站,我们要将之前的网址全部存储在容器里,然后再遇到新网站的时候,去判断他是否已经爬过了。在这个问题中,我们并不关心之前爬过的网址有哪些,我们只关心现在的网站有没有
2020-10-28 16:10:44 210
原创 Skiplist 跳表 学习笔记
一、Skiplist简介Skiplist是功能强大且原理简单的数据结构,且相比布隆过滤器,他的缺点和短板更少,应用更加广泛,如redis就用到了Skiplist。Skiplist是一个实现快速查找、增删数据的数据结构,可以做到O(logN) 时间复杂度的增删查,与红黑树相比他的logN中的N更小(skiplist的logN的在N范围内是随机的,一定小于N),且编码复杂度更低。因为Skiplist不需要旋转来维护红黑树的平衡。二、Skiplist原理Skiplist本质上是list, 也就是链表。我们
2020-10-27 20:56:42 457 2
原创 数据库事务的ACID四大原则 学习笔记
一、前言说起数据库,可以不知道SQL,但一定不能不知道ACID。数据库事务ACID四大原则:A 代表Atomicity,即原子性;C 表示Consistency,即一致性;I 表示Isolation,即隔离性;D 表示Durability,即持久性。二、原子性原子性简单,也最常用。即在事务中所有操作都被视为一个不可分割的整体,要么全成功,要么全失败。原子性经典的例子是A给B转账,不能A扣了钱,但B却没收到(因为网络等原因)。事务的一种实现方法是在执行的时候,先不将最终的结果更新到
2020-10-27 17:54:04 2178
原创 Hadoop与MapReduce学习笔记
一、Hadoop简介Hadoop最早只是单纯的值分布式计算系统,但随着时代的发展,目前hadoop已成了一个完整的技术家族。从底层的分布式文件系统(HDFS)到顶层的数据解析运行工具(Hive, Pig),再到分布式协调服务(Zookeeper),以及流行的分布式数据库(HBase),都属于Hadoop家族,几乎涵盖了大部分大数据应用场景。在Spark没流行之前,hadoop一直是大数据应用中的绝对主流,即使是现在,依旧有大量的中小型公司,还是依靠Hadoop搭建大数据系统。虽然如今Hadoop家族庞大
2020-10-27 17:36:04 717
原创 高吞吐、HBase的承载者 LSMT 学习笔记
一、简介LSMT,即Log-Structured Merge-Tree,这是一个经典的数据结构,在大数据系统中有着非常广泛的应用。很多耳熟能详的经典系统,底层就是基于LSMT实现的。1.1、背景知识B+ Tree和B Tree的最大区别是将所有数据都放在了叶子节点,从而优化了批量插入和批量查询的效率,而优化的核心逻辑就是无论是什么存储介质,顺序存储的效率一定优于随机存储。下面的图很好的描述了随机读和顺序读的性能差异:这种差异不仅在机械硬盘上存储,在SSD上也一样存在。1.2、直观优化既然随机
2020-10-27 13:56:31 3354
原创 LevelDB 底层原理学习笔记
一、LevelDB简介LevelDB不同于关系型数据库,他内部的数据全部以KV形式存储,不支持SQL,只支持API调用。LevelDB是个noSQL的数据库引擎,由google开发并开源,由C++编写。Facebook在此基础上推出了RocksDB,后来包括TiDB等多种分布式noSQL数据库底层都是基于LevelDB。二、LevelDB架构首先上层是MemTable, Immutable MemTable。MemTable本质上就是个存放在内存中的SkipList数据结构。Immutable
2020-10-26 21:57:45 1015 2
原创 LevelDB整体架构学习笔记
一、简介LevelDB是一个可持久化的KV数据库引擎,由Google传奇工程师Jeff Dean和Sanjay Ghemawat开发并开源。二、设计思路众所周知,普通机械磁盘的顺序写性能远高于随机写,例如15000转的SAS盘,4000 IO写入,顺序写IOPS 为 200MB/s,而随机写性能只有 1MB/s,相差200倍。LevelDB的设计正是利用了磁盘的这个特性。LevelDB的数据是存储在磁盘上的,采用 LSM-Tree 结构。LSM-Tree将磁盘的随机写转化为顺序写,从而大大提高了写速
2020-10-14 10:07:01 172 1
原创 Redis 6.0 多线程IO 学习笔记
一、异步处理IORedis的核心工作负荷是一个单线程在处理,但为什么还那么快?(10万qps)纯内存操作IO数据的处理是异步的,每个命令从接收到处理,再到返回,会经历多个“不连续”的工序。这里异步处理IO不是“同步/异步 的IO”,而是IO处理过程是异步的。假设客户端给redis发送了get aaa指令,redis要处理指令,redis必须完整地接收客户端的请求,并对指令解析,然后读取返回结果,再通过网络回写给客户端。这整个过程分以下几部分:接收指令:通过TCP接收到指令,可能会经历多次T
2020-10-09 21:16:36 312
原创 Redis bigkey学习笔记
一、什么是Redis bigkey下面两种情况,redis的key我们认为他是bigkey:字符串类型:在redis中一个字符串最大是512MB,所谓bigkey是指单个value很大,一般超过10KB就认为是bigkey非字符串类型:哈希、列表、集合、有序集合等集合类型,bigkey主要体现在元素个数太多二、bigkey的危害bigkey可以说是redis中的老鼠屎,具体表现在:2.1、内存空间不均匀有bigkey的redis节点占用内存多,而其他节点占用内存少,导致集群中不同redis
2020-10-09 16:56:14 1011
空空如也
求:Java实现下面的算法,要求尽量高的性能
2015-09-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人