数据库类型与实例 |
适合场景 |
不适合场景 |
场景举例 |
关系数据库 基于集合理论,具有行和列的二维表,严格使用类型 开源MySQL/MariaDB, PostgreSQL 商业:Oracle,DB2,SQL Server, Sybase |
l 数据具有类型 l 灵活查询。 l 即提前为组织的复杂性付出代价,以实现随后的查询灵活性 |
l 数据高度或者多层次的,无法提前指定模式 |
|
键值数据库 Redis Riak—类dynamo Memcached(membase..) BerkeleyDB Voldemort |
l 数据相关性不高 l 性能极高 |
l 缺乏索引和扫描功能,除了基本的CRUD外帮助不大 l 对于自由定义的查询无能为力 l 不适合复杂查询和聚合等 |
l 适合场景 Session信息 用户概要等信息 购物车 l 不适合场景 数据之间存在强关联 事务 根据value查询 Operations by Sets |
列型数据库 HBase Cassandra Hypertable |
l 横向扩展 l 列的添加容易 l 版本控制 |
l 基于你打算如何查询数据设计数据库模式 l 不仅对数据如何组成有一些想法,对如何使用数据也要预先知晓 |
l 适合场景 事件日志 CMS,博客 计数器 数据过时使用 l 不适合场景 |
文档型 MongoDB CouchDB |
l 每个对象有任意数量字段,对象可以作为值以任意深度嵌套到其他字段中 l 高度可变领域 l 很好的映射到OOP |
l 缺乏复杂的查询,如联接 |
l 适合场景 事件日志 CMS,博客 Web分析或者实时分析 电子商务 l 不适合场景 复杂事务 查询持续变化的聚合结构 |
图数据库 Neo4j(支持ACID事务) |
l 形式自由的网络应用,如社交网络 l 不需要将相似的对象划分共同组,只要可以在白板上建模就可以表示 l 场景如推荐引擎、ACL和地理数据 |
l 节点之间的高度关联,不适合网络分区 l 扩展性差,通常大容量数据存储在其他地方,而在图中只保存关系 |
l 适合场景 互联数据 路由、分发和基于位置的服务 推荐引擎 l 不适合场景 |
参考文献
《七周七数据库》
《NoSQL Distilled》