zoukankan      html  css  js  c++  java
  • 卡包项目-总结

    1. 主要开发框架及工具

    JDK1.8 + mysql + SpringBoot + Hbase + Redis + Kafka

    mysql :

      1. 关系型数据库(由多张能互相连接的二维行列表格组成的数据库)

      2. mysql索引的数据结构B+树

    B+树是对B树的一种变形树,它与B树的差异在于:

    • 有k个子结点的结点必然有k个关键码;
    • 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
    • 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
    • 3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。
    • 索引字段要尽量的小
    • 索引的最左匹配特性
    不同的存储引擎支持的索引类型也不一样
    InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
    MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

      3. 事务隔离级别

    • 未提交读(Read Uncommitted): 允许脏读,即可以读到其他会话中未提交事务修改的数据
    • 提交度 (Read Committed): 只能读取到已经提交的数据
    • 可重复读(Read Repeated): 在同一个事务内的查询和事务开始时刻一致的,InnoDB默认
    • 串行读(Serializable):每次读都需要获得表级共享锁,读写都会相互阻塞
    • 事务级别越高,性能越差。Read Committed可以满足大多数的场景。

      使用mysql往往会遇到数据读写的瓶颈,而HBase这种分布式的存储架构面对数据的增长不需要做任何更改,只需要增加存储空间,且不会对读写性能有任何影响

    Redis

      1. K-V缓存系统

      2. 支持的数据类型

    • String
    • Hash
    • List
    • Set
    • SortedSet

      3. 特点

    • 原子性:redis所有单个命令都具有原子性(因为redis是单线程的)
    • 过期机制

    HBase

      1. 列族式存储

      2. Table = Rowkey + Family + Column + Timestamp + value

      3. 数据存储模式: (Table, Rowkey, Family, Column, Timestamp) -> value

      4. 默认一列数据可以保存三个版本

      5. 行式索引维护大量的索引,存储成本比较高,不能做到线性扩展,但是随机读效率高,对事务处理得比较好。列式存储根据同一列数据相似性的原理,利于对数据进行压缩,存储成本就会降低。列数据分开存储可以实现并行查询。千万级别的可以选择行式存储

    Kafka

      消息系统:

    点对点消息系统 : 一个消息只能被一个消费者消费

    发布订阅消息系统 : 一个topic下有多个queue, 每个queue是点对点的方式,queue之间是发布订阅方式。发布到topic的消息会被所有订阅者消费。

      kafka是一个分布式的发布订阅消息系统,能够支撑海量数据的消息传递。kafka将消息持久化到磁盘中,并对消息创建了备份,保证了数据的安全。

      特点: 可靠性,可扩展性,高性能

     用到的工具类

    1. Apache DigestUtils : 线程安全,需引入commons-codec依赖

    2. Apache RandomStringUtils : 需引入commons-lang依赖

    • RandomStringUtils.random(5) : 产生5位长度的随机字符串
    • RandomStringUtils.random(5, new char[]{'a','b','2','4'}) : 使用指定的字符生成5位长度的随机字符串
    • RandomStringUtils.randomAlphanumeric(5) : 产生5位长度的字母和数字的随机字符串
    • RandomStringUtils.randomNumeric(5) : 产生5位长度的数字随机字符串
    • RandomStringUtils.randomAlphabetic(5) : 生成5位随机字符串,包含大小写
    • RandomStringUtils.randomAscii(4) : 生成4位从ASCII 32到126的随机字符串

    3. Apache DateUtils : 需引入commons-lang依赖

    • Date parseDate(String str, String... parsePatterns)
    • Date addYears(Date date, int amount)
    • Date addDays(Date date, int amount)
    • Date addHours(Date date, int amount)
    • boolean isSameDay(Date date1, Date date2)

    4. Google Guava Enums : 需引入guava依赖

    • get Field
    • getIfPresent
    • stringConverter

    5. starter-hbase : 需引入spring-boot-starter-hbase依赖

    日志

    • 记录日志
    • 分析日志(action, userId, timestamp, remoteIp, info)
  • 相关阅读:
    c#将 1, 2, ..., 9共 9 个数字分成 3 组
    信息学院本科生创新项目总结
    Element-ui的使用
    fastmock接口管理
    mock安装与使用
    开闭原则
    里氏替换原则
    依赖倒置原则
    接口隔离原则
    单一职责原则
  • 原文地址:https://www.cnblogs.com/yintingting/p/10325374.html
Copyright © 2011-2022 走看看