2013-08-20

SSDB 配置文件

Views: 25021 | 18 Comments

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

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

# ssdb-server config

# relative to path of this file, must exist
work_dir = ./var
pidfile = ./var/ssdb.pid

server:
	ip: 127.0.0.1
	port: 8888

replication:
	slaveof:
		# sync|mirror, default is sync
		#type: sync
		#ip: 127.0.0.1
		#port: 8889

logger:
	level: info
	output: log.txt
	rotate:
		size: 1000000000

leveldb:
	# in MB
	cache_size: 500
	# in KB
	block_size: 32
	# in MB
	write_buffer_size: 64
	# in MB
	compaction_speed: 100
	# yes|no
	compression: 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 参数, 用于指定缓存大小. 适当的缓存可以提高读性能, 但是过大的缓存会影响写性能.

Related posts:

  1. SSDB 的双主和多主配置
  2. SSDB源码分析 – 主从和多主同步原理解析
  3. 如何解读 SSDB 的 log
  4. 在PHP代码中使用LevelDB
  5. 将LevelDB数据导入SSDB
Posted by ideawu at 2013-08-20 16:18:18

18 Responses to "SSDB 配置文件"

  • windows 没有 ssdb-cli吗? Reply
    @wangchun: 请务必要看文档, 比提问对你自己更好, 谢谢! http://ssdb.io/docs/zh_cn/ssdb-cli.html Reply
  • 一台机器上能配置多个实例吗? Reply
    @D瓜哥: 可以, 没问题. Reply
    @ideawu: 您好,请教一下,我在服务器上启动了两个实例,其中一个实例的数据存储目录(data目录)指定在固态硬盘上,另一个放在机械硬盘上,通过对两个实例的读写性能测试,发现两个实例的性能测试结果相差不大,我这样测试可以否?还是有其他配置需要作修改,本人初学,求指教。 Reply
  • 楼主你好,问一下有关write_buffer_size的设置,你在另外一个地方写SSDB所用内存的最大大小为cache_size + write_buffer_size * 66 + 32,我的理解是cache_size指的是leveldb的block cache,write_buffer_size指memtable的大小,但这个数量66是不是因为level0的sst文件最大数量为64,所以最多只能有65个immutable memtable?还有后面的32M指的是什么占用的空间了? Reply
  • 您好,我想问一下:我这边java写一个测试的客户端,使用了连接池SocketSSDBStreamPool,但可是并发一上来或者请求频率高了,就会报org.nutz.ssdb4j.spi.SSDBException: java.net.SocketException: Socket closed 什么原因?是ssdb配置文件的问题吗? Reply
    @jubeys: 默认的配置没问题. 你找下你的代码问题, 以及使用的操作系统的问题. 不要在桌面版的 Windows 上做这些东西! 另外, 你应该学习下如何更好地提问: 尽可能提供详细的必要的信息, 不要假设别人能操作你的电脑帮你查问题. 记住后一点! 你所提问的对象, 不在你的身边! Reply
  • sync和mirror是什么区别? Reply
    @fancyrabbit: sync 是主从结构, mirror 是双(多)主结构. Reply
    thanks very much~~ Reply
  • 楼主,您好,有两个问题想请教下:
    1,ssdb在读的时候,顺序是怎样的,我看到leveldb的原理说的是先在writer_buffer中去查找是否有对应的key。还是说先在cache中读取呢,没有的话在到文件中读取?
    2,想问这个读cache大概设置在多大是一个比较好的阀值?为什么你说过大的缓存会影响写性能呢? Reply
    @lb: Hi, ssdb的读取逻辑和leveldb是一样的, 也是先看cache, 找不到再读取硬盘. cache一般设置为1G比较合适. leveldb的cache是block_cache, 失效时整个块失效, 如果写比较频繁且分散, 会导致cache几乎用不上. Reply
    @ideawu: Hi, 假设内存为32GB的服务器单独用来跑SSDB,且该服务器用于数据缓存服务(主要是读操作),
    1)cache设置为1GB是否合适,还是可以设置的更大些?
    2)既然主要是用作数据缓存服务,我希望尽可能地提升读操作的性能,应该怎么调整SSDB的参数?

    谢谢 Reply
    @zw: 对于你的情况, 使用默认的配置文件, 然后将 cache_size 设置为 8000. Reply
    @ideawu:
    楼主,请求写分散是什么概念呢?leveldb的key值排序是按照什么排的? Reply
    @Afred: leveldb 的 key 是按字节顺序来排序的. Reply
    @ideawu:

    再请问一下,write_buffer_size和compaction_speed能解释一下吗? Reply

Leave a Comment