数据库选择策略
什么是数据库?
- 数据库就是对数据的管理
- 业务中包括了对数据的增、删、改、查等操作
- 数据管理中包括用户访问权限,持久化,分布式等不同的方案选择
基本问题分析
- 数据怎么存?
- 数据怎么查找?
- 怎么修改数据?
- 怎么添加和删除数据?
基本分类
- 数据怎么存?
-
- 持久化存储(将数据持久化存储在磁盘上)<–>内存数据库(将数据直接存储在内盘上)
-
- 单机<–>分布式
- 数据怎么增删改查?
-
- 关系查找<–>key-value查找
- 操作是否安全?
-
- 事务
-
- 实时一致性,最终一致性(实时一致性往往消耗计算资源,所以实际会采用最终一致性)
- 可用性
-
- 故障了怎么恢复?大部分数据库都具有故障恢复功能
常见数据库介绍
软件体系结构概念
起源于建筑学的“体系结构”
建筑设计原则:坚固、适用、赏心悦目
• 有哪些基本的建筑单元?
• 如何将这些基本单元进行组合形成整体建筑?
- 建筑单元怎样搭配才合理?
- 不同类型的建筑有什么典型的结构?
- 如何快速节省地进行建造施工?
- 怎样对建造完成的建筑进行适当的修改?
- 如何保证单元的更改不会影响整栋建筑的质量?
软件体系结构(Software Architecture)
包括构成系统的设计元素的描述、设计元素之间的交互、设计元素的组合模式以及在这些模式中的约束。
软件体系结构 =构件 + 连接件 + 约束
- 构件是具有某种功能的可复用的软件结构单元,表示系统中主要的计算元素和数据存储。
- 连接是构件间建立和维护行为关联与信息传递的途径。
- 连接件表示构件之间的交互并实现构件之间的连接。
风格、模式和框架
- 体系结构风格:用于描述某一特定应用领域中系统组织的惯用模式,反映
了领域中众多系统所共有的结构和语义特性。 - 设计模式:描述了软件系统设计过程中常见问题的一些解决方案,通常是
从大量的成功实践中总结出来的且被广泛公认的实践和知识。 - 软件框架:软件框架是由开发人员定制的应用系统的骨架,是整个或部分
系统的可重用设计,由一组抽象构件和构件实例间的交互方式组成。
框架和体系结构的关系:
- 体系结构的呈现形式是一个设计规约,而框架则是“半成品”的软件;
- 体系结构的目的是指导软件系统的开发,而框架的目的是设计复用。
框架和设计模式的关系:
- 框架给出的是整个应用的体系结构;而设计模式则给出了单一设计问题的解决方案,且可以在不同的应用程序或者框架中进行应用。
- 设计模式的目标是改善代码结构,提高程序的结构质量;框架强调的是设计的重用性和系统的可扩展性,以缩短开发周期,提高开发质量。
软件设计原则
设计原则是系统分解和模块设计的基本标准,应用这些原则可以使代码更加灵活、易于维护和扩展。
抽象
- 抽象是关注事物中与问题相关部分而忽略其他无关部分的一种思考方法。
- 抽象是关注事物中与问题相关部分而忽略其他无关部分的一种思考方法。
封装
封装和信息隐藏是指每个软件单元对其他所有单元都隐藏自己的设计决策,各个单元的特性通过其外部可见的接口来描述。
模块化
模块化是在逻辑和物理上将整个系统分解成多个更小的部分,其实质是“分而治之”,即将一个复杂问题分解成若干个简单问题,然后逐个解决。
系统分解原则
系统分解的目标:高内聚、低耦合
- 内聚性是一个模块或子系统内部的依赖程度。
如果一个模块或子系统含有许多彼此相关的元素,并且它们执行类似任务,那么其内聚性比较高;如果一个模块或子系统含有许多彼此不相关的元素,其内聚性就比较低。 - 耦合性是两个模块或子系统之间依赖关系的强度。
如果两个模块或子系统是松散耦合的,二者相互独立,那么当其中一个发生变化时对另一个产生的影响就很小;如果两个模块或子系统是紧密耦合的,其中一个发生变化就可能对另一个产生较大影响。
层次化
- 分层(Layering)
- 每一层可以访问下层,不能访问上层
- 封闭式结构:每一层只能访问与其相邻的下一层
- 开放式结构:每一层还可以访问下面更低的层次
- 层次数目不应超过 7±2 层
- 划分(Partitioning)
- 系统被分解成相互对等的若干模块单元
- 每个模块之间依赖较少,可以独立运行
!注意:模块单元增加了处理开销,过度分层或划分会增加复杂性
复用
复用(Reuse)是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统,其好处在于提高生产效率,提高软件质量。
- 源代码复用:对构件库中的源代码构件进行复用
- 软件体系结构复用:对已有的软件体系结构进行复用
- 框架复用:对特定领域中存在的一个公共体系结构及其构件进行复用
- 设计模式:通过为对象协作提供思想和范例来强调方法的复用
软件体系结构风格
软件体系结构风格(Architectural Styles)是描述特定系统组织方式的惯用范例,强调了软件系统中通用的组织结构。
主程序-子程序
主程序-子程序风格是结构化程序设计的一种典型风格,从功能的观点设计系统,通过逐步分解和细化,形成整个系统的体系结构。
构件:主程序、子程序
连接器:调用-返回机制
拓扑结构:层次化结构
面向对象风格
- 系统被看作是对象的集合,每个对象都有一个它自己的功能集合;
- 数据及作用在数据上的操作被封装成抽象数据类型;
- 只通过接口与外界交互,内部的设计决策则被封装起来。
构件:类和对象
连接器:对象之间通过函数调用和消息传递实现交互
管道-过滤器风格
管道-过滤器风格把系统任务分成若干连续的处理步骤,这些步骤由通过系统的数据流连接,一个步骤的输出是下一个步骤的输入。
以数据为中心的风格