SortedSet(ZSet)数据结构SortedSet(ZSet),即有序集合,底层使用压缩列表(ziplist)或者跳跃表(skiplist)使用压缩列表(ziplist)当同时满足下面两个条件时,使用ziplist存储数据元素个数少于128个(zset-max-ziplist-entries:128)每个元素长度小于64字节(zset-max-ziplist-value:64)不满足上面的条件,使用跳跃表(skiplist)zset在转为skiplist之后,即使元素被逐渐删除,也不会重新转为ziplist有趣的命名:SortedSet为啥不缩写为SSet?GitHub有人提问Z代表XY
SortedSet(ZSet)数据结构SortedSet(ZSet),即有序集合,底层使用压缩列表(ziplist)或者跳跃表(skiplist)使用压缩列表(ziplist)当同时满足下面两个条件时,使用ziplist存储数据元素个数少于128个(zset-max-ziplist-entries:128)每个元素长度小于64字节(zset-max-ziplist-value:64)不满足上面的条件,使用跳跃表(skiplist)zset在转为skiplist之后,即使元素被逐渐删除,也不会重新转为ziplist有趣的命名:SortedSet为啥不缩写为SSet?GitHub有人提问Z代表XY
15445第一阶段笔记+BufferPool(2019)概念page与frame 块,页,是对同一概念的不同叫法,取决于场景不同。其表述的都是磁盘上某一柱面上的连续扇区(固定数目)。数据在磁盘和缓冲区(内存)之间传输,传输的单位就是块(页)。 内存区是以定长的页数组的形式组织的,其中每一个数组条目,被称为一个帧(frame)。当DBMS请求一个页时,被请求页的一份拷贝就被读取进其中一个帧中。 所以,page和frame实际是指的是同一个概念,bufferpool中的叫做帧,磁盘与内存之间的传输单位的叫做page或者block。pagetable 是一个PageID到FrameID的映射
15445第一阶段笔记+BufferPool(2019)概念page与frame 块,页,是对同一概念的不同叫法,取决于场景不同。其表述的都是磁盘上某一柱面上的连续扇区(固定数目)。数据在磁盘和缓冲区(内存)之间传输,传输的单位就是块(页)。 内存区是以定长的页数组的形式组织的,其中每一个数组条目,被称为一个帧(frame)。当DBMS请求一个页时,被请求页的一份拷贝就被读取进其中一个帧中。 所以,page和frame实际是指的是同一个概念,bufferpool中的叫做帧,磁盘与内存之间的传输单位的叫做page或者block。pagetable 是一个PageID到FrameID的映射
1引言之前介绍了Redis的数据存储及String类型的实现,接下来再来看下List、Hash、Set及SortedSet的数据结构的实现。2ListList类型通常被用作异步消息队列、文章列表查询等;存储有序可重复数据或做为简单的消息推送机制时,可以使用Redis的List类型。对于这些数据的存储通常会使用链表或者数组作为存储结构。使用数组存储,随机访问节点通过索引定位时间复杂度为O(1)。但在初始化时需要分配连续的内存空间;在增加数据时,如果超过当前分配空间,需要将数据整体搬迁移到新数组中。使用链表存储,在进行前序遍历或后续遍历,当前节点中要存储前指针和后指针,这两个指针在分别需要8byt
1引言之前介绍了Redis的数据存储及String类型的实现,接下来再来看下List、Hash、Set及SortedSet的数据结构的实现。2ListList类型通常被用作异步消息队列、文章列表查询等;存储有序可重复数据或做为简单的消息推送机制时,可以使用Redis的List类型。对于这些数据的存储通常会使用链表或者数组作为存储结构。使用数组存储,随机访问节点通过索引定位时间复杂度为O(1)。但在初始化时需要分配连续的内存空间;在增加数据时,如果超过当前分配空间,需要将数据整体搬迁移到新数组中。使用链表存储,在进行前序遍历或后续遍历,当前节点中要存储前指针和后指针,这两个指针在分别需要8byt
这一次我们来分析下muduo中Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们想象一下最简单的EchoServer服务器,客户端建立一个连接,以后服务器和客户端之间的通信都是通过这个connfd发送和接受数据,于是每一个connfd都应该有一个自己buffer,当我们发送数据太快,服务器发送的太慢,则服务器会将待发送的数据这个buffer中,所以这就是这个类的作用。我们先看下buffer的结构是什么:我们这里主要针对connfd这个对应的channel进行分析,首先上图是buffer的初始状态,前
这一次我们来分析下muduo中Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们想象一下最简单的EchoServer服务器,客户端建立一个连接,以后服务器和客户端之间的通信都是通过这个connfd发送和接受数据,于是每一个connfd都应该有一个自己buffer,当我们发送数据太快,服务器发送的太慢,则服务器会将待发送的数据这个buffer中,所以这就是这个类的作用。我们先看下buffer的结构是什么:我们这里主要针对connfd这个对应的channel进行分析,首先上图是buffer的初始状态,前
C++STL标准库中提供了多个用于排序的Sort函数,常用的包括有sort()/stable_sort()/partial_sort(),具体的函数用法如下表所示:函数用法std::sort(first,last)对容器或数组first~last范围内的元素进行排序,默认升序排序std::stable_sort(first,last)对容器或数组first~last范围内的元素进行排序,保持原有数组相对顺序,默认升序排序std::partial_sort(first,middle,last)在容器或数组first~last范围内,查找最小(大)middle-first个元素排序,放入first
C++STL标准库中提供了多个用于排序的Sort函数,常用的包括有sort()/stable_sort()/partial_sort(),具体的函数用法如下表所示:函数用法std::sort(first,last)对容器或数组first~last范围内的元素进行排序,默认升序排序std::stable_sort(first,last)对容器或数组first~last范围内的元素进行排序,保持原有数组相对顺序,默认升序排序std::partial_sort(first,middle,last)在容器或数组first~last范围内,查找最小(大)middle-first个元素排序,放入first