1,nosql数据模型简介:
聚合模型:
1,kv键值
2,Bson
3,列族
4,图形
2,Nosql数据库的四大分类:
1,kv键值:
2,文档型数据库(bson格式比较多)
1,CouchDB
2,MongoDB
3,列存储数据库
1,Cassandra,HBASE
2,分布式存储系统
4,图关系数据库(注:主要是放关系的,不是放图片的,如:朋友圈社交网络的关系)
1,Neo4j、InfoGrid
***3,四者的对比:*** 分类Example举例典型应用场景数据模型优点缺点键值(key-value)Tokyo、Cabinet/Tyrant、Redis、Voldemort、Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等key指向value的键值对,通常用hash table来实现查找速度快数据无结构化,通常只被当作字符串或者二进制列存储数据库Cassandra、HBase、Rlak分布式的文件系统以列族式存储,将同一列族数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限文档型数据库CouchDB、MongoDBweb应用(与key-value类似,value是数据结构化的,不同的是数据库能够了解value的内容)key-value对应的键值对,value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法图形数据库Neo4j、Info Grid、infinite Graph社交网络、推荐系统等,专注于构建关系图谱图结构利用图结构关系语法,比如最短路径寻址,N层关系查找很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方向案 4,CAP原理CAP+BASE
1,传统的ACID:
1,A(Atomicity)原子性
2,C(Consistency)一致性
3,I(Isolation)独立性(隔离性)
4,D(Durability)持久性
2,CAP:
1,C(Consistency)强一致性
2,A(Availability)可用性
3,P(Partition)分区容错性
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,最多同时较好的满足两个,即根据CAP原理将nosql分为满足CA原则(传统Oracle数据库)、满足CP原则(Redis、MongoDB)、满足AP原则(CouchDB、Riak,注:这个原则是大多数网站架构的选择)三大类
5,BASE:
1,基本可用(Basically Available)
2,软状态(Soft state)
3,最终一致(Eventually consistent)
BASE就是为了解决关系型数据库强一致性引起的问题而引起的可用性降低而提出的解决方案,它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观
Redis:Remote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守bsd协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的Nosql数据库,被称为数据结构服务器
Redis与其他key-value缓存产品有以下三个特点:
1,Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
2,Redis不仅仅支持简单的key-value类型的数据,同时还提供了list、set、hash等数据结构的存储,
3,Redis支持数据的备份,即master-slave模式的数据备份
Redis的用处:
1,内存存储和持久化:Redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
2,取最新N个数据的操作,如:可以将最新的10条评论ID放在Redis的List集合里面
3,模拟类似于HttpSession这种需要设定需要设定过期时间的功能
4,发布、订阅消息系统
5,定时器、计数器
Redis杂项基础知识:
1,单进程单线程
2,默认16个数据库,类似数组下表从0开始,初始默认使用0号库
3,Select命令切换数据库
4,DBsize查看当前数据库的key数量
5,Flushdb:清空当前库
6,Flushall:通杀全部库
7,统一密码管理,16个库都是同样的密码,要么都OK,要么一个也连不上
8,Redis索引都是从零开始
9,默认端口是6379
Redis数据类型:
1,Redis的五大数据类型:
1,String(字符串 ):Redis最基本的类型,String类型时二进制安全的(即可以把图片和视频文件保存在String中),一个Redis中字符串value最多可以是512M
2,Hash(哈希,类似java中的Map)
3,List(列表)
4,Set(集合):是String类型的无序集合,是通过HashTable实现的
5,Zset(sorted set :有序集合):和set一样是String类型元素集合,切不允许重复的成员,不同的是每个元素都会关联一个dubbo类型的分数,Redis正是通过分数来为成员进行从小到大的排序,Zset的成员是唯一的,但分数却可以重复
2,Redis 键(key,常用的)
1,keys *:查询所有键
2,exists key的名字:判断某个key是否存在
3,move key名字 db数据库的名字:将当前库中的key移到指定库中
4,expire key 秒钟:为给定的key设置过期时间
5,ttl key:查看还有多少秒过期,-1表示永不过期,-2表示已过期
6,type key查看你的key是什么类型的
3,Redis字符串(String,单值单value,常用)
1,set(设置键值,如果有会覆盖)/get(获取)/del(删除)/append(追加,在value后追加)/strlen
2,Incr/decr/incrby/decrby,一定要是数字才能进行加减
3,getrange(获取指定区间范围的值,类似between…and…)/setrange(设置指定区间范围内的值,格式是settrange key值 具体值)
4,setex(set with expire)键秒值/setnx(set if not exist)
5,mset/mget/msetnx
6,getset(先get再set)
4,Redis列表(List,单值多value,常用)
1,lpush/rpush/lrange
2,lpop/rpop
3,lindex,按照索引下标获得元素(从上到下)
4,llen
5,lren key n value ,删除n个value
6,ltrim key 开始index 结束index,截取指定范围的值后 再赋值给key
7,rpoplpush 源列表 目的列表
8,lset key index value,更改具体下标的某个值
9,linsert key before/after 值1 值2
性能总结:其是一个字符串链表,左右都可以插入添加,若键不存在,创建心得链表,若已存在,新增内容,值全部移除,对应的键也就全部消失
5,Redis集合(Set----不允许重复,单值多value,常用)
1,sadd/smembers/sismenmber(判断某个值是否在集合中)
2,scard,获取集合里面元素的个数/长度
3,srem key value ,删除集合中的元素
4,srandmember key n ,从key集合中随机抽取n个数
5,spop key 随机 出栈
6,smove key1 key2 在key1里某个值,作用是将key1里的某个值赋给key2
7,数学集合类
1,差集:sdiff
2,交集:sinter
3,并集:sunion
6,Redis哈希(Hash,kv模式不变–但v有一个键值对,常用)
1,hset/hget/hmset/hmget/hgetall/hdel
2,hlen
3,hexists key 在key里面的某个值的key
4,hkeys/hvals
5,hincrby/hincrbyfloat
6,hsetnx
7,Redis有序集合Zset(sorted set)
1,zadd/zrange(Withscores)
2,zrangebyscore key 开始score 结束score(withscores,"("–不包含,limit,返回限制)
3,zrem key 某score下对应的value值,作用是删除元素
4,zcard/zcount key score 区间/zrank key values值,作用是获得下标值/zscore key 对应值。获得分数
5,zrevrank key values值,作用是逆序获得下标值
6,zrevrange
7,zrevrangebyscore key 结束score 开始score
在set的基础上,加一个score值,如:之前set是k1 v1 v2 v3,现在Zset是k1 score1 v1 score2 v2
