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部分要再整理一遍不熟悉的地方!

【控制时间,熟练度有了】--【再深入】

底层+封装

---业务

posted @ 2020-05-22 20:34  小海_macro  阅读(152)  评论(0编辑  收藏  举报