20200508_NoSql——中间件综合小项目练习
业务需求:NOSQL,非关系型数据库{如何索引,如何排序}
客户端:
服务端:
【1】配置
【2】API
【3】XML
【4】为客户端提供服务
工程准备
【1】lib: 存储得依赖JAR包,包括:dom4j
【2】conf:保存各类配置文件
【3】data:数据目录,保存各个库、表、索引等记录。mydb:各个表得数据
功能划分:web工程、Java工程等不同项目划分标准
【4】包:mydb.server(本地服务)\client(客户端)\build(解析)\entity\util\core(核心业务)
part 1:XML得解析和配置
【1】服务开始---解析配置文件XML
-端口、
-数据路径、最大访问量、最小连接数、空闲连接数
【2】缓存解析得信息道本地
【3】提供服务:给客户端、API等{通过统一得接口访问}
【4】设计应用层协议{解析协议相关规则}
==========================
协议的结构:所有的应用场景
【1】协议的分层:
【2】请求
-用户验证
-解析MYDBSQL
-DCL:建库,建表, {
-\^create\s+[database|table]\s+……$\
建库:create database 库名
建表:create table 库名:表名 字段1,字段2,…
}
-DML:修改数据(增,删,改)
1:新增数据 put 库名:表名 行名 字段名:值
2:修改数据:set 库名:表名 行名 字段名:值
3:删除数据 del 库名:表名 行名
【举例】 同时修改数据索引等相关操作。
-DQL:关系型数据库最大的瓶颈在于:查询性能--->索引(数据结构)--->算法模型{服务器,web只是一种表现}
查询数据()
a.查询数据:scan 库名:表名 [行名/(行1,行2,….)]
b.查询数据:get 库名:表名 [【行名:】列名]
【举例】 同时,需要建立执行查询的计划。【执行计划】
C.优化查询性能:
【1】给数据加索引——用于寻找数据的一种“路标”【1.2】执行计划【有章法的安排接下来的查询工作】;
【2】通过缓存来提高查询效率(把数据临时放在内存或者其他地方)
--数据变化:对u赢得缓存失效
--经常修改(添加,修改,删除,表结构变动)的数据不适合放缓存
--数据量特别大的不适合放缓存
--结果不确定的,不适合放缓存
--怎么放缓存?
--KV格式保存查询数据
--如果当前的数据放在缓存当中,通过相同地查询语句以及当前的用户来判断是否需要使用缓存。
--当数据变动,缓存失效
【3】响应
-用户验证:分配ID
-SQL执行结果:
-DCL:0/1
-DML:number:1
-DQL:{行名,列名,字段值,时间戳}——JSON格式
建库
-通常来说:要针对于某个完整的功能,需要多个数据表,而把这些数据表整合起来的数据表的集合:库。
建表
-保存数据的最基本单元:表。
创建检索的索引
-对数据进行单元的划分,并且可以同时对数据的检索层次进行划分。——帮助快速检索数据。
-要实现数据检索,同时需要创建索引文件,索引文件可以帮助我们进一步提高检索效率。
所有的SQL都需要解析,需要一个统一的解析模块。
为什么要有统一的解析结果模型:序列化操作。
-分布式:架构,整个业务流程:写文档。
-
-
数据一致性问题
【1】多用户访问同一个数据的时候
【2】多用户修改同一个数据的时候
【3】多用户操作同一批数据的时候
经验:边写边侧,保证有效代码!
--达到项目所想缩写的!
-设计接口,解析字符串!
excludes:
[1]getClass().getResource(fileName):当前调用类所在的同一路径下执行
[2]getClass().getClassLoader().getResource(fileName);表示只会在 根目录/查找该文件
应用案例:
【1】com.n包下有:A.java,b.xml
-A.getClass()
锁的分类:
- 公平锁/非公平锁
- 可重入锁
- 独享锁/共享锁
- 互斥锁/读写锁
- 乐观锁/悲观锁
- 分段锁
- 偏向锁/轻量级锁/重量级锁
- 自旋锁
-
-
-
粘包和拆包:大批量数据读取,可能会出现该情况。
-
-
SE部分要再整理一遍不熟悉的地方!
【控制时间,熟练度有了】--【再深入】
底层+封装【
---业务
】