1.
数据库, 因为将数据持久化到硬盘上, 所以查询数据是从硬盘中读取
所以数据库查询的速度快慢与磁盘的IO效率也有很大关系
硬盘分类:
机械硬盘:
5400转
7200转
12000转 单块硬盘最快读取速度500多M每秒写入速度最快300多M每秒
固态硬盘:
比较贵, 不使用
2. 数据库优化:
1. sql优化: 优化编写的sql语句让, sql语句执行速度更快
2. 表结构优化:
设计方案:
横切(表的水平切分):
使用场景: 表的数据量过大, 在mysql中如果单表超过500万条数据可以考虑表的水平切分
因为mysql单表500万条以上, 在查询的时候会造成命中率降低, 成指数级降低.
将一张表水平拆分成多张表, 多张表, 字段都是一样的, 但是存储的数据不一样.
纵切(表的垂直切分):
使用场景: 单表字段过多, 造成查询的时候, 查询的数据量过大, 可以进行表的纵切,
将一张表拆分成多张表, 每张表都是一对一的关系, 多张表存储的字段不一样,
数据也不一样.
3. 数据库集群方案优化:
3.前端内容:
<select class="form-control" ng-model="entity.goods.category1Id" ng-options="item.id as item.name for item in itemCat1List">
</select>
下拉列表:
ng-model绑定指令: 将下拉菜单的选中的数据绑定到$scope域中的变量中
ng-options: 遍历集合数据, 用来显示下拉菜单
遍历出来的对象变量的id作为key as 遍历出来的对象变量的名称作为value for 遍历出来的对象变量 in 集合名称
$watch是angularjs中的内置对象, 作用是监听器, 监听对象中的值的变化
$scope.$watch("entity.goods.category1Id",function(newValue,oldValue){
第一个参数是监听的对象, newvalue是下拉菜单选中后的值, oldValue是下拉菜单以前的值
4. json转换:
java中只有json格式字符串, java中不存在json类型
json集合或者叫json数组, 最外层是方括号:
[{"id":27,"text":"网络"},{"id":32,"text":"机身内存"}]
单个json, 最外层是大括号:
{"id":27,"text":"网络"}
阿里公司的json转换工具, 可以将json格式字符串转换成对应的Java对象:
JSON.parseObject()方法是将json格式字符串转换成单个对象
JSON.parseArray(, );方法是将json格式字符串转换为集合对象
5.
什么是fastDFS
fastDFS是一个开源免费的分布式文件系统, 底层使用C语言编写.
作用:
用来保存大量的文件, 支持分布式, 支持高可用, 支持高扩展性, 支持高并发, 支持大数据量
fastDFS运行原理和流程:
a) fastDFS分为三部分:
客户端: 我们的品优购项目就是客户端
storage存储端: 存储端存储具体的文件内容
tracker管理端: 管理端负责管理存储端的机器的IP和端口以及状态并且分负载均衡的功能
b) storage存储端启动, 启动后到tracker管理端中注册, 告诉管理端自己的ip地址和端口号以及状态.
c) 我们如果想要存储文件, 需要先连接tracker管理端, 管理端给我们返回一个存储端的IP地址和端口号,
我们拿着这个IP和端口进行到storage存储端进行存储, 存储后会返回一个文件路径和文件名.
并且存储端会对文件名自动重命名, 防止文件重名
优点:
a) 存储端一台主机一台备机, 我们平时往主机中存储, 主机会将数据同步到备机, 主机和备机中存储的内容
一模一样, 这叫做冗余存储起到了容灾的效果.
b) 主机和备机之间有心跳检测机制, 一旦主机宕机, 被替代主机工作, 有高可用的特性
c) 主机和备机为一组, 理论上可以无限扩展, 所以理论上存储端集群中存储容量是无限大的, 扩展性好.
d) 管理端有负载均衡的特性, 会在高并发的时候, 均匀分配请求到每一台存储端服务器上, 所以我们
的fastDFS有负载均衡特性, 可以承载高并发存储任务.
缺点:
结构复杂, 需要的服务器很多, 在实际线上环境中成本比较高.