leveldb 学习记录(一) skiplist】的更多相关文章

在leveldb 学习记录(一) skiplist 已经将skiplist的插入 查找等操作流程用图示说明 这里在介绍 下skiplist的代码 里面有几个模块 template<typename Key, class Comparator>class SkipList {......} class Arena;(内存池模块 暂时不介绍) struct Node;(节点 存储key 和指向其他Node的指针) //Node 构造函数 KEY赋值 // Implementation detail…
leveldb LevelDb是一个持久化存储的KV系统,并非完全将数据放置于内存中,部分数据也会存储到磁盘上. 想了解这个由谷歌大神编写的经典项目. 可以从数据结构以及数据结构的处理下手,也可以从示例的某一点深入跟进系统,查看处理流程. windows下编译leveldb  地址 leveldb 源码编译 vs版本 目前手头资料中,源码中的文档以及网络的代码分析心得如下,本文也做了参考,感谢作者. 流程类 数据分析与处理之二(Leveldb 实现原理) [跟吉姆一起读LevelDB]0.源代码…
前文: leveldb 学习记录(一) skiplist leveldb 学习记录(二) Slice 存储格式: leveldb数据在内存中以 Memtable存储(核心结构是skiplist 已介绍),当达到一定容量则转换为Immutable Memtable,由后台线程存储进磁盘中.同时另开一个新 Memtable,记录数据. Memtable记录修改新kv对,可读可写.Immutable Memtable不可更改. Memtable使用的就是skiplist记录key value clas…
前文记录 leveldb 学习记录(一) skiplistleveldb 学习记录(二) Sliceleveldb 学习记录(三) MemTable 与 Immutable Memtableleveldb 学习记录(四) skiplist补完 KV数据库中 大部分是采用内存存储,如果中途发生意外情况,没有dump到磁盘的记录就可能会丢失,但是如果采用log记录操作便可以按照log记录进行这部分的数据恢复 所以,我们在每次操作kv记录的时候都需要将操作记录到log文件中. 每个日志文件都会切分为3…
本节主要记录SSTable的结构 为下一步代码阅读打好基础,考虑到已经有大量优秀博客解析透彻 就不再编写了 这里推荐 https://blog.csdn.net/tankles/article/details/7663905 levelDB源码分析-SSTable SSTable是Bigtable中至关重要的一块,对于LevelDB来说也是如此,对LevelDB的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节.     本节内容主要讲述SSTable的静态布局结构,SST…
使用TableBuilder构造一个Table struct TableBuilder::Rep { // TableBuilder内部使用的结构,记录当前的一些状态等 Options options; Options index_block_options; WritableFile* file; // 对应的.sst文件 uint64_t offset; Status status; BlockBuilder data_block; // Data Block BlockBuilder in…
随着运行时间的增加,memtable会慢慢 转化成 sstable. sstable会越来越多 我们就需要进行整合 compact 代码会在写入查询key值 db写入时等多出位置调用MaybeScheduleCompaction () 检测是否需要进行compact void DBImpl::MaybeScheduleCompaction() { mutex_.AssertHeld(); if (bg_compaction_scheduled_) { // Already scheduled }…
基本每个KV库都有一个简洁的字符串管理类 比如redis的sds  比如leveldb的slice 管理一个字符串指针和数据长度 通过对字符串指针 长度的管理实现一般的创建 判断是否为空 获取第N个位置元素等管理 还可以进行字符串裁剪等操作 避免了一些复制拷贝的消耗性能的操作. class Slice {public: // Return the ith byte in the referenced data. // REQUIRES: n < size() //返回字符串中第N个字符 char…
block结构示意图 sstable中Block 头文件如下: class Block { public: // Initialize the block with the specified contents. // Takes ownership of data[] and will delete[] it when done. Block(const char* data, size_t size); ~Block(); size_t size() const { return size_…
LevelDB学习笔记 (3): 长文解析memtable.跳表和内存池Arena 1. MemTable的基本信息 我们前面说过leveldb的所有数据都会先写入memtable中,在leveldb中每个 LevelDB 实例最多会维护两个 MemTable: mem_ 和 imm_.mem_ 可以读写,imm_ 只读.分别对应了memtable和immutable table. 1.1 首先去看一下db/memtable.h 下面是基本的构造信息 class MemTable { publi…
VersionEdit: compact过程中会有一系列改变当前Version的操作(FileNumber添加.删除input的sstable,添加输出的sstable).为了缩小version切换的时间点,将这些操作封装成versionedit,compact完毕时,将versionedit中的操作一次应用到当前version就可以得到最新状态的version. versionedit的成员变量: private: friend class VersionSet; typedef std::s…
LevelDB 学习笔记2:合并 部分图片来自 RocksDB 文档 Minor Compaction 将内存数据库刷到硬盘的过程称为 minor compaction 产出的 L0 层的 sstable 事实上,LevelDB 不一定会将 minor compaction 产生的 sstable 放到 L0 里 L0 层的 sstable 可能存在 overlap 如果上一次产生的 imm memtable 还没能刷盘,而新的 memtable 已写满,写入线程必须等待到 minor comp…
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不需要定时任务,但是我觉得这个框架还是蛮有意思的,所以就打算来研究学习一下.记录分享一下我的学习记录. 另外网上有的一些定时任务的时间CRON怎么配置什么的我就不介绍了...烂大街了...我就说说我的理解. 与Spring整合 现在可能不太有不用Spring的地方了吧..Spring与quartz整合…
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合,我并不是很清楚,留下一些值得思考的问题作为记录,说不定以后能自己来填.于是就会有这篇文章啦. 常规使用方法我也不想介绍,网上一大把,我就说说比较容易错的,值得注意的地方. 注意 这篇文章只是分享一下我对内部类的一些研究与困惑吧,说不定对大家有帮助,说不定能引导大家一起思考学习.Java语法知识其实…
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了....而这些地方又是蛮难的..比如3.5节Authorizer.PermissionResolver及RolePermissionResolver...可能作者觉得讲清楚要花太多的篇幅涉及太多的类吧.....但是我看起来就很不爽0.0....既然提到了就想弄明白.....不然太纠结了....所以就有了这篇…
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参考. 如果你的应用需要为处于另一个应用的上下文中的用户快速完成内容接收,则可以考虑使用“共享”合约. 应用可以通过两种方式支持“共享”功能. 首先,应用可以是提供用户要共享的内容的源应用. 其次,应用可以是用户选择作为共享内容目标的目标应用. 一个应用也可以既是源应用,也是目标应用. 如果你希望你的…
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以及支持扩展体验(包括鼠标滚轮和按钮.笔橡皮擦.筒状按钮.触摸键盘和后台应用服务)的各种模式或修饰符. 具体各种输入的详细处理方法,以后用到的时候再深入. 通用 Windows 平台 (UWP) 应用也支持很多种设备,了解支持的设备将帮助你提供每个外形规格的最佳用户体验. 针对特定设备进行设计时,主要…
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. 中心的内容可以显示在全景视图中,这样用户一眼就能看见新增内容.可用功能和相关信息. 中心通常具有一个页标题,每个内容部分各有一个部分标题. Pivot,透视表控件,用于导航经常访问的不同内容类别. 透视表允许在两个或多个内容窗格之间进行导航,并且依靠文本标题来表明内容的不同部分. SemanticZ…
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象,例如椭圆.矩形.直线.贝塞尔曲线等,Path 是最通用的 Shape,因为使用它可以定义任意几何图形.图形这块,是和wpf一样的. 2.布局控件 布局控件这块,大体上也是和wpf一样的.布局控件包含边框(Border).画布(Canvas).网格(Grid).RelativePanel.Stack…
UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日历日期选取器是一个下拉式控件,该控件已针对从日历视图中选取某个日期进行了优化,尤其是能够显示诸如星期几或丰富的日历信息等上下文信息. 可以修改日历以提供其他上下文或限制可用日期. 日历视图让用户查看可按月份.年份或十年期浏览的日历,并与之交互. 用户可选择单个日期或一组日期. 它没有选取器图面,并且…
UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中进行浏览. 对于鼠标,导航按钮显示在鼠标悬停位置上. 对于键盘,使用箭头键移动浏览该集合. 翻转视图最适合浏览小到中型集合中的图像(最多 25 个项目左右). 此类集合的示例包括产品详细信息页中的项目或相册中的照片. 虽然微软不建议将翻转视图用于大多数大型集合,但是该控件通用于查看相册中的个别图像.…
UWP学习记录6-设计和UI之控件和模式3 1.按钮 按钮,响应用户输入和引发 Click 事件的控件. 使用<Button>就能创建一个按钮控件了.按钮是 ContentControl,它的 XAML 内容属性为 Content.可以将任何对象设置为按钮的内容. 如果内容是一个 UIElement,则会在按钮中呈现它. 如果该内容是另一种类型的对象,则会在按钮中显示其字符串表示形式. RepeatButton 是一个从按下到释放为止重复引发 Click 事件的按钮. 设置 Delay 属性来…
UWP学习记录5-设计和UI之控件和模式2 1.应用栏和命令栏 CommandBar 控件是一款通用.灵活.轻型的控件,可显示复杂内容(如图像或文本块)以及简单的命令(如 AppBarButton.AppBarToggleButton 和 AppBarSeparator 控件).XAML 提供 AppBar 控件和 CommandBar 控件.对于 Windows 10 中的新应用,微软建议改用 CommandBar 控件. 命令栏分为 4 个主要区域: “查看更多”[•••] 按钮显示在该栏的…
UWP学习记录4-设计和UI之控件和模式1 1.控件和事件简介 在 UWP 应用开发中,控件是一种显示内容或支持交互的 UI 元素. 控件是用户界面的构建基块. 我们提供了超过 45 种控件供你使用,范围从简单按钮到网格视图之类的功能强大的数据控件. 模式是合并多个控件来创造新内容的一种方式. 应用添加控件实现UI,主要是三个步骤: A.将控件添加到你的应用 UI. B.设置控件的属性,如宽度.高度或前景色. C.将代码添加到控件的事件处理程序,从而使其执行一些任务. 添加应用一般通过: A.1…
UWP学习记录3-设计和UI之样式 1.颜色 在系统的“设置”>“个性化”>“颜色”里,提供了主题色选择.选定主题色后,会根据颜色亮度的 HSB 值创建浅色和深色的主题色. 应用可使用阴影变量创建可视化层次结构和提供交互指示.在 XAML 中,主要主题色显示为名为 SystemAccentColor 的主题资源. 这些色调可用作 SystemAccentColorLight3.SystemAccentColorLight2.SystemAccentColorLight1.SystemAccen…
UWP学习记录2-设计和UI之布局 1.导航基础知识 应用里,多个页面会有层次关系或者对等关系.这两种关系,通常在一个复杂应用里都会存在,而关系的选定依据: 对于对等导航,一般用选项卡(tabs)或者导航窗(nav)来作为导航元素实现导航跳转.而对于层次关系,则使用中心(hub)来提供子页面的预览或摘要,或者使用大纲(master-details)来实现导航. 除此之外,返回(后退)和链接也可以用来导航.启用系统后退导航支持的方法是注册 BackRequested 事件的侦听器.标题栏后退按钮的…
UWP学习记录1-开端 1.背景 针对不同基础的人,学习的路线自然是不同的.这篇文章记录的是我个人的学习路线,或者说笔记.我对自己的技术状态的定义是: A.有很好的windows平台编程基础: B.有一定的android开发经验: C.有一定的c#和wpf/silverlight开发经验. 如果正在看文章的人状态与我不符,你可能需要: A.学习vs的使用,看windows程序设计.windows核心编程等书(数据结构都不熟的就直接别看了): B.对移动app做一些了解,或者是移动app重度使用者…
1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class Car { private String brand; private double price; public Car(){ } public Car(String brand,double price){ this.brand=brand; this.price=price; } public S…
SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用SpEL也可以,但意义不大,如: 整数:<property name="count" value="#{5}"> 小数:<property name="frequency" value="#{89.5}"> 字…
前言 由于要学习React Native ,所以得用到ES6,故为运用React Native做一个铺垫 学习记录 一.变量 1.let let 与 var 作用相同,用于定义变量,但是作用域不同.不在指定的{}中定义,值就获取不到(undefined). let不存在变量提升 不受全局变量影响 存在“暂时性死区”,从定义的地方开始,才可以用.声明前的地方都是死区,报错ReferenceError 2.const 定义常量 初始化时就必须赋值 二.变量的解构赋值 1.数组的解构赋值 eg. le…