首页 文章 精选 留言 我的

精选列表

搜索[分布式锁],共10000篇文章
优秀的个人博客,低调大师

云原生数据库-浪潮云溪分布式数据库SST文件结构

LSM tree保证数据库是有序写入(memtable-skiplist),起高了写性能,但是因为其本身的分层结构,牺牲了读性能(一个key如存储在了低级别的level,从上到下每一层都要进行查找,代价极大)。所以,针对读的性能提升有了很多的优化:bloom filter (高校判读一个key是否不存在),index-filter(二分查找,消耗低内存的情况下)所以key-value数据。这一些数据库都需要存储在SST文件之中,用来进行k-v数据的有序管理。 SST文件格式概览 1)Footer : 固定48字节,指出 IndexBlock 和 MetaIndexBlock 在文件中的偏移量信息,它是元信息的元信息,它位于 sstable 文件的尾部 2)IndexBlock:占用一个 block 空间,记录了 DataBlock 相关的元信息 3)MetaIndexBlock:占用一个 block 空间,各个元信息的Block,包括Filter、Properties(整个table的属性信息)、Compression dictionary、Range deletion tombstone 4)MetaBlock:可能占用多个 block空间,存储布隆过滤器的二进制数据 及其他元信息数据 5)DataBlock:可能占用多个 block空间,存储实际的数据即键值对内容 Footer 结构 Footer固定48个字节大小,位于SSTable文件尾部;MetaBlockIndex和DataBlockIndex的offset和size组成BlockHandlel类型,用于寻址MetaBlockIndex和DataBlcokIndex的块所在的位置,size和offset采用varint变长编码,以节省空间,offset和size最少占用1个字节长度、最多占用9个字节长度,因此MetaBlockIndex和DataBlockIndex的offset和size最多占用4*9=36个字节,通过padding补齐到40个字节(8字节对齐);比如DataBlockIndex.offset = 64、DataBlockIndex.size=216,表示DataBlockIndex位于SSTable文件的第64个字节至280个字节。 Block 结构 5个部分的数据结构,除了 Footer,其他的物理结构都是 Block 形式。每个 Block 对应物理磁盘的一个存储块,因此, Block 的大小与磁盘存储块的大小一致.这也是Footer放到文件末尾的原因,Footer本身48个字节不能占用一个磁盘存储块.Block 在硬盘上存储的时候,会在实际数据之后加上5个字节的额外内容:compression type、crc。 Data Block 结构 DataBlcok Key 的存储采用了前缀压缩机制,前缀压缩,就是对于 key 的相同前缀,尽量只存储一次以节省空间。但是对于 SSTable 来说它并不是对整个 block 的所有 key 进行一次性地前缀压缩,而是设置了很多区段,处于同一区段的 key 进行一次前缀压缩,每个区段的起点就是一个重启点。前缀压缩机制导致每条记录需要记住它对应的 key 的共享长度和非共享长度。所 谓 key 的共享长度,是指当前这条记录的 key 与上一条记录的 key 公共前缀的长 度,非共享长度则是去掉相同部分后的不同部分的长度。这样当前这条记录只需要存储不同的那部分 key 的值即可。 第一部分(Entry)用来存储key-value数据。由于sstable中所有的key-value对都是严格按序存储的,用了节省存储空间,并不会为每一对key-value对都存储完整的key值,而是存储与上一个key非共享的部分,避免了key重复内容的存储。每间隔若干个key-value对,将为该条记录重新存储一个完整的key。重复该过程(默认间隔值为16),每个重新存储完整key的点称之为Restart point。 Restart point的目的是在读取sstable内容时,加速查找的过程。由于每个Restart point存储的都是完整的key值,因此在sstable中进行数据查找时,可以首先利用restart point点的数据进行键值比较,以便于快速定位目标数据所在的区域;当确定目标数据所在区域时,再依次对区间内所有数据项逐项比较key值,进行细粒度地查找;该思想有点类似于跳表中利用高层数据迅速定位,底层数据详细查找的理念,降低查找的复杂度。 KV 数据存储结构 shared key length: 与 restart point 相同的key前缀字节长度. unshared key length: 当前key减去restart point 相同前缀长度后,剩余的字节长度 value length: 数值的字节长度 unshared key content: key与restart point中的key不相同部分的key内容. value: 存储真实的数值 Index Block 结构 index block包含若干条记录,每一条记录代表一个data block的索引信息,用于快速定位到包含特定key的Data Block;Index Block首先是一个block,因此包含三部分KeyValue、Type(固定1字节)、CRC检验码(固定4字节);Type标识该部分数据是否采用压缩算法,CRC是KeyValue + Type的检验码。 一条索引包括以下内容: key,取值是大于等于其索引block的最大key,并且小于下一个block的最小key; 该data block起始地址在sstable中的偏移量; 该data block的大小; IndexBlock和 DataBlock 一样,采取了前缀压缩,只不过间隔为2(DataBlock 默认为16)。 为什么key不是采用其索引的DataBlock的最大key? 主要目的是节省空间;假设其索引的block的最大key为"acknowledge",下一个block最小的key为"apple",如果DataBlockIndex的key采用其索引block的最大key,占用长度为len("acknowledge");采用后一种方式,key值可以为"ad"("acknowledge" < "ad" < "apple"),长度仅为2,并且检索效果是一样的。 为什么BlockHandle的offset和size的单位是字节数而不是block? 因为SSTable中的block大小是不固定的,虽然option中可以指定block_size参数,但SSTable中存储数据时,并未严格按照block_size对齐,所以offset和size指的是偏移字节数和长度字节数。这样做主要有两个原因: (1)可以存储任意长度的key和任意长度的value,而同一个key-value是不能跨block存储的,极端情况下,比如我们的单个 value 就很大,已经超过了 block_size,那么对于这种情况,SSTable 就没法进 行存储了。所以通常,实际的 Block 大小都是要略微大于 block_size 的; (2)从另外一个角度看,如果严格按照block_size对齐存储数据,必然有很多block通过补0的方式对齐,浪费存储空间。

优秀的个人博客,低调大师

分布式监控系统 WGCLOUD v3.3.2 发布,新增 web 版 ssh 工具、堡垒机能力

WGCLOUD,server端基于springboot开发,agent端使用go编写。支持高并发高性能,核心模块包括:主机监控,ES集群管理,CPU监控,CPU温度监控,内存监控,数据监控,docker监控,网络流量监控,服务接口心跳检测,应用进程管理,磁盘IO监控,系统负载监控,端口监控,大屏可视化,日志文件监控,硬盘smart健康检测,web版ssh工具,堡垒机,监控告警信息(默认邮件,支持钉钉微信集成)推送。 码云源码下载:https://gitee.com/wanghouhou/wgcloud GITHUB源码下载:https://github.com/tianshiyeben/wgcloud 安装包下载:http://www.wgstart.com WGCLOUD-v3.3.2更新说明,2021-04-29: WGCLOUD-v3.3.2更新说明,2021-04-29发布 1.新增,web shh终端,相当于堡垒机(跳板机),在浏览器即可通过ssh连接到主机,进行shell指令执行。在浏览器远程连接windows,需要在windows安装远程连接服务,如:Myrtille工具、Remote desktop web connection工具 2.新增,大屏展板是否开启配置项,在/server/config/application.yml配置选项dapingView,之前版本和公众看板共用配置项dashView 3.新增,DOCKER下线告警配置项,之前版本和进程下线告警共用配置项appDownWarnMail 4.新增,主机的上行带宽速率和下行带宽速率告警 5.新增,主机的网络传输丢包数量指标图表 6.新增,数据开放接口:获取主机cpu状态数据、获取主机系统负载数据、获取主机内存状态数据、获取主机磁盘容量数据、获取主机磁盘io数据、获取主机cpu温度数据、获取主机上下行带宽数据 7.新增,日志文件监控扫描间隔可配置,之前版本默认10分钟扫描一次日志文件,在agent/config/application.properties下配置 8.优化,agent采用新版本golang v1.15.11编译打包(之前使用v1.13.8),优化提升agent性能 9.优化,agent引入自动清理日志文件机制,节省磁盘空间,可在agent/config/application.properties配置日志文件保留天数 10.优化,图表渲染速度、显示及配色 11.优化,改造优化大屏展示 12.优化,对下线的进程、端口、docker、主机信息不再自动删除(之前版本会和历史数据一起清除),用户可以手动删除。但是监控指标的历史数据依然自动清除 13.bug,修复未登录时跳转到404页面,会显示导航菜单的问题 14.底层架构重构、性能优化、UI整体优化 15.历史版本升级请点击,历史版本升级说明

优秀的个人博客,低调大师

分布式图数据库 Nebula Graph v2.0.1 发布,优化了服务性能

Nebula Graph v2.0.1 主要优化服务性能,修复了一些已知 bug。 Improvements 优化了StorageClient,提高了服务性能,pr 参见:#4681 增加 HTTPGetFlags接口对无符号整型的支持,pr 参见:#469 增加对 Raft Listener 和 Storage Service IP/Port 的冲突检查,pr 参见:#875、#468 Bugfix 修复了GO在特殊场景下未返回起点属性的问题,pr 参见:#859 修复了以某些方式启动服务时,因logs目录不存在导致启动失败的问题,pr 参见:#873、#403 修复了FIND SHORTEST PATH xxx UPTO N STEPS当 N 为奇数步时,返回了 N+1 步路径的问题,pr 参见:#912 修复了使用其它语句的输出作为DELETE语句的输入时,返回SementicError的问题,pr 参见:#9171 修复了聚合函数的默认返回值与 openCypher 不一致的问题,pr 参见:#901、#480 修复了集群模式下,GetNeighborsIter接口返回部分结果的问题,pr 参见:#922 修复了MATCH语句中,对聚合函数过滤时 graphd 会 crash 的问题,pr 参见:#919 修复了MATCH无法查询 id 为负数的点的问题,pr 参见:#932 修复了在SHOW CREATE TAG/EDGE INDEX <index_name>中指定TAG或EDGE无效的问题,pr 参见:#933、#426 修复了在某些情况下REBUILD INDEX失败却返回成功的问题,pr 参见:#405 修复了重建索引过程中,某些情况下可能导致正在插入的数据索引更新失败的问题,pr 参见:#408 修复了当substr()或substring()函数中任一参数为NULL时,graphd 会 crash 的问题,pr 参见:#491 最后是 Nebula 的 GitHub 地址,欢迎大家试用,有什么问题可以向我们提 issue。GitHub 地址:https://github.com/vesoft-inc/nebula-graph;

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册