Tables | 关系型数据库 | 非关系型数据库 |
---|---|---|
成本 | 好的收费 | 开源的,都免费的 |
存储与查询 | 硬盘存储,相对查的慢 | 内存存储,查的快 |
存储格式 | 只能是基本格式 | 多种多样 |
年龄 | 出现时间较长,较成熟 | 后起之秀,不可小觑 |
扩展性 | join等不好扩展 | 方便集群 |
事务 | 强事务 | 弱事务 |
查询 | 支持sql复杂查询 | 更适合简单查询 |
个人感觉:
关系型数据库就像一位老员工,他虽然慢,思维也比较固定,但给人的感觉就是一个字 : 稳
非关系型数据库就像年轻小伙,虽然经验不是很丰富,但是干劲十足,相信以后必将是他的天下
一个大型的公司,必定是新老员工都要有的.
对于大型系统而言,基本上也都是非关系型数据库和关系型数据库共存的.
非关系型数据库承担大部分查询,但最终的写入存储,还是使用关系型数据库
1.支持五种基本类型(String,List,Set,Hash,Sorted Set)
2.基于内存存储,两种持久化方式(RDB快照和AOF)
RDB是固定时间将内存转存磁盘 : 重启恢复快,但不是高可用(最近数据可能会来不及存入磁盘)
save 900 1 在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
AOF是将Reids的操作日志以追加的方式写入文件 : 相对高可用,但重启恢复相对慢
appendfsync always 每次有数据修改发生时都会写入AOF文件。
appendfsync everysec 每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no 从不同步。高效但是数据不会被持久化。
3.操作快(纯内存操作,单线程操作避免上下文频繁切换,采用非阻塞I/o多路复用机制)
4.操作是原子性的,要么成功执行,要么失败完全不执行
5.可以手动实现事务 : MULTI和EXEC指令
6.Redis分布式锁
7.Redis做缓存
8.Redis命令:http://www.redis.net.cn/
1.分布式内存对象缓存系统
2.所有数据都在内存中,没有持久化(注意与redis对比)
3.数据结构较为单一
4.可以修改最大可用内存,采用LRU算法
5.在并发场景下,用cas保证一致性
6.支持集群
7.适用于数据库缓存(主流)
8.总而言之,个人觉得综合下来,redis比memcached好,redis甚至可以完全替代memcached.
1.存储在hdfs之上的,是对hdfs的封装,简化了hdfs的操作
2.没有事务
3.基于内存
4.只支持key查询(这个和redis一样)
5.面向列存储(传统数据库是面向行存储的,一行有多列。而hbase一行只存储一列,所以说是面向列存储的
6.hbase中没有库的概念,但有个命名空间namespace,类似于库
7.hbase中有table表的概念
8.hbase中多了一个列簇的概念,column family。分类管理列,一个列簇是由多个相同特性的列组成,一个表中有多个列簇,列簇必须在创建表的时候指定
9.一个列簇下可以有多个列column,列簇下的列可以动态添加,列名需要在添加列名的时候指定
10.每个列名对应的值value,同一条数据可以有多个值,每个值对应一个版本,通过timestap当版本号,一个value默认可以保存三个版本
11.总而言之,大数据生态圈的存储,用hbase
1.面向集合(collection,类似表,但无模式)存储,schemeless
2.支持动态查询,语法丰富(这是我认为mongodb潜力比较大的原因之一)
3.支持丰富的数据类型
4.支持索引
5.支持javascript shall(小部分不支持,比如alert),因为内置js解释器
6.总而言之,数据库能干的mongodb几乎都差不多,非数据库能干的mongodb也差不多,个人很看好mongodb,只不过现在这方面没有数据库那么成熟,没有被特别广泛的用起来