数据的选择应该考虑哪些因素:
·应用程序正常投用时存储的数据量有多大?
·负载高峰时支持多少并发用户?
·应用程序需要怎样的可用性、可扩展性、延迟、吞吐量和数据一致性?
·数据库 schema 多久改一次?
·用户的地理分布如何?
·数据的自然“形态”是怎样的?
·需要在线事务处理(OLTP)、分析查询(OLAP)还是都支持?
·生产环境中预期读写比是多少?
·需要查询地理信息或者全文检索吗?
·首选编程语言是什么?
·预算是怎样的?如果有预算,是否包含授权和合同费用?
·存储数据是否有法律限制?
MySQL
特点
·功能强大;
·支持跨平台;
·运行速度快;
·支持面向对象;
·安全性高;
·成本低;
·支持各种开发语言;
·数据库存储容量大;
·支持强大的内置函数;
适用场景
①通用型OLTP数据库
②电子商务应用
③LAMP开源堆栈
MongoDB
特点
·易拓展性;
·网站数据具有高性能;
·存储动态性;
·读写速度快;
适用场景
·社交场景,使用 MongoDB存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
·游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
·物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
·物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
·视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。
适用场景特点
- 数据量大
- 写入操作频繁(读写都很频繁)
- 价值较低的数据,对事务性要求不高
Redis
特点
·速度快
·简单稳定
·语言多
适用场景
·缓存
·数据的共享分布式
·分布式锁
·全局ID
·计数器
·限流
·位统计
·时间轴
·消息队列
·抽奖
·点赞、签到、打卡
·商品标签
·好友关系、用户关注、推荐模型
·排行榜
·倒排索引
·显示最新的项目列表
软件体系结构
软件设计原则——模块化
模块化产品设计方法的原理是,在对一定范围内的不同功能或相同功能、不同性能、不同规格的产品进行功能分析的基础上,划分并设计出一系列功能模块,通过模块的选择和组合构成不同的顾客定制的产品,以满足市场的不同需求。
软件过程中的内聚和耦合
对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。
有软硬件之间的耦合,还有软件各模块之间的耦合。
耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口.
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。
※内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系; 耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。