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

SSDB基础说明及使用

410次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7960741
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...