分库分表理论知识
一、前言当一张表的数据达到几千万时,查询一次所花的时间会变得很长,系统效率会下降。Oracle 官方推荐单表容量为 500w 以下为最佳状态。
但单表或单库达到性能瓶颈时,就需要对数据库进行拆分,数据库拆分又分为:
垂直拆分
水平拆分
二、垂直拆分垂直拆分可以分为:垂直分表 和 垂直分库。
垂直分表概念:把一个表的多个字段分别拆成多个表,一般按字段的访问频次拆分,经常访问的字段一个表,不经常访问的字段一个表。减少布不必要的字段查询,提高数据库性能。
如图:
垂直分库概念:就是根据业务耦合性,将关联度低的不同表存储在不同的数据库中。做法与大系统拆分成多个小系统类似,按业务类型进行独立划分。与 微服务划分 的做法类似。每个微服务使用单独的一个数据库。
如图:
说明:
业务数据量小的情况下,只有一个数据库,所有的表都在这个库里。
业务扩展,数据量增加,单体服务转变为微服务治理。要将之前的库按业务类型拆分成多个库。每个微服务对应一个库。
垂直拆分优缺点优点:
解决业务系统层面的耦合,业务清晰
与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等
高并发场景下,垂直 ...
ElasticSearch 的概述和使用
ElasticSearch 概述Elaticsearch,简称为 es, es 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别(大数据时代)的数据。es 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。
据国际权威的数据库产品评测机构 DB Engines 的统计,在 2016 年 1 月,ElasticSearch 已超过 Solr 等,成为排名第一的搜索引擎类应用。
ES 和 solr 的差别Elasticsearch 简介Elasticsearch 是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。
它用于全文搜索、结构化搜索、分析以及将这三者混合使用:
维基百科使用 Elasticsearch 提供全文搜索并高亮关键字,以及输入实时搜索(search-asyou-type)和搜索纠错(did-you-mean)等搜索建议功能。
英国卫报使用 ...
GitLab 安装与使用
Docker 安装 GitLabDockerHub 上有许多制作完善的镜像,直接搜索 gitlab 查看镜像:
搜索镜像
12SHELLdocker search gitlab
这里可以选择汉化的 GitLab 社区版的镜像进行下载
下载镜像
12SHELLdocker pull twang2218/gitlab-ce-zh
启动镜像
123456789SHELLdocker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitlab/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh命令解释:-d 后台启动-p 映射端口--restart 重启配置-v 卷挂载--privileged=true 设置root权限
配置 Git ...
Java 常见面试题
面试题节选自:Java 面试指南 | JavaGuide、Road 2 Coding | 编程自学之路
每天一记,始终如一…
基础概念与常识Java 语言有哪些特点?
简单易学;
面向对象(封装,继承,多态);
平台无关性(Java 虚拟机实现平台无关性);
支持多线程
可靠性;
安全性;
支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);
编译与解释并存;
一次编写,随处运行 是 Java 经典的跨平台口号。
但是目前市面上虚拟化技术已经非常成熟,通过 Docker 容器化技术就很容易实现跨平台。
Java 最大的优势应该是强大的生态!
JVM vs JDK vs JREJVMJava 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。
JVM 并不是只有一种!只要满足 JVM 规范,每个公司 ...
Springboot 核心技术
基础入门1、Spring 生态圈
Spring 官网:https://spring.io
Spring 能做什么?
Spring 的生态:
web 开发
数据访问
安全控制
分布式
消息服务
移动开发
批处理
…
2、为什么使用 SpringBoot?
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
能快速创建出生产级别的 Spring 应用。
SpringBoot 的优点:
创建独立 Spring 应用
内嵌 web 服务器
自动 starter 依赖,简化构建配置
自动配置 Spring 以及第三方功能
提供生产级别的监控、健康检查及外部化配置
无代码生成、无需编写 XML
SpringBoot 是整合 Spring 技术栈的一站式框架
SpringBoot 是简化 Spring 技术栈的快速开发脚手架
SpringBoot 的缺点:
人称版本帝,社区活跃,迭代快,需要时刻关注版本变 ...
Redis 数据库
为什么要用 Nosql
1、单机 MySQL 的年代!
90 年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!
那个时候,更多的去使用静态网页 HTML ==> 服务器根本没有太大的压力!
思考一下,这种情况下:整个网站的瓶颈是什么?
数据量如果太大,一个机器放不下了!
数据的索引( B + Tree),一个机器内存也放不下
访问量(读写混合),一个服务器承受不了
只要你开始出现以上的三种情况之一,那么你就必须晋级!
2、Memcached(缓存)+ MySQL + 垂直拆分(读写分离)
网站 80%的情况都是在读,每次都要去查询数据库的话就十分的麻烦!所以说我们希望减轻数据库的压力,我们可以使用缓存来保证效率!
发展过程:优化数据结构和索引 –> 文件缓存(IO)–> Memcached(当时最热门的技术!)
3、分库分表 + 水平拆分 + MySQL 集群
技术和业务在发展的同时,对人的要求也越来越高!
==本质:数据库(读、写)==
早些年 MyISAM:表锁,十分影响效率! ...