[关闭]
@JunQiu 2018-09-18T10:25:04.000000Z 字数 1560 阅读 1110

sql_nosql、systemDesign浅读

summary_2018/07 database se(软工)


1、日常工作

1.1、 system design 学习
1.2、 关系型数据库和非关系型数据库重新定义

2、技术学习

2.1、 system design 学习:系统设计的步骤
2.1.1、约束和用例
  1. # 用例:用于表示系统所提供的服务,它定义了系统是如何被参与者所使用的,即系统的功能
  2. # 约束:一些约束,如系统容量等性能指标,或者操作系统及环境、兼容性需求等
  3. Example:URL服务简化为例
  4. ## 用例:
  5. 缩短URL:将一个长URL转换为一个短URL
  6. 重定向:接收到一个短URL后,重定向到长URL,即定向到真实地址
  7. 自定义URL功能
  8. 统计分析功能
  9. 链接自动过期(为短URL设置expiration time
  10. 手动删除链接
  11. ## 约束
  12. 10%的流量流向缩短URL服务,90%流量流向重定向
  13. 每秒request数:400+(40:缩短;360:重定向)
  14. 5年内6billion urls
  15. 每个URL大小为500字节
  16. 每个URLhash值为6字节
  17. 五年时间,url总大小为3TBhash总大小为36GB
  18. 每秒写入的新数据约为20KB
2.1.2、抽象设计
  1. 一旦你确定了即将设计的系统范围,你应该继续概述一个高级抽象设计。这样做的目的是概述您的架构所需的所有重要组件。可以画一个简单的草图来描述你的整个系统设计。
  2. Example:
  3. 1、应用服务层
  4. 缩短URL服务
  5. 重定向服务
  6. 2、数据存储层
  7. 存储映射关系
  8. 根据key恢复出实际URL
2.1.3、了解瓶颈
  1. 当抽象设计完成后,考虑到实际问题需要,考虑系统可能会遇到哪些瓶颈,也许您的系统需要一个负载均衡器,并且它背后有许多机器来处理用户请求。或者数据可能非常庞大,您需要在多台计算机上分发数据库。这样做有哪些缺点?数据库是否太慢,是否需要一些内存缓存?
  2. Tips:请记住,通常每个解决方案都是某种权衡。改变一些东西会使其他东西恶化。然而,重要的是能够根据实际情况权衡,并在给定约束和用例的情况下衡量它们对系统的影响。
  3. Example
  4. 分析第一阶段提出的约束,需要注意的地方是并发的处理和数据的存储,但每秒400+并不会造成并发处理的瓶颈,那么需要考虑的地方就在于数据量的处理上,采取哪种方案解决。(当然,有时也需要考虑到业务的发展,提前做好考虑,提高系统的可拓展性)
2.1.3、扩展抽象设计:可拓展性
  1. 当分析完瓶颈的时候,就需要考虑实际解决方案,来提高系统的可拓展性。
  2. 在拓展性中,我们需要知道一些概念,及之间的区别和取舍,如:
  3. 1、垂直缩放:通过增加机器的性能,如cpu、内存
  4. 2、水平缩放:通过增加多台机器
  5. 3、高速缓存
  6. 4、负载均衡
  7. 5、数据库复制
  8. 6、数据库分区
  9. 7、异步
  10. 。。。。
  11. Example:
  12. 在本例中,我们可能就需要考虑数据存储相关的东西,如数据库的选择。。。,在本例中,可能mongo的表现效果不错,也可以很好的进行水平拓展。
  13. 当做完这些步骤后,我们就可以开始系统的详细设计了。。。
  14. Tips:可拓展性是一个十分重要的东西,包涵的东西十分多,值得我们学习,比如还有系统的高可用性等等。。。

2.2、 关系型数据库和非关系型数据库重新定义
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注