阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SSDB基础说明及使用

114次阅读
没有评论

共计 6994 个字符,预计需要花费 18 分钟才能阅读完成。

当时需要使用 SSDB 的原因有几个,首先是对于 contest 模块设计的时候,由于点击查询当前比赛的 Rank 的时候,需要多次查询,而每次查询的数据量比较大,为了能够高效的获取数据而使用 SSDB 数据库;第二方面是对于用户 AC 状态的记录,在用户登录进之后,网页需要显示用户 AC 了哪些题目,哪些题目尝试了但没有通过。为了必须遍历当前系统存储的所有的 submit,这样的话数据量也是很大,依照前面的原则,继续采用 SSDB 解决。

1:那 SSDB 到底是什么呢?

百度了一下,没有找到百度百科,找到的一个定义是 SSDB 是一个开源的高性能数据库服务器, 使用 Google LevelDB 作为存储引擎, 支持 T 级别的数据。从字面意思来讲,就是这个数据库有很高的性能((/ □ \))。然后的话,我们需要用到的就是查询速度高的特点。

2:SSDB 的主要特点(条目性的统计((/ □ \)),我们主要用到的模式就是 k - v 模式,即键值 - 值):

支持 zset, map/hash, list, kv 数据结构, 可替代 Redis

特别适合存储大量集合数据, 支持丰富的数据结构: key-value, key-map, key-zset, key-list.

使用 Google LevelDB 作为存储引擎

支持主从同步, 多主同步

客户端支持 PHP, C++, Python, Lua, Java, Ruby, nodejs, Go 等

内存占用极少

3:安装及启动停止

SSDB 的建议安装⽅方式是源码编译安装, 建议运⾏行环境是主流 Linux 发⾏行版. 远程 SSH 登录你的服务器, 然后⽤用下⾯面的命令下载, 编译, 安装和运⾏行:

# 安装

$ sudo wget –no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip

$ sudo unzip master

$ cd ssdb-master

$ sudo make

$ #optional, install ssdb in /usr/local/ssdb

$ sudo make install

# 启动

$ sudo ./ssdb-server ssdb.conf

# 启动作为守护进程

$ sudo ./ssdb-server -d ssdb.conf

# 停止

$ sudo kill `cat ./var/ssdb.pid`

SSDB 默认安装在 /usr/local/ssdb ⽬目录下. ssdb-server 是服务器的程序, ssdb-cli 是命令⾏行客户端.

SSDB 基础说明及使用 

4:配置

SSDB  附带的 ssdb.conf 是配置文件,一般不用修改便可以使用.。标准配置文件如下:

# ssdb-server config
# MUST indent by TAB!

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

server:
        ip: 127.0.0.1
        port: 8888
        # bind to public ip
        #ip: 0.0.0.0
        # format: allow|deny: all|ip_prefix
        # multiple allows or denys is supported
        #deny: all
        #allow: 127.0.0.1
        #allow: 192.168

replication:
        slaveof:
                # to identify a master even if it moved(ip, port changed)
                # if set to empty or not defined, ip:port will be used.
                #id: svc_2
                # 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: 1000
        # yes|no
        compression: no

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 参数, 用于指定缓存大小. 适当的缓存可以提高读性能, 但是过大的缓存会影响写性能.

在使⽤用⾃自带的 ssdb.conf 配置⽂文件时, SSDB ⽣生成的⽇日志⽂文件按体积进⾏行分割, 仅此⽽而已. 所以, 你需要编写⾃自⼰己的 crontab 进⾏行⽇日志压缩和定期清理.
如果出现服务器掉电, kernel panic 等系统故障, 在系统重新启动之后, 你需要⼿手动删除 ssdb 的 PID ⽂文件 ssdb.pid, 然后才能启动。

Redis 安装及 Ubuntu 14.04 下搭建 ssdb 主从环境 http://www.linuxidc.com/Linux/2014-05/101598.htm

开源的比特币交易记录项目 Btcplex 采用 SSDB 数据库 http://www.linuxidc.com/Linux/2014-03/97787.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-12/110488p2.htm

5 使用流程:

安装完成之后,在 ssdb 目录下执行 sudo ./ssdb-server -d ssdb.conf 启动 SSDB 即可,这时,数据库已经在运行。

当需要存储数据时:

首先:整理需要存储的信息,比如 (contestID , rank_list_proto_str) 其中前者为键,后者为值。

再者:决定操作,目前我们主要涉及的操作就是对于数据的存储和查询,即 insert 和 get 操作:

在插入数据时,使用的模式是 ssdb.set(key,value),如果 key 是一个组合的话,那么中间用 ’\t’ 相连,例如 ssdb.set(userID + ‘\t’ + problemID, value)。

查询的时候,主要模式是一样的,即使用 ssdb.get(key)就可以得到对应的 value 了。如果没有对应的值,则返回空字符串。

插入:

 ssdb_api.SetContestRankListProto(contestID, contest_rank_list.SerializeToString())

ssdb_api.InsertUserProblemStatus(user.userID, submit.problemID, submit.status)

查询:

contest_rank_list = ssdb_api.GetContestRankListProto(contest_id)

status_ = ssdb_api.GetUserProblem(user.userID, problem.problemID)

上述的操作都是已经写好了操作函数,即 view/ssdb_api.py 中的函数

from ssdb import SSDB
import sys
import cugbacm.proto.rank_pb2
 
ssdb_ip = “127.0.0.1”
ssdb_port = 6666
ssdb = SSDB(host=ssdb_ip, port=ssdb_port)
 
 def GetContestRankListProto(contestID):
  global ssdb
  proto_str = ssdb.get(contestID)
  return proto_str
 
 def SetContestRankListProto(contestID, rank_list_proto_str):
  global ssdb
  try:
    ssdb.set(contestID, rank_list_proto_str)
  except:
    pass
 def InsertUserProblemStatus(userID, problemID, status):
  #AC == 1  No_pass = 2 other = 0
  global ssdb
  value = 2
  if status == “Accepted”:
    value = 1
  st = str(ssdb.get(userID + ‘\t’ + str(problemID)))
  if st == “1”:
    return;
  else:
    ssdb.set(userID + ‘\t’ + str(problemID), value)

def GetUserProblem(userID, problemID):
  global ssdb
  st = ssdb.get(userID + ‘\t’ + str(problemID))
  if str(st) != “1” and str(st) != “2”:
    return “0”
  else:
    return str(st)

其中,设置这个.py 之后,需要在使用 SSDB 的文件里面引入这个文件,主机 localhost。

其余的后续补充吧(/ □ \)

当时需要使用 SSDB 的原因有几个,首先是对于 contest 模块设计的时候,由于点击查询当前比赛的 Rank 的时候,需要多次查询,而每次查询的数据量比较大,为了能够高效的获取数据而使用 SSDB 数据库;第二方面是对于用户 AC 状态的记录,在用户登录进之后,网页需要显示用户 AC 了哪些题目,哪些题目尝试了但没有通过。为了必须遍历当前系统存储的所有的 submit,这样的话数据量也是很大,依照前面的原则,继续采用 SSDB 解决。

1:那 SSDB 到底是什么呢?

百度了一下,没有找到百度百科,找到的一个定义是 SSDB 是一个开源的高性能数据库服务器, 使用 Google LevelDB 作为存储引擎, 支持 T 级别的数据。从字面意思来讲,就是这个数据库有很高的性能((/ □ \))。然后的话,我们需要用到的就是查询速度高的特点。

2:SSDB 的主要特点(条目性的统计((/ □ \)),我们主要用到的模式就是 k - v 模式,即键值 - 值):

支持 zset, map/hash, list, kv 数据结构, 可替代 Redis

特别适合存储大量集合数据, 支持丰富的数据结构: key-value, key-map, key-zset, key-list.

使用 Google LevelDB 作为存储引擎

支持主从同步, 多主同步

客户端支持 PHP, C++, Python, Lua, Java, Ruby, nodejs, Go 等

内存占用极少

3:安装及启动停止

SSDB 的建议安装⽅方式是源码编译安装, 建议运⾏行环境是主流 Linux 发⾏行版. 远程 SSH 登录你的服务器, 然后⽤用下⾯面的命令下载, 编译, 安装和运⾏行:

# 安装

$ sudo wget –no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip

$ sudo unzip master

$ cd ssdb-master

$ sudo make

$ #optional, install ssdb in /usr/local/ssdb

$ sudo make install

# 启动

$ sudo ./ssdb-server ssdb.conf

# 启动作为守护进程

$ sudo ./ssdb-server -d ssdb.conf

# 停止

$ sudo kill `cat ./var/ssdb.pid`

SSDB 默认安装在 /usr/local/ssdb ⽬目录下. ssdb-server 是服务器的程序, ssdb-cli 是命令⾏行客户端.

SSDB 基础说明及使用 

4:配置

SSDB  附带的 ssdb.conf 是配置文件,一般不用修改便可以使用.。标准配置文件如下:

# ssdb-server config
# MUST indent by TAB!

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

server:
        ip: 127.0.0.1
        port: 8888
        # bind to public ip
        #ip: 0.0.0.0
        # format: allow|deny: all|ip_prefix
        # multiple allows or denys is supported
        #deny: all
        #allow: 127.0.0.1
        #allow: 192.168

replication:
        slaveof:
                # to identify a master even if it moved(ip, port changed)
                # if set to empty or not defined, ip:port will be used.
                #id: svc_2
                # 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: 1000
        # yes|no
        compression: no

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 参数, 用于指定缓存大小. 适当的缓存可以提高读性能, 但是过大的缓存会影响写性能.

在使⽤用⾃自带的 ssdb.conf 配置⽂文件时, SSDB ⽣生成的⽇日志⽂文件按体积进⾏行分割, 仅此⽽而已. 所以, 你需要编写⾃自⼰己的 crontab 进⾏行⽇日志压缩和定期清理.
如果出现服务器掉电, kernel panic 等系统故障, 在系统重新启动之后, 你需要⼿手动删除 ssdb 的 PID ⽂文件 ssdb.pid, 然后才能启动。

Redis 安装及 Ubuntu 14.04 下搭建 ssdb 主从环境 http://www.linuxidc.com/Linux/2014-05/101598.htm

开源的比特币交易记录项目 Btcplex 采用 SSDB 数据库 http://www.linuxidc.com/Linux/2014-03/97787.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-12/110488p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计6994字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中