Leveldb--Slice

http://www.kuqin.com/database/20110919/265041.html

Slice非常简单的数据结构,它包括length和一个指向外部字节数组的指针。
为什么使用Slice,而不直接使用string呢??

  1. 相比返回string,返回Slice的开销会小的多(没有拷贝,Slice中没有实际数据,只有指向数据的指针,开销低)。
  2. leveldb允许key和value包含‘\0‘,不能返回以null结尾的c风格字符串。

C++ string和以null结尾的C风格字符串可以很方便的转换成Slice:

Leveldb--Slice

时间: 2024-10-10 04:54:16

Leveldb--Slice的相关文章

tair源码分析——leveldb存储引擎使用

分析完leveldb以后,接下来的时间准备队tair的源码进行阅读和分析.我们刚刚分析完了leveldb而在tair中leveldb是其几大存储引擎之一,所以我们这里首先从tair对leveldb的使用和修改来窥探在这个分布式的存储引擎中是如何将area和bucket持久化到存储,并且方便bucket和area的处理的. 我们首先来看tair中key的结构,我们以大致梳理存储和查询一个KV的流程来确认key的处理.tair_client_api::put直接调用tair_client_impl:

Tair LDB基于Prefixkey的范围查找性能优化项目之如何提取key的prefix_size信息

New Document/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */ /* Author: Nicolas Hery - http://nicolashery.com */ /* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */ /* Source: https://github.com/nicolahery/markdownpad-github */ /*

Tair LDB基于Prefixkey的范围查找性能优化项目之后续问题解决记录

项目是按照"Tair LDB基于Prefixkey的范围查找性能优化项目提议方案"的步骤一步步完成的,目前方案中提出的三个重点问题已经全部解决,如下所示: 如何获取key的prefix_size问题:Tair LDB基于Prefixkey的范围查找性能优化项目之如何提取key的prefix_size 如何建立prefix bloomfilter:Tair LDB基于Prefixkey的范围查找性能优化项目之如何建立prefix bloomfilter 如何在get_range过程中使用

LevelDB Cache实现机制分析

几天前淘宝量子恒道在博客上分析了HBase的Cache机制,本篇文章,结合LevelDB 1.7.0版本的源码,分析下LevelDB的Cache机制. 概述 LevelDB是Google开源的持久化KV单机存储引擎,据称是HBase的鼻祖Bigtable的重要组件tablet的开源实现.针对存储面对的普遍随机IO问题,LevelDB采用merge-dump的方式,将逻辑场景的随机写请求转换成顺序写log和写memtable的操作,由后台线程根据策略将memtable持久化成分层的sstable.

实现键值对存储(三):Kyoto Cabinet 和LevelDB的架构比较分析

译自  Emmanuel Goossaert (CodeCapsule.com) 在本文中,我将会逐组件地把Kyoto Cabinet 和 LevelDB的架构过一遍.目标和本系列第二部分讲的差不多,通过分析现有键值对存储的架构来思考我应该如何建立我自己键值对存储的架构.本文将包括: 1. 本架构分析的意图和方法 2. 键值对存储组件概览 3. Kyoto Cabinet 和LevelDB在结构和概念上的分析 3.1 用Doxygen建立代码地图 3.2 整体架构 3.3 接口 3.4 参数化

leveldb 源码阅读,细节记录memberTable

leveldb 是看着前辈们的大概分析,然后看着源码,将自己的疑惑和解决记录下来: Leveldb源码分析 从memberTable插入一条记录和查找一条记录从上而下分析 插入: 插入的函数 void MemTable::Add(SequenceNumber s, ValueType type,const Slice& key,const Slice& value) 参数: SequenceNumber    插入的序号,在skiplist里,这个序号是降序列的 ValueType typ

LevelDB源码之四LOG文件

“LOG文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据.因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中的数据没有来得及Dump到磁盘的SSTable文件,LevelDB也可以根据log文件恢复内存的Memtable数据结构内容,不会造成系统丢失数据,在这点上LevelDb和Bigtable是一致的.” (http://www.cnblogs.com/haippy/archive/2011/12/04/2276064

leveldb源码笔记

最近读了一下leveldb源码,leveldb最主要的操作就是get/set,因此从get/set的实现入手,了解一下实现机制. 之前也看过leveldb相关介绍以及别人的分析blog,已经有了一定了解.leveldb如其名,按照层级来组织数据,数据从内存到磁盘一层一层迁移.在内存中是通过skiplist来管理数据,而磁盘上则是一种名为SSTable(Sorted Strings Table)的结构来存储数据的. DB::Get实现 这个头文件include/leveldb/db.h定义了DB抽

levelDB Log

分析完KV在内存中的存储,接下来就是操作日志.所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable.这样做有两个有点:1可以将随机的写IO变成append,极大的提高写磁盘速度:2防止在节点down机导致内存数据丢失,造成数据丢失,这对系统来说是个灾难. 在各种高效的存储系统中,这已经是口水技术了. 5.1 格式 在源码下的文档doc/log_format.txt中,作者详细描述了log格式: The log file contents are a sequence

levelDB SSTable-1

创建sstable文件 了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了.相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中. 6.4.1 TableBuilder类 构建sstable文件的类是TableBuilder,该类提供了几个有限的方法可以用来添加k/v对,Flush到文件中等等,它依赖于BlockBuilder来构建Block. TableBuilder的几个接口