# 数据库 🔎

数据库不是凭空产生的,它们是为了解决实际使用中提出的问题,在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级数据 灵活增长查询能力

# 附录