返回介绍

3.2 键值 key-value 数据库

发布于 2024-09-26 01:07:09 字数 6119 浏览 0 评论 0 收藏 0

采用 key-value 形式的存储,可以极大的增强系统的可扩展性(scalability)。

key-value 与 relational 数据库的区别

image-20191201160344076

key-value store

  • Dynamo (Amazon)
  • Cassandra (Facebook)
  • Voldemort (Linkedln)
  • PNUTS (Yahoo)
  • Bigtable (Google)
  • HyperTable

注:粗体的为开源产品。

表格 20 KV 数据库比较表

项目名称语言容错性持久性存储介质客户端协议数据模型文档赞助商/社区
Project VoldemortJava分区,复制, read-repairPluggable: BerkleyDB, MysqlJava APIStructured / blob / textALinkedin, no
RingoErlang分区,复制, immutableCustom on-disk (append only log)HTTPblobB诺基亚, no
ScalarisErlang分区,复制, paxosIn-memory onlyErlang, Java, HTTPblobBOnScale, no
KaiErlang分区,复制On-disk Dets fileMemcachedblobBno
DynomiteErlang分区,复制Pluggable: couch, detsCustom ascii, ThriftblobCPowerset, no
MemcacheDBC复制BerkleyDBMemcachedblobB新浪网, some
ThruDBC++复制Pluggable: BerkleyDB, Custom, Mysql, S3ThriftDocument orientedC+Third rail, unsure
CouchDBErlang分区Custom on-diskHTTP, jsonDocument oriented (json)AApache, yes
CassandraJava分区Custom on-diskThriftBigtable meets DynamoFFacebook, no
HBaseJava分区Custom on-diskCustom API, Thrift, RestBigtableAApache, yes
HypertableC++分区Custom on-disk (HDFS, KFS)Thrift, otherBigtableAZvents, 百度, yes
Tokyo TyrantC复制Tokyo CabinetMemcached, HTTP, otherblobAmixi.jp , no
RedisC分区、复制  Structured /blob VMware, Pivotal

3.2.3 SSDB

SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库,支持 KV, list, map(hash), zset(sorted set),qlist(队列) 等数据结构,用来替代或者与 Redis 配合存储十亿级别列表的数据。

1 安装使用

wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
unzip master
cd ssdb-master
make
# optional, install ssdb in /usr/local/ssdb
sudo make install

# 启动服务
./ssdb-server ssdb.conf
# or start as daemon
./ssdb-server -d ssdb.conf

使用:telnet 或者 nc 命令或者 redis 客户端连接到 SSDB 服务器

2 特性

  • 替代 Redis 数据库, Redis 的 100 倍容量
  • LevelDB 网络支持,使用 C/C++ 开发
  • Redis API 兼容,支持 Redis 客户端
  • 适合存储集合数据,如 list, hash, zset...
  • 客户端 API 支持的语言包括: C++ , PHP , Python, Java , Go
  • 持久化的队列服务
  • 主从复制,负载均衡

3 PHP API

<?php
require_once('SSDB.php');
$ssdb = new SimpleSSDB('127.0.0.1', 8888);
$resp = $ssdb->set('key', '123');
$resp = $ssdb->get('key');
echo $resp; // output: 123
?>

4 SSDB 相关使用限制

  • 最大 Key 长度 200 字节
  • 最大 Value 长度 31MB
  • 最大请求或响应长度 31MB
  • 单个 HASH 中的元素数量 9,223,372,036,854,775,807
  • 单个 ZSET 中的元素数量 9,223,372,036,854,775,80
  • 单个 QUEUE 中的元素数量 9,223,372,036,854,775,807
  • 命令最多参数个数所有参数加起来体积不超过 31MB 大小

3.2.4 Tokyo Cabinet 和 Tokoy Tyrant

TC 和 TT 的开发者是日本人 Mikio Hirabayashi,主要被用在日本最大的 SNS 网站 mixi.jp 上,TC 发展的时间最早,现在已经是一个非常成熟的项目,也是 Kye-Value 数据库领域最大的热点,现在被广泛的应用在很多很多网站上。TC 是一个高性能的存储引擎,而 TT 提供了多线程高并发服务器,性能也非常出色,每秒可以处理 4-5 万次读写操作。

1) 程序运行

TC: libtokyocabinet.so 为存储引擎,无需运行

TT:

$./ttserver

usage:

./ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-kl] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [-rcc] [-skel name] [-mul num] [-ext path] [-extpc name period] [-mask expr] [-unmask expr] [dbname]

说明:根据参数 dbname 名来确定使用的 TC 数据库类型。 数据库名的命名方式被 Tokyo Cabinet 的抽象 API 指定。

  • 如果数据库名为"*",表示内存 hash 数据库。
  • 如果数据库名为"+"表示内存 tree 数据库。
  • 如果数据库名为".tch",则数据库为 hash 数据库。
  • 如果数据库名的后缀为".tcb",数据库将为 B+ tree 数据库。
  • 如果数据库名的后缀为".tcf"。则数据库将为 fixed-length 数据库。
  • 如果数据库名的后缀为".tct",则数据将为一个 table 数据库(有表的概念)。

2) 程序提供服务

read/write/replace

3) 程序可用性测试

$make check

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文