SSDB 配置文件详解

SSDB 的配置非常简单, 附带的 ssdb.conf 你不用修改便可以使用. 如果你要高度定制, 还是需要修改一些配置的. 下面做介绍.

SSDB 的配置文件是一种层级 key-value 的静态配置文件, 通过一个 TAB 缩进来表示层级关系. 以 '#' 号开始的行是注释. 标准的配置文件如下:

# ssdb-server config# relative to path of this file, must exist
work_dir = ./var
pidfile = ./var/ssdb.pidserver:ip: 127.0.0.1port: 8888replication:slaveof:# sync|mirror, default is sync#type: sync#ip: 127.0.0.1#port: 8889logger:level: infooutput: log.txtrotate:size: 1000000000leveldb:# in MBcache_size: 500# in KBblock_size: 32# in MBwrite_buffer_size: 64# in MBcompaction_speed: 100# yes|nocompression: yes

work_dir: ssdb-server 的工作目录, 启动后, 会在这个目录下生成 data 和 meta 两个目录, 用来保存 LevelDB 的数据库文件. 这个目录是相对于 ssdb.conf 的相对路径, 也可以指定绝对路径.

server: ip 和 port 指定了服务器要监听的 IP 和端口号. 如果 ip 是 0.0.0.0, 则表示绑定所有的 IP. 基于安全考虑, 可以将 ip 设置为 127.0.0.1, 这样, 只有本机可以访问了. 如果要做更严格的更多的网络安全限制, 就需要依赖操作系统的 iptables.

replication: 用于指定主从同步复制. slaveof.ip, slaveof.port 表示, 本台 SSDB 服务器将从这个目标机上同步数据(也即这个配置文件对应的服务器是 slave). 你可以参考 ssdb_slave.conf 的配制.

logger: 配置日志记录. level 是日志的级别, 可以是 trace|debug|info|error. output 是日志文件的名字, SSDB 支持日志轮转, 在日志文件达到一定大小后, 将 log.txt 改名, 然后创建一个新的 log.txt.

leveldb: 配置 LevelDB 的参数. 你一般想要修改的是 cache_size 参数, 用于指定缓存大小. 适当的缓存可以提高读性能, 但是过大的缓存会影响写性能.

另外注意cache_size、和write_buffer_size的配置的阈值以及占用内存的计算:

一个 ssdb-server 实例占用的内存瞬时(有可能, 而且即使达到, 也只是持续短时间)最高达到(MB):

cache_size + write_buffer_size * 66 + 32

这是对于压缩选项没有开启的情况, 如果 compression: yes, 计算公式是:

cache_size + 10 * write_buffer_size * 66 + 32

你可以调整配置参数, 限制 ssdb-server 的内存占用.

LevelDB:

Log文件
  当应用写入一条Key:Value记录的时候,LevelDb会先往log文件里写入,成功后将记录插进Memtable中,这样基本就算完成了写入操作,Log文件在系统中的作用主要是用于系统崩溃恢复而不丢失数据,假如没有Log文件,因为写入的记录刚开始是保存在内存中的,此时如果系统崩溃,内存中的数据还没有来得及Dump到磁盘,所以会丢失数据(Redis就存在这个问题)。 
  因为一次写入操作只涉及一次磁盘顺序写和一次内存写入,所以这是为何说LevelDb写入速度极快的主要原因。 
  LevelDB首先将每条写入数据序列化为一个Record,单个Log文件中包含多个Record。同时,Log文件又划分为固定大小的Block单位,并保证Block的开始位置一定是一个新的Record。这种安排使得发生数据错误时,最多只需丢弃一个Block大小的内容。显而易见地,不同的Record可能共存于一个Block,同时,一个Record也可能横跨几个Block。 
Log文件划分为固定长度的Block,由连续的32K为单位的物理Block构成的,每次读取的单位是以一个Block作为基本单位;每个Block中包含多个Record;Record的前56个位为Record头,包括32位checksum用做校验,16位存储Record实际内容数据的长度,8位的Type可以是Full、First、Middle或Last中的一种,表示该Record是否完整的在当前的Block中,如果Type不是Full,则通过Type指明其前后的Block中是否有当前Record的前驱后继。 
levelDb中的Cache
  读取操作如果没有在内存的memtable中找到记录,要多次进行磁盘访问操作。假设最优情况,即第一次就在level 0中最新的文件中找到了这个key,那么也需要读取2次磁盘,一次是将SSTable的文件中的index部分读入内存,这样根据这个index可以确定key是在哪个block中存储;第二次是读入这个block的内容,然后在内存中查找key对应的value。 
  levelDb中引入了两个不同的Cache: Table Cache 和 Block Cache。其中Block Cache是配置可选的,即在配置文件中指定是否打开这个功能。
compression压缩操作
  为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压缩,通过这种方式,来删除掉一些不再有效的KV数据,减小数据规模,减少文件数量等。 
  数据压缩是LevelDB中重要的部分,即上文提到的归并。冷数据会随着Compaction不断的下移,同时过期的数据也会在合并过程中被删除。 
  LevelDB的压缩操作由单独的后台线程负责。这里的Compaction包括两个部分,Memtable向Level 0 SST文件的Compaction,以及SST文件向下层的Compaction。 
  levelDb的compaction机制和过程与Bigtable所讲述的是基本一致的,Bigtable中讲到三种类型的compaction: minor ,major和full。所谓minor Compaction,就是把memtable中的数据导出到SSTable文件中;major compaction就是合并不同层级的SSTable文件,而full compaction就是将所有SSTable进行合并。 
  LevelDb包含其中两种,minor和major。
 

转载:http://www.ideawu.net/blog/archives/733.html

转载:https://www.cnblogs.com/chenny7/p/4569837.html

levelDB原理:https://blog.csdn.net/qq_26499321/article/details/78063856#commentBox

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Maps MultiMaps

C Maps & MultiMapsC Maps & MultiMaps C Maps是一种关联式容器,包含“关键字/值”对。C Multimaps和maps很相似,但是MultiMaps允许重复的元素。1.begin() 返回指向map头部的迭代器2.clear() 删除所有元素3.count() 返回指定元素出现的次数语法…

英语单词词干化表

博客:https://blog.csdn.net/potato012345/article/details/78091939 下载地址:https://github.com/Zhangtd/MorTransformation

c++ List(双向链表)

c List(双向链表)List(双向链表)介绍: List是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩&#x…

Arrays.deepToString的使用

今天看别人的代码引用了这个函数,发现原来遍历数组(非List,例如:int [][] 类型等)可以直接调用Arrays.deepToString(数组名)可以直接输出结果,以前还傻不啦叽的的转换成List数组或者是for循环遍历。 Integer[][] allMovieComment…

C++ Vector(向量容器)

Vector介绍C Vector(向量容器) 是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。 在创建一个vector 后,它…

出现特殊分隔符无法分隔解决方案

今天处理文本数据时候遇到这种文本用空格和tab正则匹配没有作用,后来问了同事发现可以用“\\uf8f5”去匹配。 待处理文本: A abbr.安  A-10IInone.美空军主力近距离空中支援攻击机,无愧为“坦克杀手”。 A-12none.夭折的美海…

java英文单词单复数转换

package steam;import java.util.*; import java.util.regex.*; /*** * 单复数转换类* 2018年12月30日*/public class Inflector {private static final Pattern UNDERSCORE_PATTERN_1 Pattern.compile("([A-Z])([A-Z][a-z])");private static final Pattern UNDERS…

最全英语单词下载地址

这两天搜集英文单词做词干化处理,虽说standford-NLP可以处理,但是效率不高,自己动手找单词做映射表,找单词真的痛苦!!!放出以下地址最为保存和分享 github: https://github.com/dw…

NLP英文缩写词性含义

1. CC Coordinating conjunction 连接词 2. CD Cardinal number 基数词 3. DT Determiner 限定词(如this,that,these,those,such,不定限定词:no,some,any,each,every,enough,either,neither,all,both,half,sever…

redis通过expire设置存活期注意问题

今天老大检查之前所做的项目发现项目过期数据仍然残留并没有删除,本以为自己设置了存活期就不用管数据了会自动删除掉,啊,果然自己太马虎了,如果是传统的kv类型,通过expire(key,alive_time)没有错误&#x…

次幂函数取模算法

次幂函数取模算法 高次幂函数取模算法 在平常的工作学习中,我们经常需要用到求取一个数字或者幂运算的余数,尤其在密码学中最为常用的RSA算法就经常要用到这种运算,我们称之为高次幂函数的取模运算。 在本篇文章中,将会首先介绍运…

【转载保存】接口压力测试安装与使用

https://blog.csdn.net/qq_26525215/article/details/79182674

mysql日期格式转换

select * from news where DATE_FORMAT(news_time, %Y-%m-%d %k:%i:%s) < " "" curDate "

java单例模式双重检查

public class Singleton {private static volatile Singleton singleton;private Singleton() {}public static Singleton getInstance() {if (singleton null) {synchronized (Singleton.class) {if (singleton null) {singleton new Singleton();}}}return singleton;} }

mysql 常用操作

mysql 常用操作&#xff08;整理&#xff09; 标签&#xff1a; MYSQL常用操作 2013-07-22 16:37 10846人阅读 评论(0) 收藏 举报 本文章已收录于&#xff1a; 分类&#xff1a; MYSQL 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 目录(?)[]…

协同过滤算法UserCF和ItemCF优缺点对比

UserCF&#xff1a; 性能&#xff1a;适用于用户较少的场合&#xff0c;如果用户很多&#xff0c;计算用户相似度矩阵代价很大。领域&#xff1a;时效性较强&#xff0c;用户个性化兴趣不太明显的领域。实时性&#xff1a;用户有新行为&#xff0c;不一定造成推荐结果的立即变…

deque

STL之deque容器详解Deque 容器 deque容器是C标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似&#xff0c;支持随机访问和快速插入删除&#xff0c;它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是&#xff0c;deque还支持从…

【转载保存】MySQL时间、字符串、时间戳互相转换

时间转字符串 select date_format(now(), ‘%Y-%m-%d %H:%i:%s’); 结果&#xff1a;2018-05-02 20:24:10 时间转时间戳 select unix_timestamp(now()); 结果&#xff1a;1525263383 字符串转时间 select str_to_date(‘2018-05-02’, ‘%Y-%m-%d %H’); 结果&#xff1a;20…

RMQ算法,求区间最值

poj 3264 Balanced Lineup 2016-07-27 11:15 49人阅读 评论(0) 收藏 举报分类&#xff1a;RMQ(Range MinimumMaximum Quer)&#xff08;4&#xff09; Balanced LineupTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 45854 Accepted: 21536Case Time Limit: 2000M…

【转载】向量空间模型VSM及余弦计算

向量空间模型VSM及余弦计算 向量空间模型的基本思想是把文档简化为以特征项&#xff08;关键词&#xff09;的权重为分量的N维向量表示。 这个模型假设词与词间不相关&#xff08;这个前提造成这个模型无法进行语义相关的判断&#xff0c;向量空间模型的缺点在于关键词之间的…