# 数据库 🔎

数据库不是凭空产生的,它们是为了解决实际使用中提出的问题,在RDBMS(关系数据库管理系统)出现的环境中,数据库插叙你的灵活性比灵活的模式更重要

# 数据库概述

本节包含了9种数据库的信息

MongoDB counchDB Riak Redis PostgreSQL Neo4J HBase Mysql Clickhouse
类型 文档 文档 键-值 键-值 关系 图 列 关系 列
数据类型 有类型 有类型 Blob 半类型 预定义且有类型 无类型 预定义且有类型 ❌ ❌
数据关系 无 无 自由定义的(链接) 无 预定义 预定义的(边) 无 ❌ ❌
标准对象 JSON JSON 文本 字符串 表 哈希 列 ❌ ❌
编写语言 C++ Erlang Erlang C/C++ C JAVA JAVA ❌ ❌
接口协议 TCP上自定义 HTTP HTTP-Protobuf TCP上的简单文本 TCP上自定义 HTTP Thrift-HTTP ❌ ❌
HTTP/REST ✅ ✅ ✅ ❌ ❌ ✅ ✅ ❌ ❌
二级索引 ✅ ✅ ✅ ❌ ✅ ✅ ✅ ❌ ❌
版本化 ❌ ✅ ✅ ❌ ❌ ❌ ✅ ❌ ❌
Build Load mongoimport Bulk Doc API 否 否 COPY命令 否 否 ❌ ❌
非常大的文件 GridFS 附件 Luwak(已弃用) 无 BLOB 无 无 ❌ ❌
自由定义的查询 命令mapreduce 临时视图 弱支持Lucene 命令 SQL 图遍历,Cypher,搜索 弱 ❌ ❌
mapreduce JavaScript JavaScript JavaScript,Erlang 无 无 无 Hadoop ❌ ❌
伸缩性 数据中心 数据中心 数据中心 集群(主-从) 集群(通过一些扩展) 集群(通过HA) 数据中心 ❌ ❌
耐久性 写前日志安全模式 只在崩溃时 写入法定数则耐久 仅追加的日志 ACID ACID 写前日志 ❌ ❌
请求压缩 否 文件重写 否 快照 否 否 否 ❌ ❌
复制 主-从(通过复集) 主-主 基于对等主-主 主-从 主-从 主-从(在企业版中) 主-从 ❌ ❌
并发 写锁 无锁的MVCC 向量锁 无 表/行写锁 写锁 每行一段 ❌ ❌
分片 是 锁(通过BigCouch过滤器) 是 插件(客户端) 扩展(PL/Proxy) 否 通过HDFS ❌ ❌
事务 无 无 无 多操作队列 ACID ACID 是 ❌ ❌
触发器 无 更新验证或改变API 提交前后 无 是 事物事件处理程序 无 ❌ ❌
安全性 用户 用户 无 口令 用户/群 无 Kerberos,通过Hadoop的安全性 ❌ ❌
一主机多实例 ✅ ✅ ❌ ❌ ✅ ❌ ❌ ❌ ❌
主要区别 容易查询大量数据 耐久的可嵌入的集群 高可用性 非常非常快 最好的OSS RDBMS模型 灵活的图 规模非常大,Hadoop基础设施 ❌ ❌
不足 嵌入能力 查询能力 查询能力 负责数据 分布式高可用性 Blob或TB级数据 灵活增长查询能力 ❌ ❌

# 附录