- 1 数据库概述
- 1.1 DBMS 简史
- 1.2 数据库理论
- 1.3 事务 Transaction
- 1.4 SQL
- 1.5 数据库接口
- 本章参考
- 2 Relational 关系数据库
- 2.1 关系理论
- 2.2 Oracle
- 2.5 Microsoft SQL Server
- 2.6 DB2
- RDBS 比较
- 本章参考
- 3 NoSQL 非关系数据库
- 3.1 NoSQL 分类
- 3.2 键值 key-value 数据库
- 3.3 列存储数据库
- 3.4 图形数据库
- 本章参考
- 4 NewSQL
- 4.1 NewSQL 分类
- 4.2 分布式数据库 Distributed
- 本章参考
- 5 时序数据库 TSDB
- 5.1 简介
- 5.2 时序数据库比较
- 本章参考
- 6 SQL 引擎
- 6.1 SQL 引擎分类
- 6.2 SQL On Hadoop
- 本章参考
- 7 其它数据库
- 7.1 内存数据库 In-memory
- 7.2 嵌入式数据库 Embed
- 7.3 搜索引擎
- 本章参考
- 8 各种数据库分析比较
- 8.1 数据库排行 db-engines
- 8.2 数据库技术选型
- 8.3 DB 性能比较
- 8.4 国产数据库产品列表
- 8.5 DB 常用 SQL 比较
- 本章参考
- 9 SQL 调优
- 9.1 SQL JOIN
- 9.2 SQL 执行流程
- 10 数据库大型应用实例
- 10.1 负载均衡技术
- 10.2 数据库的高可用 HA
- 10.3 数据库的读写分离
- 10.4 数据库拆分(分布式)
- 10.5 跨库查询
- 本章参考
- 参考资料
- 附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.2 键值 key-value 数据库
采用 key-value 形式的存储,可以极大的增强系统的可扩展性(scalability)。
key-value 与 relational 数据库的区别
key-value store
- Dynamo (Amazon)
- Cassandra (Facebook)
- Voldemort (Linkedln)
- PNUTS (Yahoo)
- Bigtable (Google)
- HyperTable
注:粗体的为开源产品。
表格 20 KV 数据库比较表
项目名称 | 语言 | 容错性 | 持久性存储介质 | 客户端协议 | 数据模型 | 文档 | 赞助商/社区 |
---|---|---|---|---|---|---|---|
Project Voldemort | Java | 分区,复制, read-repair | Pluggable: BerkleyDB, Mysql | Java API | Structured / blob / text | A | Linkedin, no |
Ringo | Erlang | 分区,复制, immutable | Custom on-disk (append only log) | HTTP | blob | B | 诺基亚, no |
Scalaris | Erlang | 分区,复制, paxos | In-memory only | Erlang, Java, HTTP | blob | B | OnScale, no |
Kai | Erlang | 分区,复制 | On-disk Dets file | Memcached | blob | B | no |
Dynomite | Erlang | 分区,复制 | Pluggable: couch, dets | Custom ascii, Thrift | blob | C | Powerset, no |
MemcacheDB | C | 复制 | BerkleyDB | Memcached | blob | B | 新浪网, some |
ThruDB | C++ | 复制 | Pluggable: BerkleyDB, Custom, Mysql, S3 | Thrift | Document oriented | C+ | Third rail, unsure |
CouchDB | Erlang | 分区 | Custom on-disk | HTTP, json | Document oriented (json) | A | Apache, yes |
Cassandra | Java | 分区 | Custom on-disk | Thrift | Bigtable meets Dynamo | F | Facebook, no |
HBase | Java | 分区 | Custom on-disk | Custom API, Thrift, Rest | Bigtable | A | Apache, yes |
Hypertable | C++ | 分区 | Custom on-disk (HDFS, KFS) | Thrift, other | Bigtable | A | Zvents, 百度, yes |
Tokyo Tyrant | C | 复制 | Tokyo Cabinet | Memcached, HTTP, other | blob | A | mixi.jp , no |
Redis | C | 分区、复制 | 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论