Skip to content

Commit

Permalink
update docs
Browse files Browse the repository at this point in the history
  • Loading branch information
dunwu committed Feb 10, 2020
1 parent c810b0b commit caf28af
Show file tree
Hide file tree
Showing 21 changed files with 818 additions and 190 deletions.
24 changes: 24 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# 持续集成 CI
# @see https://docs.travis-ci.com/user/tutorial/

language: node_js

sudo: required

node_js: stable

branches:
only:
- master

before_install:
- export TZ=Asia/Shanghai

script: bash ./scripts/deploy.sh

notifications:
email:
recipients:
- forbreak@163.com
on_success: change
on_failure: always
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@
## 关系型数据库

> [关系型数据库](docs/sql/README.md)
> [关系型数据库](docs/sql) 整理主流关系型数据库知识点。
- [关系型数据库面试题 💯](docs/sql/sql-interview.md)
- [SQL Cheat Sheet](docs/sql/sql-cheat-sheet.md)
- [Mysql](docs/sql/mysql/README.md)
- [Mysql 原理](docs/sql/mysql/mysql-theory.md)
- [Mysql 运维 🔨](docs/sql/mysql/mysql-ops.md)
- [Mysql 配置](docs/sql/mysql/mysql-config.md)
- [H2 快速指南](docs/sql/h2.md)
- [SqLite 快速指南](docs/sql/sqlite.md)
- [PostgreSQL 快速指南](docs/sql/postgresql.md)
- [H2 入门指南](docs/sql/h2.md)
- [SqLite 入门指南](docs/sql/sqlite.md)
- [PostgreSQL 入门指南](docs/sql/postgresql.md)

## Nosql 数据库

> [Nosql 数据库](docs/nosql/README.md)
> [Nosql 数据库](docs/nosql) 整理主流 Nosql 数据库知识点。
- [Nosql 技术选型](docs/nosql/nosql-selection.md)
- [Redis](docs/nosql/redis/README.md)
Expand All @@ -34,4 +34,5 @@

## 中间件

- [数据库中间件 flyway](docs/sql/middleware/flyway.md)
- [版本管理中间件 flyway](docs/middleware/flyway.md)
- [分库分表中间件 ShardingSphere](docs/middleware/shardingsphere.md)
2 changes: 1 addition & 1 deletion docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ module.exports = {
}
},
themeConfig: {
logo: `images/dunwu-logo-100.png`,
logo: "images/dunwu-logo-100.png",
repo: "dunwu/db-tutorial",
repoLabel: "Github",
editLinks: true,
Expand Down
13 changes: 7 additions & 6 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
## 关系型数据库

> [关系型数据库](sql/README.md)
> [关系型数据库](sql) 整理主流关系型数据库知识点。
- [关系型数据库面试题 💯](sql/sql-interview.md)
- [SQL Cheat Sheet](sql/sql-cheat-sheet.md)
- [Mysql](sql/mysql/README.md)
- [Mysql 原理](sql/mysql/mysql-theory.md)
- [Mysql 运维 🔨](sql/mysql/mysql-ops.md)
- [Mysql 配置](sql/mysql/mysql-config.md)
- [H2 快速指南](sql/h2.md)
- [SqLite 快速指南](sql/sqlite.md)
- [PostgreSQL 快速指南](sql/postgresql.md)
- [H2 入门指南](sql/h2.md)
- [SqLite 入门指南](sql/sqlite.md)
- [PostgreSQL 入门指南](sql/postgresql.md)

## Nosql 数据库

> [Nosql 数据库](nosql/README.md)
> [Nosql 数据库](nosql) 整理主流 Nosql 数据库知识点。
- [Nosql 技术选型](nosql/nosql-selection.md)
- [Redis](nosql/redis/README.md)
Expand All @@ -43,4 +43,5 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu

## 中间件

- [数据库中间件 flyway](sql/middleware/flyway.md)
- [版本管理中间件 flyway](middleware/flyway.md)
- [分库分表中间件 ShardingSphere](middleware/shardingsphere.md)
40 changes: 10 additions & 30 deletions docs/sql/middleware/flyway.md → docs/middleware/flyway.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,21 @@
>
> 关键词:
<!-- TOC depthFrom:2 depthTo:3 -->

- [简介](#简介)
- [什么是 Flyway?](#什么是-flyway)
- [为什么要使用数据迁移?](#为什么要使用数据迁移)
- [Flyway 如何工作?](#flyway-如何工作)
- [快速上手](#快速上手)
- [命令行](#命令行)
- [JAVA API](#java-api)
- [Maven](#maven)
- [Gradle](#gradle)
- [入门篇](#入门篇)
- [概念](#概念)
- [命令](#命令)
- [支持的数据库](#支持的数据库)
- [资料](#资料)
- [:door: 传送门](#door-传送门)

<!-- /TOC -->

## 简介

### 什么是 Flyway
### 什么是 Flyway

**Flyway 是一个开源的数据库迁移工具。**

### 为什么要使用数据迁移
### 为什么要使用数据迁移

为了说明数据迁移的作用,我们来举一个示例:

(1)假设,有一个叫做 Shiny 的项目,它的架构是一个叫做 Shiny Soft 的 App 连接叫做 Shiny DB 的数据库。

(2)对于大多数项目而言,最简单的持续集成场景如下所示:

<br>![img](https://flywaydb.org/assets/balsamiq/Environments.png)<br>
![img](https://flywaydb.org/assets/balsamiq/Environments.png)

这意味着,我们不仅仅要处理一份环境中的修改,由此会引入一些版本冲突问题:

Expand Down Expand Up @@ -69,31 +49,31 @@

最简单的场景是指定 Flyway 迁移到一个空的数据库。

<br>![img](http://upload-images.jianshu.io/upload_images/3101171-bb6e9f39e56ebbda.png)<br>
![img](http://upload-images.jianshu.io/upload_images/3101171-bb6e9f39e56ebbda.png)

Flyway 会尝试查找它的 schema 历史表,如果数据库是空的,Flyway 就不再查找,而是直接创建数据库。

现再你就有了一个仅包含一张空表的数据库,默认情况下,这张表叫 _flyway_schema_history_

<br>![img](http://upload-images.jianshu.io/upload_images/3101171-410eb31c6313b389.png)<br>
![img](http://upload-images.jianshu.io/upload_images/3101171-410eb31c6313b389.png)

这张表将被用于追踪数据库的状态。

然后,Flyway 将开始扫描文件系统或应用 classpath 中的 **migrations**。这些 **migrations** 可以是 sql 或 java。

这些 **migrations** 将根据他们的版本号进行排序。

<br>![img](http://upload-images.jianshu.io/upload_images/3101171-d36ee07ada4efbcd.png)<br>
![img](http://upload-images.jianshu.io/upload_images/3101171-d36ee07ada4efbcd.png)

任意 migration 应用后,schema 历史表将更新。当元数据和初始状态替换后,可以称之为:迁移到新版本。

Flyway 一旦扫描了文件系统或应用 classpath 下的 migrations,这些 migrations 会检查 schema 历史表。如果它们的版本号低于或等于当前的版本,将被忽略。保留下来的 migrations 是等待的 migrations,有效但没有应用。

<br>![img](http://upload-images.jianshu.io/upload_images/3101171-99a88fea7a31a070.png)<br>
![img](http://upload-images.jianshu.io/upload_images/3101171-99a88fea7a31a070.png)

migrations 将根据版本号排序并按序执行。

<br>![img](http://upload-images.jianshu.io/upload_images/3101171-b444fef6e5c13b71.png)<br>
![img](http://upload-images.jianshu.io/upload_images/3101171-b444fef6e5c13b71.png)

## 快速上手

Expand Down Expand Up @@ -406,7 +386,7 @@ migrations 最常用的编写形式就是 SQL。

为了被 Flyway 自动识别,SQL migrations 的文件命名必须遵循规定的模式:

<br>![img](http://dunwu.test.upcdn.net/cs/database/flyway/sql-migrations.png!zp)<br>
![img](http://dunwu.test.upcdn.net/cs/database/flyway/sql-migrations.png!zp)

- **Prefix** - `V` 代表 versioned migrations (可配置), `U` 代表 undo migrations (可配置)、 `R` 代表 repeatable migrations (可配置)
- **Version** - 版本号通过`.`(点)或`_`(下划线)分隔 (repeatable migrations 不需要)
Expand All @@ -425,7 +405,7 @@ migrations 最常用的编写形式就是 SQL。

为了被 Flyway 自动识别,JAVA migrations 的文件命名必须遵循规定的模式:

<br>![img](http://dunwu.test.upcdn.net/cs/database/flyway/java-migrations.png!zp)<br>
![img](http://dunwu.test.upcdn.net/cs/database/flyway/java-migrations.png!zp)

- **Prefix** - `V` 代表 versioned migrations (可配置), `U` 代表 undo migrations (可配置)、 `R` 代表 repeatable migrations (可配置)
- **Version** - 版本号通过`.`(点)或`_`(下划线)分隔 (repeatable migrations 不需要)
Expand Down
55 changes: 55 additions & 0 deletions docs/middleware/shardingsphere.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# ShardingSphere

> ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这 3 款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
## 架构

![ShardingSphere Scope](https://shardingsphere.apache.org/document/current/img/shardingsphere-scope_cn.png)

### Sharding-JDBC

定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

- 适用于任何基于 Java 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。
- 基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
- 支持任意实现 JDBC 规范的数据库。目前支持 MySQL,Oracle,SQLServer 和 PostgreSQL。

![Sharding-JDBC Architecture](https://shardingsphere.apache.org/document/current/img/sharding-jdbc-brief.png)

### Sharding-Proxy

定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供 MySQL/PostgreSQL 版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作数据,对 DBA 更加友好。

- 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用。
- 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端。

![Sharding-Proxy Architecture](https://shardingsphere.apache.org/document/current/img/sharding-proxy-brief_v2.png)

### Sharding-Sidecar(TODO)

定位为 Kubernetes 的云原生数据库代理,以 Sidecar 的形式代理所有对数据库的访问。 通过无中心、零侵入的方案提供与数据库交互的的啮合层,即 Database Mesh,又可称数据网格。

Database Mesh 的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互有效的梳理。使用 Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。

![Sharding-Sidecar Architecture](https://shardingsphere.apache.org/document/current/img/sharding-sidecar-brief_v2.png)

| _Sharding-JDBC_ | _Sharding-Proxy_ | _Sharding-Sidecar_ | |
| :-------------- | :--------------- | :----------------- | ------ |
| 数据库 | 任意 | MySQL | MySQL |
| 连接消耗数 ||||
| 异构语言 | 仅 Java | 任意 | 任意 |
| 性能 | 损耗低 | 损耗略高 | 损耗低 |
| 无中心化 ||||
| 静态入口 ||||

### 混合架构

Sharding-JDBC 采用无中心化架构,适用于 Java 开发的高性能的轻量级 OLTP 应用;Sharding-Proxy 提供静态入口以及异构语言的支持,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。

ShardingSphere 是多接入端共同组成的生态圈。 通过混合使用 Sharding-JDBC 和 Sharding-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,架构师可以更加自由的调整适合于当前业务的最佳系统架构。

![ShardingSphere Hybrid Architecture](https://shardingsphere.apache.org/document/current/img/shardingsphere-hybrid.png)

## 参考资料

- [shardingsphere](https://github.com/apache/incubator-shardingsphere)
30 changes: 18 additions & 12 deletions docs/nosql/README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
# 非关系型数据库
# Nosql 数据库

## :memo: 知识点
## 📖 内容

### 非关系型数据库
### 列式数据库

- [HBase](hbase.md)

### K-V 数据库

- [Redis](redis/README.md)
- [Cassandra](cassandra.md)

### 文档数据库

- [MongoDB](mongodb)
- [Cassandra](Cassandra.md)

### 非关系型数据库对比
### 搜索引擎数据库

- [Elasticsearch](elasticsearch.md)

| 名称 | 类型 | 数据类型 | 查询类型 | 附加功能 |
| ------- | ---------------------------- | ------------------------------------------------------------ | -------------------------------------------------- | ------------------------------------------- |
| Redis | 基于内存存储的非关系型数据库 | String、List、Set、Hash、Sorted Set | 每种数据类型都有自己的专属操作和不完全的事务支持。 | 发布订阅、主从复制、持久化、脚本。 |
| MongoDB | 基于硬盘存储的文档数据库 | 每个数据库可以包含多个表,每个表可以包含多个无 schema 的 BSON 文档。 | 创建、读取、更新、删除、条件查询命令等。 | map-reduce 操作、主从复制、分片、空间索引。 |
### 图数据库

## 📚 学习资源
TODO: 待补充

## :door: 传送门
## 🚪 传送门

| [我的 Github 博客](https://github.com/dunwu/blog) | [db-tutorial 首页](https://github.com/dunwu/db-tutorial) |
◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog)
File renamed without changes.
Loading

0 comments on commit caf28af

Please sign in to comment.