大前端-NoSQL数据库的设计与集成

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, 执行所有事务块内的命令