热门搜索 :
考研考公
您的当前位置:首页正文

数据库day1:MySql+Redis(a little)

来源:东饰资讯网

mysql和redis的关系?

  1. 要根据具体的业务情景去选型:
  • mysql存储在磁盘中 redis存储在内存中
  1. redis适合存在一些比较热的数据,使用频繁的数据,比如下面的应用场景
  • 排行榜
  • 粉丝 关注
  • 消息队列推送

数据库

  1. 降级处理
    1. 其作用是为了适应不同版本的sql,不同型号的硬件设备,做到向下兼容
  2. 通过日志文件分析
  3. 如何进行分库分表(sharding)
    1. 数据库sharding,多表多数据适合做垂直切分;如果表不多,但是每张表的数据多适合做水平切分。
    2. 垂直切分:规则简单实施方便;根据不同的表来拆分,对程序的影响较小,拆分规则简单(share nothing) vertical sharding
    3. 水平拆分:将同一个表的不同数据拆分到不同的数据库中。 horizontal sharding
    4. 分布式矩阵(先垂直切分再水平切分):这是企业应用比较多的策略。 分布矩阵
    5. 切分策略:①垂直切分的思路是分析表间的聚合关系,把关系紧密的表放到一起。
    6. 切分策略之key:跨shard(数据切片)关联、社交网站基于用户切分、论坛基于用户和讨论切分,对于讨论模块来说,forum(讨论)是 因此按Forum进行水平切分,把Forum里所有的帖子和回帖放到一个shard里。
  4. 数据库引擎
    1. 数据库引擎是用来存储,处理和保护数据的核心服务。
    2. key:访问权限、开启事务、
  5. 索引的作用
    1. 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。
    2. 分类:==聚簇索引==,按照数据存放的物理位置为顺序,能提高多行的检索速度;==非聚簇索引==,对单行的检索更快。
    3. 数据库索引好比是一本书的目录,通过索引能加快数据的查询速度。
    4. key:唯一索引、主键索引、(数据库表中数据的物理顺序和与键值的逻辑(索引)数据相同)、索引列
  6. 掌握mysql数据库的多表查询,但是不建议使用数据库的多表查询,多表查询的逻辑放在程序逻辑中进行处理
  7. 事务处理:分布式事务、通过应用程序与数据库功能管理事务
    1. 分布式事务:优点是交由数据库管理,简单有效;缺点是当数据库切片(shard)较多时性能代价高
    2. 由应用程序和数据库共同控制:性能优越,但是需要灵活的设计技巧,尤其当使用spring事务管理时,改动将面临问题;原理:将一个跨多个数据库的分布式事务,拆分成多个仅处于单个数据库上的小事务,并通过应用程序来总控各个小事务。
  8. mysql的基本操作:
    1. query cache
    2. delete
    3. group
    4. limit
    5. where
    6. order
    7. count
    8. sum
    9. where
    10. explain

问题

  1. 降级处理
  2. 数据库索引的设计

小技巧

  1. 写逻辑判断的时候不用Boolean,用tinyint
  2. 表名称规范 常规的 _info 明细 _log
  3. 同一个逻辑处理可以采用分表,减少数据库的逻辑处理。用笔者写过的八字的项目举例,有一个总的贡献表,还需要有一个按周统计的实时贡献表,按周更新_week
  4. mysql中不建议直接写主外键关联关系,而是通过程序控制

名词

  1. shard:数据库切片
  2. sharding:分表分库

延伸(架构相关)

  1. 跨节点Join问题
    1. 只要是进行切片,跨节点的Join问题是不可避免的。
    2. 解决方法:分两次查询,在第一次查询的结果集中找到关联数据的id,根据这些id发起第二次请求得到关联数据。(类比一下bmob的管理查询,推测他们就是这么做的)

参考


一个敲代码,爱分享的人,我在这里!

来玩啊
Top