NoSQL
- 易扩展,高性能,高可用
- 较容易 映射复杂数据(key-value)
- 无失误特性要求(ACID,原子、一致、隔离、持久)
NoSQL 常用场景
- 内嵌
内嵌即存在关联关系的文档,放在同一个文档中,以数组的形式存放。设计思想:- 减少了关联查询
- 适合单类需要描述的属性
- 不经常变换的属性
- 父子引用
- 存在一对多,放在同一文档中,以数组的形式存放
- 存在一对非常多的情况下,由于文档存放限制,进行反向引用,存放父级 id
- 设计思想:
- 引用数据内容是否非常多?
- 引用数据量是否非常庞大,而且还在增加?
- 数据是否需要单独访问?
- 反范式
- 是否有提升性能的区间?
- 数据量的变化是否非常庞大,庞大到更新会异常低效?
- 先考虑读写比,才考虑反范式
MongoDB 设计原则
- 优先考虑内嵌,如果需要单独访问,则不适合
- 数组不应该无限制的增长
- 考虑读写比,考虑应用场景,考虑反范式
小江,
- 温和内敛,平易近人
- 毕业于中国地质大学(CUG),玩飞盘近 10 年
- 曾参加过武汉公开赛、深圳公开赛、北京公开赛,广州岭南赛,大连沙滩赛等高水平飞盘赛事
- 擅长打 cutter,喜欢接盘的感觉
- 因为玩飞盘,我不再”社恐”
Redis
KEY
- TYPE key, 返回key所存储的值的类型
- none(key 不存在)
- string
- list
- set
- zset
- hash
- KEYS pattern, 查找所以符合模式 pattern 的 key
- EXPIRE key sconds, 设置key 的过期时间,单位秒
- EXISTS key [key…], 检查给定key是否存在
String
- Setnx(SET if Not eXists) key value, 在指定的key不存在时,为key设置值
- Mset key value [key value…], 同时设置一个或多个key-value对
- Get key, 获取指定key的值
- Append key value, 将 value 追加到key原来值的末尾
Hash
- Hset key field value [field value…], 为哈希表中的字段赋值
- Hget key field, 返回哈希表中指定字段的值
- Hgetall key, 返回哈希表中所有的字段和值
List
- Lpush element [element…], 将一个或多个值插入到列表的头部
- Lpop key, 移出并获取列表的第一个元素
- Lrange key start stop, 获取列表指定范围内的元素
Set
- Sadd key member [memer…], 将一个或多个成员加入到集合,已经存在于集合的成员将被忽略
- Smembers key , 返回集合中所有成员
- Srem key member [member …], 移除集合中的一个或多个成员
Transaction
Multi, 标记一个事务块的开始
Exec, 执行所有事务块内的命令