卡包项目-总结

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)
原文地址:https://www.cnblogs.com/yintingting/p/10325374.html