diff --git a/README.md b/README.md index 932350a..a240e1a 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,23 @@

- license - build + + + star + + + + fork + + + + commit + + + + code style + +

DB-TUTORIAL

@@ -16,13 +31,9 @@ > - 🔁 项目同步维护:[Github](https://github.com/dunwu/db-tutorial/) | [Gitee](https://gitee.com/turnon/db-tutorial/) > - 📖 电子书阅读:[Github Pages](https://dunwu.github.io/db-tutorial/) | [Gitee Pages](https://turnon.gitee.io/db-tutorial/) -## 数据库原理 +## 数据库综合 -### 数据结构 - -TODO... - -### 分布式 +### 分布式存储原理 - [分布式简介](https://dunwu.github.io/design/distributed/分布式简介.html) - [分布式基础理论](https://dunwu.github.io/design/distributed/分布式理论.html) - 关键词:`拜占庭将军`、`CAP`、`BASE` @@ -38,32 +49,83 @@ TODO... - [分布式会话](https://dunwu.github.io/design/distributed/分布式会话.html) - 关键词:`粘性 Session`、`Session 复制共享`、`基于缓存的 session 共享` - [流量控制](https://dunwu.github.io/design/distributed/流量控制.html) - 关键词:`计数器法`、`时间窗口法`、`令牌桶法`、`漏桶法` +### 其他 + +- [Nosql 技术选型](docs/01.数据库综合/01.Nosql技术选型.md) +- [数据结构与数据库索引](docs/01.数据库综合/02.数据结构与数据库索引.md) + +## 数据库中间件 + +- [ShardingSphere 简介](docs/02.数据库中间件/01.Shardingsphere/01.ShardingSphere简介.md) +- [ShardingSphere Jdbc](docs/02.数据库中间件/01.Shardingsphere/02.ShardingSphereJdbc.md) +- [版本管理中间件 Flyway](docs/02.数据库中间件/02.Flyway.md) + ## 关系型数据库 -> [关系型数据库](docs/sql) 整理主流关系型数据库知识点。 +> [关系型数据库](docs/03.关系型数据库) 整理主流关系型数据库知识点。 -- [关系型数据库面试总结](docs/sql/common/sql-interview.md) 💯 -- [SQL Cheat Sheet](docs/sql/common/sql-cheat-sheet.md) 是一个 SQL 入门教程。 +### 公共知识 -### [Mysql](docs/sql/mysql) +- [关系型数据库面试总结](docs/03.关系型数据库/01.综合/01.关系型数据库面试.md) 💯 +- [SQL Cheat Sheet](docs/03.关系型数据库/01.综合/02.SqlCheatSheet.md) 是一个 SQL 入门教程。 +- [扩展 SQL](docs/03.关系型数据库/01.综合/03.扩展SQL.md) 是一个 SQL 入门教程。 + +### Mysql ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716103611.png) -- [Mysql 应用指南](docs/sql/mysql/mysql-quickstart.md) ⚡ -- [Mysql 工作流](docs/sql/mysql/mysql-workflow.md) - 关键词:`连接`、`缓存`、`语法分析`、`优化`、`执行引擎`、`redo log`、`bin log`、`两阶段提交` -- [Mysql 索引](docs/sql/mysql/mysql-index.md) - 关键词:`Hash`、`B 树`、`聚簇索引`、`回表` -- [Mysql 锁](docs/sql/mysql/mysql-lock.md) - 关键词:`乐观锁`、`表级锁`、`行级锁`、`意向锁`、`MVCC`、`Next-key 锁` -- [Mysql 事务](docs/sql/mysql/mysql-transaction.md) - 关键词:`ACID`、`AUTOCOMMIT`、`事务隔离级别`、`死锁`、`分布式事务` -- [Mysql 性能优化](docs/sql/mysql/mysql-optimization.md) -- [Mysql 运维](docs/sql/mysql/mysql-ops.md) 🔨 -- [Mysql 配置](docs/sql/mysql/mysql-config.md) -- [Mysql 问题](docs/sql/mysql/mysql-faq.md) +- [Mysql 应用指南](docs/03.关系型数据库/02.Mysql/01.Mysql应用指南.md) ⚡ +- [Mysql 工作流](docs/03.关系型数据库/02.Mysql/02.MySQL工作流.md) - 关键词:`连接`、`缓存`、`语法分析`、`优化`、`执行引擎`、`redo log`、`bin log`、`两阶段提交` +- [Mysql 事务](docs/03.关系型数据库/02.Mysql/03.Mysql事务.md) - 关键词:`ACID`、`AUTOCOMMIT`、`事务隔离级别`、`死锁`、`分布式事务` +- [Mysql 锁](docs/03.关系型数据库/02.Mysql/04.Mysql锁.md) - 关键词:`乐观锁`、`表级锁`、`行级锁`、`意向锁`、`MVCC`、`Next-key 锁` +- [Mysql 索引](docs/03.关系型数据库/02.Mysql/05.Mysql索引.md) - 关键词:`Hash`、`B 树`、`聚簇索引`、`回表` +- [Mysql 性能优化](docs/03.关系型数据库/02.Mysql/06.Mysql性能优化.md) +- [Mysql 运维](docs/03.关系型数据库/02.Mysql/20.Mysql运维.md) 🔨 +- [Mysql 配置](docs/03.关系型数据库/02.Mysql/21.Mysql配置.md) 🔨 +- [Mysql 问题](docs/03.关系型数据库/02.Mysql/99.Mysql常见问题.md) ### 其他 -- [H2 应用指南](docs/sql/h2.md) -- [SqLite 应用指南](docs/sql/sqlite.md) -- [PostgreSQL 应用指南](docs/sql/postgresql.md) +- [PostgreSQL 应用指南](docs/03.关系型数据库/99.其他/01.PostgreSQL.md) +- [H2 应用指南](docs/03.关系型数据库/99.其他/02.H2.md) +- [SqLite 应用指南](docs/03.关系型数据库/99.其他/03.Sqlite.md) + +## 文档数据库 + +### MongoDB + +> MongoDB 是一个基于文档的分布式数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 +> +> MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品。它是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。 +> +> MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 + +- [MongoDB 应用指南](docs/04.文档数据库/01.MongoDB/01.MongoDB应用指南.md) +- [MongoDB 的 CRUD 操作](docs/04.文档数据库/01.MongoDB/02.MongoDB的CRUD操作.md) +- [MongoDB 聚合操作](docs/04.文档数据库/01.MongoDB/03.MongoDB的聚合操作.md) +- [MongoDB 事务](docs/04.文档数据库/01.MongoDB/04.MongoDB事务.md) +- [MongoDB 建模](docs/04.文档数据库/01.MongoDB/05.MongoDB建模.md) +- [MongoDB 建模示例](docs/04.文档数据库/01.MongoDB/06.MongoDB建模示例.md) +- [MongoDB 索引](docs/04.文档数据库/01.MongoDB/07.MongoDB索引.md) +- [MongoDB 复制](docs/04.文档数据库/01.MongoDB/08.MongoDB复制.md) +- [MongoDB 分片](docs/04.文档数据库/01.MongoDB/09.MongoDB分片.md) +- [MongoDB 运维](docs/04.文档数据库/01.MongoDB/20.MongoDB运维.md) + +## KV 数据库 + +### Redis + +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713105627.png) + +- [Redis 面试总结](docs/05.KV数据库/01.Redis/01.Redis面试总结.md) 💯 +- [Redis 应用指南](docs/05.KV数据库/01.Redis/02.Redis应用指南.md) ⚡ - 关键词:`内存淘汰`、`事件`、`事务`、`管道`、`发布与订阅` +- [Redis 数据类型和应用](docs/05.KV数据库/01.Redis/03.Redis数据类型和应用.md) - 关键词:`STRING`、`HASH`、`LIST`、`SET`、`ZSET`、`BitMap`、`HyperLogLog`、`Geo` +- [Redis 持久化](docs/05.KV数据库/01.Redis/04.Redis持久化.md) - 关键词:`RDB`、`AOF`、`SAVE`、`BGSAVE`、`appendfsync` +- [Redis 复制](docs/05.KV数据库/01.Redis/05.Redis复制.md) - 关键词:`SLAVEOF`、`SYNC`、`PSYNC`、`REPLCONF ACK` +- [Redis 哨兵](docs/05.KV数据库/01.Redis/06.Redis哨兵.md) - 关键词:`Sentinel`、`PING`、`INFO`、`Raft` +- [Redis 集群](docs/05.KV数据库/01.Redis/07.Redis集群.md) - 关键词:`CLUSTER MEET`、`Hash slot`、`MOVED`、`ASK`、`SLAVEOF no one`、`redis-trib` +- [Redis 实战](docs/05.KV数据库/01.Redis/08.Redis实战.md) - 关键词:`缓存`、`分布式锁`、`布隆过滤器` +- [Redis 运维](docs/05.KV数据库/01.Redis/20.Redis运维.md) 🔨 - 关键词:`安装`、`命令`、`集群`、`客户端` ## 列式数据库 @@ -76,65 +138,25 @@ TODO... - [HBase 应用](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/HBase应用.md) - [HBase 运维](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/HBase运维.md) -## KV 数据库 - -### Redis - -![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713105627.png) - -- [Redis 面试总结](docs/nosql/redis/redis-interview.md) 💯 -- [Redis 应用指南](docs/nosql/redis/redis-quickstart.md) ⚡ - 关键词:`内存淘汰`、`事件`、`事务`、`管道`、`发布与订阅` -- [Redis 数据类型和应用](docs/nosql/redis/redis-datatype.md) - 关键词:`STRING`、`HASH`、`LIST`、`SET`、`ZSET`、`BitMap`、`HyperLogLog`、`Geo` -- [Redis 持久化](docs/nosql/redis/redis-persistence.md) - 关键词:`RDB`、`AOF`、`SAVE`、`BGSAVE`、`appendfsync` -- [Redis 复制](docs/nosql/redis/redis-replication.md) - 关键词:`SLAVEOF`、`SYNC`、`PSYNC`、`REPLCONF ACK` -- [Redis 哨兵](docs/nosql/redis/redis-sentinel.md) - 关键词:`Sentinel`、`PING`、`INFO`、`Raft` -- [Redis 集群](docs/nosql/redis/redis-cluster.md) - 关键词:`CLUSTER MEET`、`Hash slot`、`MOVED`、`ASK`、`SLAVEOF no one`、`redis-trib` -- [Redis 实战](docs/nosql/redis/redis-action.md) - 关键词:`缓存`、`分布式锁`、`布隆过滤器` -- [Redis 运维](docs/nosql/redis/redis-ops.md) 🔨 - 关键词:`安装`、`命令`、`集群`、`客户端` - -## 文档数据库 - -### MongoDB - -> MongoDB 是一个基于文档的分布式数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 -> -> MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品。它是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。 -> -> MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 - -- [MongoDB 应用指南](docs/nosql/mongodb/mongodb-quickstart.md) -- [MongoDB 聚合操作](docs/nosql/mongodb/mongodb-aggregation.md) -- [MongoDB 建模](docs/nosql/mongodb/mongodb-model.md) -- [MongoDB 建模示例](docs/nosql/mongodb/mongodb-model-example.md) -- [MongoDB 索引](docs/nosql/mongodb/mongodb-index.md) -- [MongoDB 复制](docs/nosql/mongodb/mongodb-replication.md) -- [MongoDB 分片](docs/nosql/mongodb/mongodb-sharding.md) -- [MongoDB 运维](docs/nosql/mongodb/mongodb-ops.md) - ## 搜索引擎数据库 ### Elasticsearch > Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。 -- [Elasticsearch 面试总结](docs/nosql/elasticsearch/elasticsearch-interview.md) 💯 -- [Elasticsearch 快速入门](docs/nosql/elasticsearch/Elasticsearch快速入门.md) -- [Elasticsearch 简介](docs/nosql/elasticsearch/Elasticsearch简介.md) -- [Elasticsearch Rest API](docs/nosql/elasticsearch/ElasticsearchRestApi.md) -- [ElasticSearch Java API 之 High Level REST Client](docs/nosql/elasticsearch/ElasticsearchHighLevelRestJavaApi.md) -- [Elasticsearch 索引管理](docs/nosql/elasticsearch/Elasticsearch索引管理.md) -- [Elasticsearch 查询](docs/nosql/elasticsearch/Elasticsearch查询.md) -- [Elasticsearch 高亮](docs/nosql/elasticsearch/Elasticsearch高亮.md) -- [Elasticsearch 排序](docs/nosql/elasticsearch/Elasticsearch排序.md) -- [Elasticsearch 聚合](docs/nosql/elasticsearch/Elasticsearch聚合.md) -- [Elasticsearch 分析器](docs/nosql/elasticsearch/Elasticsearch分析器.md) -- [Elasticsearch 运维](docs/nosql/elasticsearch/Elasticsearch运维.md) -- [Elasticsearch 性能优化](docs/nosql/elasticsearch/Elasticsearch性能优化.md) - -## 中间件 - -- [版本管理中间件 flyway](docs/middleware/flyway.md) -- [分库分表中间件 ShardingSphere](docs/middleware/shardingsphere.md) +- [Elasticsearch 面试总结](docs/07.搜索引擎数据库/01.Elasticsearch/01.Elasticsearch面试总结.md) 💯 +- [Elasticsearch 快速入门](docs/07.搜索引擎数据库/01.Elasticsearch/02.Elasticsearch快速入门.md) +- [Elasticsearch 简介](docs/07.搜索引擎数据库/01.Elasticsearch/03.Elasticsearch简介.md) +- [Elasticsearch 索引](docs/07.搜索引擎数据库/01.Elasticsearch/04.Elasticsearch索引.md) +- [Elasticsearch 查询](docs/07.搜索引擎数据库/01.Elasticsearch/05.Elasticsearch查询.md) +- [Elasticsearch 高亮](docs/07.搜索引擎数据库/01.Elasticsearch/06.Elasticsearch高亮.md) +- [Elasticsearch 排序](docs/07.搜索引擎数据库/01.Elasticsearch/07.Elasticsearch排序.md) +- [Elasticsearch 聚合](docs/07.搜索引擎数据库/01.Elasticsearch/08.Elasticsearch聚合.md) +- [Elasticsearch 分析器](docs/07.搜索引擎数据库/01.Elasticsearch/09.Elasticsearch分析器.md) +- [Elasticsearch 性能优化](docs/07.搜索引擎数据库/01.Elasticsearch/10.Elasticsearch性能优化.md) +- [Elasticsearch Rest API](docs/07.搜索引擎数据库/01.Elasticsearch/11.ElasticsearchRestApi.md) +- [ElasticSearch Java API 之 High Level REST Client](docs/07.搜索引擎数据库/01.Elasticsearch/12.ElasticsearchHighLevelRestJavaApi.md) +- [Elasticsearch 运维](docs/07.搜索引擎数据库/01.Elasticsearch/20.Elasticsearch运维.md) ## 资料 📚 @@ -147,7 +169,7 @@ TODO... - [CMU 15445 数据库基础课程](https://15445.courses.cs.cmu.edu/fall2019/schedule.html) - [CMU 15721 数据库高级课程](https://15721.courses.cs.cmu.edu/spring2020/schedule.html) - [检索技术核心 20 讲](https://time.geekbang.org/column/intro/100048401) - 极客教程【进阶】 - - [后端存储实战课](https://time.geekbang.org/column/intro/100046801) - 极客教程【进阶】 + - [后端存储实战课](https://time.geekbang.org/column/intro/100046801) - 极客教程【入门】:讲解存储在电商领域的种种应用和一些基本特性 - **论文** - [Efficiency in the Columbia Database Query Optimizer](https://15721.courses.cs.cmu.edu/spring2018/papers/15-optimizer1/xu-columbia-thesis1998.pdf) - [How Good Are Query Optimizers, Really?](http://www.vldb.org/pvldb/vol9/p204-leis.pdf) @@ -201,8 +223,7 @@ TODO... - [Better Parallel Replication for MySQL](https://medium.com/booking-com-infrastructure/better-parallel-replication-for-mysql-14e2d7857813) - [Evaluating MySQL Parallel Replication Part 2: Slave Group Commit](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-2-slave-group-commit-459026a141d2) - [Evaluating MySQL Parallel Replication Part 3: Benchmarks in Production](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-3-benchmarks-in-production-db5811058d74) - - [Evaluating MySQL Parallel Replication Part 4: More Benchmarks in Production - ](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-more-benchmarks-in-production-49ee255043ab) + - [Evaluating MySQL Parallel Replication Part 4: More Benchmarks in Production](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-more-benchmarks-in-production-49ee255043ab) - [Evaluating MySQL Parallel Replication Part 4, Annex: Under the Hood](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-annex-under-the-hood-eb456cf8b2fb) - Mysql 数据分区 - [StackOverflow: MySQL sharding approaches?](https://stackoverflow.com/questions/5541421/mysql-sharding-approaches) @@ -210,8 +231,7 @@ TODO... - [How to Scale Big Data Applications](https://www.percona.com/sites/default/files/presentations/How to Scale Big Data Applications.pdf) - [MySQL Sharding with ProxySQL](https://www.percona.com/blog/2016/08/30/mysql-sharding-with-proxysql/) - 各公司的 Mysql 数据分区经验分享 - - [MailChimp: Using Shards to Accommodate Millions of Users - ](https://devs.mailchimp.com/blog/using-shards-to-accommodate-millions-of-users/) + - [MailChimp: Using Shards to Accommodate Millions of Users](https://devs.mailchimp.com/blog/using-shards-to-accommodate-millions-of-users/) - [Uber: Code Migration in Production: Rewriting the Sharding Layer of Uber’s Schemaless Datastore](https://eng.uber.com/schemaless-rewrite/) - [Sharding & IDs at Instagram](https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c) - [Airbnb: How We Partitioned Airbnb’s Main Database in Two Weeks](https://medium.com/airbnb-engineering/how-we-partitioned-airbnb-s-main-database-in-two-weeks-55f7e006ff21) diff --git a/assets/redis/Redis.xmind b/assets/redis/Redis.xmind index cd8a682..47d8c00 100644 Binary files a/assets/redis/Redis.xmind and b/assets/redis/Redis.xmind differ diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 692b764..21e02d1 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,114 +1,199 @@ -/** - * @see https://vuepress.vuejs.org/zh/ - */ +const htmlModules = require('./config/htmlModules.js') + module.exports = { port: '4000', - dest: 'dist', - base: '/db-tutorial/', + dest: 'docs/.temp', + base: '/db-tutorial/', // 默认'/'。如果你想将你的网站部署到如 https://foo.github.io/bar/,那么 base 应该被设置成 "/bar/",(否则页面将失去样式等文件) title: 'DB-TUTORIAL', - description: '数据库教程', - head: [['link', { rel: 'icon', href: `/favicon.ico` }]], + description: '☕ db-tutorial 是一个数据库教程。', + theme: 'vdoing', // 使用依赖包主题 + // theme: require.resolve('../../vdoing'), // 使用本地主题 + head: [ + // 注入到页面 中的标签,格式[tagName, { attrName: attrValue }, innerHTML?] + ['link', { rel: 'icon', href: '/img/favicon.ico' }], //favicons,资源放在public文件夹 + ['meta', { name: 'keywords', content: 'vuepress,theme,blog,vdoing' }], + ['meta', { name: 'theme-color', content: '#11a8cd' }], // 移动浏览器主题颜色 + ], markdown: { + // lineNumbers: true, + extractHeaders: ['h2', 'h3', 'h4', 'h5', 'h6'], // 提取标题到侧边栏的级别,默认['h2', 'h3'] externalLinks: { target: '_blank', rel: 'noopener noreferrer', }, }, + // 主题配置 themeConfig: { - logo: 'https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png', - repo: 'dunwu/db-tutorial', - repoLabel: 'Github', - docsDir: 'docs', - docsBranch: 'master', - editLinks: true, - smoothScroll: true, - locales: { - '/': { - label: '简体中文', - selectText: 'Languages', - editLinkText: '帮助我们改善此页面!', - lastUpdated: '上次更新', - nav: [ - { - text: 'SQL', - link: '/sql/', - }, - { - text: 'NOSQL', - link: '/nosql/', - }, - { - text: 'Mysql', - link: '/sql/mysql/', - }, - { - text: 'Redis', - link: '/nosql/redis/', - }, - { - text: 'Elasticsearch', - link: '/nosql/elasticsearch/', - }, - { - text: 'MongoDB', - link: '/nosql/mongodb/', - }, - { - text: '🎯 博客', - link: 'https://github.com/dunwu/blog', - target: '_blank', - rel: '', - }, + nav: [ + { text: '数据库综合', link: '/01.数据库综合/' }, + { text: '数据库中间件', link: '/02.数据库中间件/' }, + { + text: '关系型数据库', + link: '/03.关系型数据库/', + items: [ + { text: '综合', link: '/03.关系型数据库/01.综合/' }, + { text: 'Mysql', link: '/03.关系型数据库/02.Mysql/' }, + { text: '其他', link: '/03.关系型数据库/99.其他/' }, ], - sidebar: 'auto', - sidebarDepth: 2, }, + { + text: '文档数据库', + items: [{ text: 'MongoDB', link: '/04.文档数据库/01.MongoDB/' }], + }, + { + text: 'KV数据库', + items: [{ text: 'Redis', link: '/05.KV数据库/01.Redis/' }], + }, + { + text: '搜索引擎数据库', + items: [ + { text: 'Elasticsearch', link: '/07.搜索引擎数据库/01.Elasticsearch/' }, + { text: 'Elastic技术栈', link: '/07.搜索引擎数据库/02.Elastic/' }, + ], + }, + ], + sidebarDepth: 2, // 侧边栏显示深度,默认1,最大2(显示到h3标题) + logo: 'https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png', // 导航栏logo + repo: 'dunwu/db-tutorial', // 导航栏右侧生成Github链接 + searchMaxSuggestions: 10, // 搜索结果显示最大数 + lastUpdated: '上次更新', // 更新的时间,及前缀文字 string | boolean (取值为git提交时间) + + docsDir: 'docs', // 编辑的文件夹 + editLinks: true, // 编辑链接 + editLinkText: '📝 帮助改善此页面!', + + // 以下配置是Vdoing主题改动的和新增的配置 + sidebar: { mode: 'structuring', collapsable: false }, // 侧边栏 'structuring' | { mode: 'structuring', collapsable: Boolean} | 'auto' | 自定义 温馨提示:目录页数据依赖于结构化的侧边栏数据,如果你不设置为'structuring',将无法使用目录页 + + // sidebarOpen: false, // 初始状态是否打开侧边栏,默认true + updateBar: { + // 最近更新栏 + showToArticle: true, // 显示到文章页底部,默认true + // moreArticle: '/archives' // “更多文章”跳转的页面,默认'/archives' }, + // titleBadge: false, // 文章标题前的图标是否显示,默认true + // titleBadgeIcons: [ // 文章标题前图标的地址,默认主题内置图标 + // '图标地址1', + // '图标地址2' + // ], + // bodyBgImg: [ + // 'https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200507175828.jpeg', + // 'https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200507175845.jpeg', + // 'https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200507175846.jpeg' + // ], // body背景大图,默认无。 单张图片 String || 多张图片 Array, 多张图片时每隔15秒换一张。 + + // categoryText: '随笔', // 碎片化文章(_posts文件夹的文章)预设生成的分类值,默认'随笔' + + // contentBgStyle: 1, + + category: false, // 是否打开分类功能,默认true。 如打开,会做的事情有:1. 自动生成的frontmatter包含分类字段 2.页面中显示与分类相关的信息和模块 3.自动生成分类页面(在@pages文件夹)。如关闭,则反之。 + tag: false, // 是否打开标签功能,默认true。 如打开,会做的事情有:1. 自动生成的frontmatter包含标签字段 2.页面中显示与标签相关的信息和模块 3.自动生成标签页面(在@pages文件夹)。如关闭,则反之。 + archive: true, // 是否打开归档功能,默认true。 如打开,会做的事情有:1.自动生成归档页面(在@pages文件夹)。如关闭,则反之。 + + author: { + // 文章默认的作者信息,可在md文件中单独配置此信息 String | {name: String, href: String} + name: 'dunwu', // 必需 + href: 'https://github.com/dunwu', // 可选的 + }, + social: { + // 社交图标,显示于博主信息栏和页脚栏 + // iconfontCssFile: '//at.alicdn.com/t/font_1678482_u4nrnp8xp6g.css', // 可选,阿里图标库在线css文件地址,对于主题没有的图标可自由添加 + icons: [ + { + iconClass: 'icon-youjian', + title: '发邮件', + link: 'mailto:forbreak@163.com', + }, + { + iconClass: 'icon-github', + title: 'GitHub', + link: 'https://github.com/dunwu', + }, + ], + }, + footer: { + // 页脚信息 + createYear: 2019, // 博客创建年份 + copyrightInfo: '钝悟(dunwu) | CC-BY-SA-4.0', // 博客版权信息,支持a标签 + }, + htmlModules, }, + + // 插件 plugins: [ [ - '@vuepress/active-header-links', + require('./plugins/love-me'), { - sidebarLinkSelector: '.sidebar-link', - headerAnchorSelector: '.header-anchor', + // 鼠标点击爱心特效 + color: '#11a8cd', // 爱心颜色,默认随机色 + excludeClassName: 'theme-vdoing-content', // 要排除元素的class, 默认空'' }, ], - ['@vuepress/back-to-top', true], + + ['fulltext-search'], // 全文搜索 + + // ['thirdparty-search', { // 可以添加第三方搜索链接的搜索框(原官方搜索框的参数仍可用) + // thirdparty: [ // 可选,默认 [] + // { + // title: '在GitHub中搜索', + // frontUrl: 'https://github.com/search?q=', // 搜索链接的前面部分 + // behindUrl: '' // 搜索链接的后面部分,可选,默认 '' + // }, + // { + // title: '在npm中搜索', + // frontUrl: 'https://www.npmjs.com/search?q=', + // }, + // { + // title: '在Bing中搜索', + // frontUrl: 'https://cn.bing.com/search?q=' + // } + // ] + // }], + [ - '@vuepress/pwa', + 'one-click-copy', { - serviceWorker: true, - updatePopup: true, + // 代码块复制按钮 + copySelector: ['div[class*="language-"] pre', 'div[class*="aside-code"] aside'], // String or Array + copyMessage: '复制成功', // default is 'Copy successfully and then paste it for use.' + duration: 1000, // prompt message display time. + showInMobile: false, // whether to display on the mobile side, default: false. }, ], [ - '@vuepress/last-updated', + 'demo-block', { - transformer: (timestamp, lang) => { - // 不要忘了安装 moment - const moment = require('moment') - moment.locale(lang) - return moment(timestamp).fromNow() + // demo演示模块 https://github.com/xiguaxigua/vuepress-plugin-demo-block + settings: { + // jsLib: ['http://xxx'], // 在线示例(jsfiddle, codepen)中的js依赖 + // cssLib: ['http://xxx'], // 在线示例中的css依赖 + // vue: 'https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js', // 在线示例中的vue依赖 + jsfiddle: false, // 是否显示 jsfiddle 链接 + codepen: true, // 是否显示 codepen 链接 + horizontal: false, // 是否展示为横向样式 }, }, ], - ['@vuepress/medium-zoom', true], [ - 'container', + 'vuepress-plugin-zooming', // 放大图片 { - type: 'vue', - before: '
',
-        after: '
', + selector: '.theme-vdoing-content img:not(.no-zoom)', + options: { + bgColor: 'rgba(0,0,0,0.6)', + }, }, ], [ - 'container', + '@vuepress/last-updated', // "上次更新"时间格式 { - type: 'upgrade', - before: (info) => ``, - after: '', + transformer: (timestamp, lang) => { + const dayjs = require('dayjs') // https://day.js.org/ + return dayjs(timestamp).format('YYYY/MM/DD, HH:mm:ss') + }, }, ], - ['flowchart'], ], + + // 监听文件变化并重新构建 + extraWatchFiles: ['.vuepress/config.js', '.vuepress/config/htmlModules.js'], } diff --git a/docs/.vuepress/config/baiduCode.js b/docs/.vuepress/config/baiduCode.js new file mode 100644 index 0000000..9dc5fc1 --- /dev/null +++ b/docs/.vuepress/config/baiduCode.js @@ -0,0 +1 @@ +module.exports = ''; diff --git a/docs/.vuepress/config/htmlModules.js b/docs/.vuepress/config/htmlModules.js new file mode 100644 index 0000000..6ba3782 --- /dev/null +++ b/docs/.vuepress/config/htmlModules.js @@ -0,0 +1,52 @@ +/** 插入自定义html模块 (可用于插入广告模块等) + * { + * homeSidebarB: htmlString, 首页侧边栏底部 + * + * sidebarT: htmlString, 全局左侧边栏顶部 + * sidebarB: htmlString, 全局左侧边栏底部 + * + * pageT: htmlString, 全局页面顶部 + * pageB: htmlString, 全局页面底部 + * pageTshowMode: string, 页面顶部-显示方式:未配置默认全局;'article' => 仅文章页①; 'custom' => 仅自定义页① + * pageBshowMode: string, 页面底部-显示方式:未配置默认全局;'article' => 仅文章页①; 'custom' => 仅自定义页① + * + * windowLB: htmlString, 全局左下角② + * windowRB: htmlString, 全局右下角② + * } + * + * ①注:在.md文件front matter配置`article: false`的页面是自定义页,未配置的默认是文章页(首页除外)。 + * ②注:windowLB 和 windowRB:1.展示区块最大宽高200px*400px。2.请给自定义元素定一个不超过200px*400px的宽高。3.在屏幕宽度小于960px时无论如何都不会显示。 + */ + +module.exports = { + // 万维广告 + pageB: ` +
+ + `, + windowRB: ` +
+ + `, +} + +// module.exports = { +// homeSidebarB: `
自定义模块测试
`, +// sidebarT: `
自定义模块测试
`, +// sidebarB: `
自定义模块测试
`, +// pageT: `
自定义模块测试
`, +// pageB: `
自定义模块测试
`, +// windowLB: `
自定义模块测试
`, +// windowRB: `
自定义模块测试
`, +// } diff --git a/docs/.vuepress/enhanceApp.js b/docs/.vuepress/enhanceApp.js index 7b3605f..490ad93 100644 --- a/docs/.vuepress/enhanceApp.js +++ b/docs/.vuepress/enhanceApp.js @@ -1,7 +1,55 @@ -export default ({ Vue, isServer }) => { +/** + * to主题使用者:你可以去掉本文件的所有代码 + */ +export default ({ + Vue, // VuePress 正在使用的 Vue 构造函数 + options, // 附加到根实例的一些选项 + router, // 当前应用的路由实例 + siteData, // 站点元数据 + isServer, // 当前应用配置是处于 服务端渲染 还是 客户端 +}) => { + // 用于监控在路由变化时检查广告拦截器 (to主题使用者:你可以去掉本文件的所有代码) if (!isServer) { - import('vue-toasted' /* webpackChunkName: "notification" */).then(module => { - Vue.use(module.default) + router.afterEach(() => { + //check if wwads' fire function was blocked after document is ready with 3s timeout (waiting the ad loading) + docReady(function () { + // setTimeout(function () { + // if (window._AdBlockInit === undefined) { + // ABDetected() + // } + // }, 3000) + }) + + // 删除事件改为隐藏事件 + setTimeout(() => { + const pageB = document.querySelector('.pageB') + if (!pageB) return + const btnEl = pageB.querySelector('.wwads-hide') + if (btnEl) { + btnEl.onclick = () => { + pageB.style.display = 'none' + } + } + // 显示广告模块 + pageB.style.display = 'flex' + }, 0) }) } } + +function ABDetected() { + const h = + "
为了本站的长期运营,请将我们的网站加入广告拦截器的白名单,感谢您的支持!如何添加白名单?万维广告
" + const wwadsEl = document.getElementsByClassName('wwads-cn') + const wwadsContentEl = document.querySelector('.wwads-content') + if (wwadsEl[0] && !wwadsContentEl) { + wwadsEl[0].innerHTML = h + } +} + +//check document ready +function docReady(t) { + 'complete' === document.readyState || 'interactive' === document.readyState + ? setTimeout(t, 1) + : document.addEventListener('DOMContentLoaded', t) +} diff --git a/docs/.vuepress/plugins/love-me/index.js b/docs/.vuepress/plugins/love-me/index.js new file mode 100644 index 0000000..67f5ea9 --- /dev/null +++ b/docs/.vuepress/plugins/love-me/index.js @@ -0,0 +1,12 @@ +const path = require('path') +const LoveMyPlugin = (options = {}) => ({ + define() { + const COLOR = + options.color || + 'rgb(' + ~~(255 * Math.random()) + ',' + ~~(255 * Math.random()) + ',' + ~~(255 * Math.random()) + ')' + const EXCLUDECLASS = options.excludeClassName || '' + return { COLOR, EXCLUDECLASS } + }, + enhanceAppFiles: [path.resolve(__dirname, 'love-me.js')], +}) +module.exports = LoveMyPlugin diff --git a/docs/.vuepress/plugins/love-me/love-me.js b/docs/.vuepress/plugins/love-me/love-me.js new file mode 100644 index 0000000..f93855e --- /dev/null +++ b/docs/.vuepress/plugins/love-me/love-me.js @@ -0,0 +1,62 @@ +export default () => { + if (typeof window !== "undefined") { + (function(e, t, a) { + function r() { + for (var e = 0; e < s.length; e++) s[e].alpha <= 0 ? (t.body.removeChild(s[e].el), s.splice(e, 1)) : (s[e].y--, s[e].scale += .004, s[e].alpha -= .013, s[e].el.style.cssText = "left:" + s[e].x + "px;top:" + s[e].y + "px;opacity:" + s[e].alpha + ";transform:scale(" + s[e].scale + "," + s[e].scale + ") rotate(45deg);background:" + s[e].color + ";z-index:99999"); + requestAnimationFrame(r) + } + function n() { + var t = "function" == typeof e.onclick && e.onclick; + + e.onclick = function(e) { + // 过滤指定元素 + let mark = true; + EXCLUDECLASS && e.path && e.path.forEach((item) =>{ + if(item.nodeType === 1) { + typeof item.className === 'string' && item.className.indexOf(EXCLUDECLASS) > -1 ? mark = false : '' + } + }) + + if(mark) { + t && t(), + o(e) + } + } + } + function o(e) { + var a = t.createElement("div"); + a.className = "heart", + s.push({ + el: a, + x: e.clientX - 5, + y: e.clientY - 5, + scale: 1, + alpha: 1, + color: COLOR + }), + t.body.appendChild(a) + } + function i(e) { + var a = t.createElement("style"); + a.type = "text/css"; + try { + a.appendChild(t.createTextNode(e)) + } catch(t) { + a.styleSheet.cssText = e + } + t.getElementsByTagName("head")[0].appendChild(a) + } + // function c() { + // return "rgb(" + ~~ (255 * Math.random()) + "," + ~~ (255 * Math.random()) + "," + ~~ (255 * Math.random()) + ")" + // } + var s = []; + e.requestAnimationFrame = e.requestAnimationFrame || e.webkitRequestAnimationFrame || e.mozRequestAnimationFrame || e.oRequestAnimationFrame || e.msRequestAnimationFrame || + function(e) { + setTimeout(e, 1e3 / 60) + }, + i(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: fixed;}.heart:after{top: -5px;}.heart:before{left: -5px;}"), + n(), + r() + })(window, document) + } +} \ No newline at end of file diff --git a/docs/.vuepress/public/img/EB-logo.png b/docs/.vuepress/public/img/EB-logo.png new file mode 100644 index 0000000..8e1d567 Binary files /dev/null and b/docs/.vuepress/public/img/EB-logo.png differ diff --git a/docs/.vuepress/public/img/bg.gif b/docs/.vuepress/public/img/bg.gif new file mode 100644 index 0000000..d4bf3c4 Binary files /dev/null and b/docs/.vuepress/public/img/bg.gif differ diff --git a/docs/.vuepress/public/img/bg.jpeg b/docs/.vuepress/public/img/bg.jpeg new file mode 100644 index 0000000..85e53e7 Binary files /dev/null and b/docs/.vuepress/public/img/bg.jpeg differ diff --git a/docs/.vuepress/public/img/bg.jpg b/docs/.vuepress/public/img/bg.jpg new file mode 100644 index 0000000..f093e79 Binary files /dev/null and b/docs/.vuepress/public/img/bg.jpg differ diff --git a/docs/.vuepress/public/img/dunwu-logo.png b/docs/.vuepress/public/img/dunwu-logo.png new file mode 100644 index 0000000..61570e2 Binary files /dev/null and b/docs/.vuepress/public/img/dunwu-logo.png differ diff --git a/docs/.vuepress/public/img/favicon.ico b/docs/.vuepress/public/img/favicon.ico new file mode 100644 index 0000000..51e9bfa Binary files /dev/null and b/docs/.vuepress/public/img/favicon.ico differ diff --git a/docs/.vuepress/public/img/gif/猫1.gif b/docs/.vuepress/public/img/gif/猫1.gif new file mode 100644 index 0000000..e84d8a2 Binary files /dev/null and b/docs/.vuepress/public/img/gif/猫1.gif differ diff --git a/docs/.vuepress/public/img/gif/猫2.gif b/docs/.vuepress/public/img/gif/猫2.gif new file mode 100644 index 0000000..2811459 Binary files /dev/null and b/docs/.vuepress/public/img/gif/猫2.gif differ diff --git a/docs/.vuepress/public/img/gif/猫3.gif b/docs/.vuepress/public/img/gif/猫3.gif new file mode 100644 index 0000000..894372d Binary files /dev/null and b/docs/.vuepress/public/img/gif/猫3.gif differ diff --git a/docs/.vuepress/public/img/gif/猫4.gif b/docs/.vuepress/public/img/gif/猫4.gif new file mode 100644 index 0000000..7b99130 Binary files /dev/null and b/docs/.vuepress/public/img/gif/猫4.gif differ diff --git a/docs/.vuepress/public/img/more.png b/docs/.vuepress/public/img/more.png new file mode 100644 index 0000000..830613b Binary files /dev/null and b/docs/.vuepress/public/img/more.png differ diff --git a/docs/.vuepress/public/img/other.png b/docs/.vuepress/public/img/other.png new file mode 100644 index 0000000..87f8098 Binary files /dev/null and b/docs/.vuepress/public/img/other.png differ diff --git a/docs/.vuepress/public/img/panda-waving.png b/docs/.vuepress/public/img/panda-waving.png new file mode 100644 index 0000000..20246c6 Binary files /dev/null and b/docs/.vuepress/public/img/panda-waving.png differ diff --git a/docs/.vuepress/public/img/png/思维导图.png b/docs/.vuepress/public/img/png/思维导图.png new file mode 100644 index 0000000..819ef70 Binary files /dev/null and b/docs/.vuepress/public/img/png/思维导图.png differ diff --git a/docs/.vuepress/public/img/png/数据库.png b/docs/.vuepress/public/img/png/数据库.png new file mode 100644 index 0000000..4d13c3f Binary files /dev/null and b/docs/.vuepress/public/img/png/数据库.png differ diff --git a/docs/.vuepress/public/img/png/数据结构.png b/docs/.vuepress/public/img/png/数据结构.png new file mode 100644 index 0000000..1bafe96 Binary files /dev/null and b/docs/.vuepress/public/img/png/数据结构.png differ diff --git a/docs/.vuepress/public/img/png/服务器.png b/docs/.vuepress/public/img/png/服务器.png new file mode 100644 index 0000000..4127eb5 Binary files /dev/null and b/docs/.vuepress/public/img/png/服务器.png differ diff --git a/docs/.vuepress/public/img/png/机器学习.png b/docs/.vuepress/public/img/png/机器学习.png new file mode 100644 index 0000000..081c2b8 Binary files /dev/null and b/docs/.vuepress/public/img/png/机器学习.png differ diff --git a/docs/.vuepress/public/img/png/算法.png b/docs/.vuepress/public/img/png/算法.png new file mode 100644 index 0000000..92fef3f Binary files /dev/null and b/docs/.vuepress/public/img/png/算法.png differ diff --git a/docs/.vuepress/public/img/png/系统.png b/docs/.vuepress/public/img/png/系统.png new file mode 100644 index 0000000..87f0de0 Binary files /dev/null and b/docs/.vuepress/public/img/png/系统.png differ diff --git a/docs/.vuepress/public/img/png/系统分析.png b/docs/.vuepress/public/img/png/系统分析.png new file mode 100644 index 0000000..208e259 Binary files /dev/null and b/docs/.vuepress/public/img/png/系统分析.png differ diff --git a/docs/.vuepress/public/img/png/编程.png b/docs/.vuepress/public/img/png/编程.png new file mode 100644 index 0000000..a8bca76 Binary files /dev/null and b/docs/.vuepress/public/img/png/编程.png differ diff --git a/docs/.vuepress/public/img/png/网络技术.png b/docs/.vuepress/public/img/png/网络技术.png new file mode 100644 index 0000000..f81edb7 Binary files /dev/null and b/docs/.vuepress/public/img/png/网络技术.png differ diff --git a/docs/.vuepress/public/img/png/计算机网络.png b/docs/.vuepress/public/img/png/计算机网络.png new file mode 100644 index 0000000..63a1819 Binary files /dev/null and b/docs/.vuepress/public/img/png/计算机网络.png differ diff --git a/docs/.vuepress/public/img/png/软件开发.png b/docs/.vuepress/public/img/png/软件开发.png new file mode 100644 index 0000000..72c5e85 Binary files /dev/null and b/docs/.vuepress/public/img/png/软件开发.png differ diff --git a/docs/.vuepress/public/img/png/面向对象.png b/docs/.vuepress/public/img/png/面向对象.png new file mode 100644 index 0000000..cd13fa3 Binary files /dev/null and b/docs/.vuepress/public/img/png/面向对象.png differ diff --git a/docs/.vuepress/public/img/png/项目管理.png b/docs/.vuepress/public/img/png/项目管理.png new file mode 100644 index 0000000..0467abd Binary files /dev/null and b/docs/.vuepress/public/img/png/项目管理.png differ diff --git a/docs/.vuepress/public/img/python.png b/docs/.vuepress/public/img/python.png new file mode 100644 index 0000000..c3ddebe Binary files /dev/null and b/docs/.vuepress/public/img/python.png differ diff --git a/docs/.vuepress/public/img/ui.png b/docs/.vuepress/public/img/ui.png new file mode 100644 index 0000000..617c56d Binary files /dev/null and b/docs/.vuepress/public/img/ui.png differ diff --git a/docs/.vuepress/public/img/web.png b/docs/.vuepress/public/img/web.png new file mode 100644 index 0000000..0a6e27c Binary files /dev/null and b/docs/.vuepress/public/img/web.png differ diff --git a/docs/.vuepress/public/markmap/01.html b/docs/.vuepress/public/markmap/01.html new file mode 100644 index 0000000..c55f2d0 --- /dev/null +++ b/docs/.vuepress/public/markmap/01.html @@ -0,0 +1,25 @@ + + + + + + +Markmap + + + + + + + + diff --git a/docs/.vuepress/styles/index.styl b/docs/.vuepress/styles/index.styl new file mode 100644 index 0000000..3113dd6 --- /dev/null +++ b/docs/.vuepress/styles/index.styl @@ -0,0 +1,93 @@ +.home-wrapper .banner .banner-conent .hero h1{ + font-size 2.8rem!important +} +// 文档中适配 +table + width auto +.page >*:not(.footer),.card-box + box-shadow: none!important + +.page + @media (min-width $contentWidth + 80) + padding-top $navbarHeight!important +.home-wrapper .banner .banner-conent + padding 0 2.9rem + box-sizing border-box +.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a + h2 + margin-top 2rem + font-size 1.2rem!important + p + padding 0 1rem + +// 评论区颜色重置 +.gt-container + .gt-ico-tip + &::after + content: '。( Win + . ) or ( ⌃ + ⌘ + ␣ ) open Emoji' + color: #999 + .gt-meta + border-color var(--borderColor)!important + .gt-comments-null + color var(--textColor) + opacity .5 + .gt-header-textarea + color var(--textColor) + background rgba(180,180,180,0.1)!important + .gt-btn + border-color $accentColor!important + background-color $accentColor!important + .gt-btn-preview + background-color rgba(255,255,255,0)!important + color $accentColor!important + a + color $accentColor!important + .gt-svg svg + fill $accentColor!important + .gt-comment-content,.gt-comment-admin .gt-comment-content + background-color rgba(150,150,150,0.1)!important + &:hover + box-shadow 0 0 25px rgba(150,150,150,.5)!important + .gt-comment-body + color var(--textColor)!important + + +// qq徽章 +.qq + position: relative; +.qq::after + content: "可撩"; + background: $accentColor; + color:#fff; + padding: 0 5px; + border-radius: 10px; + font-size:12px; + position: absolute; + top: -4px; + right: -35px; + transform:scale(0.85); + +// demo模块图标颜色 +body .vuepress-plugin-demo-block__wrapper + &,.vuepress-plugin-demo-block__display + border-color rgba(160,160,160,.3) + .vuepress-plugin-demo-block__footer:hover + .vuepress-plugin-demo-block__expand::before + border-top-color: $accentColor !important; + border-bottom-color: $accentColor !important; + svg + fill: $accentColor !important; + + +// 全文搜索框 +.suggestions + overflow: auto + max-height: calc(100vh - 6rem) + @media (max-width: 719px) { + width: 90vw; + min-width: 90vw!important; + margin-right: -20px; + } + .highlight + color: $accentColor + font-weight: bold diff --git a/docs/.vuepress/styles/palette.styl b/docs/.vuepress/styles/palette.styl new file mode 100644 index 0000000..d98e697 --- /dev/null +++ b/docs/.vuepress/styles/palette.styl @@ -0,0 +1,62 @@ + +// 原主题变量已弃用,以下是vdoing使用的变量,你可以在这个文件内修改它们。 + +//***vdoing主题-变量***// + +// // 颜色 + +// $bannerTextColor = #fff // 首页banner区(博客标题)文本颜色 +// $accentColor = #11A8CD +// $arrowBgColor = #ccc +// $badgeTipColor = #42b983 +// $badgeWarningColor = darken(#ffe564, 35%) +// $badgeErrorColor = #DA5961 + +// // 布局 +// $navbarHeight = 3.6rem +// $sidebarWidth = 18rem +// $contentWidth = 860px +// $homePageWidth = 1100px +// $rightMenuWidth = 230px // 右侧菜单 + +// // 代码块 +// $lineNumbersWrapperWidth = 2.5rem + +// 浅色模式 +.theme-mode-light + --bodyBg: rgba(255,255,255,1) + --mainBg: rgba(255,255,255,1) + --sidebarBg: rgba(255,255,255,.8) + --blurBg: rgba(255,255,255,.9) + --textColor: #004050 + --textLightenColor: #0085AD + --borderColor: rgba(0,0,0,.15) + --codeBg: #f6f6f6 + --codeColor: #525252 + codeThemeLight() + +// 深色模式 +.theme-mode-dark + --bodyBg: rgba(30,30,34,1) + --mainBg: rgba(30,30,34,1) + --sidebarBg: rgba(30,30,34,.8) + --blurBg: rgba(30,30,34,.8) + --textColor: rgb(140,140,150) + --textLightenColor: #0085AD + --borderColor: #2C2C3A + --codeBg: #252526 + --codeColor: #fff + codeThemeDark() + +// 阅读模式 +.theme-mode-read + --bodyBg: rgba(245,245,213,1) + --mainBg: rgba(245,245,213,1) + --sidebarBg: rgba(245,245,213,.8) + --blurBg: rgba(245,245,213,.9) + --textColor: #004050 + --textLightenColor: #0085AD + --borderColor: rgba(0,0,0,.15) + --codeBg: #282c34 + --codeColor: #fff + codeThemeDark() diff --git a/docs/nosql/nosql-selection.md b/docs/01.数据库综合/01.Nosql技术选型.md similarity index 99% rename from docs/nosql/nosql-selection.md rename to docs/01.数据库综合/01.Nosql技术选型.md index c5788c6..6519881 100644 --- a/docs/nosql/nosql-selection.md +++ b/docs/01.数据库综合/01.Nosql技术选型.md @@ -1,9 +1,13 @@ +--- +title: Nosql技术选型 +date: 2020-08-26 20:30:39 +permalink: /pages/75af9b/ +--- + # Nosql 技术选型 ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200209020702.png) -[TOC] - ## 一、Nosql 简介 传统的关系型数据库存在以下缺点: @@ -367,7 +371,7 @@ Neo4j 中,存储节点时使用了”index-free adjacency”,即每个节点 - **大流量系统** - 如电商单品页,后台考虑选关系型数据库,前台考虑选内存型数据库。 - **日志型系统** - 原始数据考虑选列式数据库,日志搜索考虑选搜索引擎。 - **搜索型系统** - 例如站内搜索,非通用搜索,如商品搜索,后台考虑选关系型数据库,前台考虑选搜索引擎。 -- **事务型系统** - 如库存,交易,记账,考虑选关系型数据库+K-V数据库(作为缓存)+分布式事务。 +- **事务型系统** - 如库存,交易,记账,考虑选关系型数据库+K-V 数据库(作为缓存)+分布式事务。 - **离线计算** - 如大量数据分析,考虑选列式数据库或关系型数据。 - **实时计算** - 如实时监控,可以考虑选内存型数据库或者列式数据库。 diff --git a/docs/composite/数据结构与数据库索引.md b/docs/01.数据库综合/02.数据结构与数据库索引.md similarity index 99% rename from docs/composite/数据结构与数据库索引.md rename to docs/01.数据库综合/02.数据结构与数据库索引.md index 9de6091..18ea6a6 100644 --- a/docs/composite/数据结构与数据库索引.md +++ b/docs/01.数据库综合/02.数据结构与数据库索引.md @@ -1,3 +1,9 @@ +--- +title: 数据结构与数据库索引 +date: 2022-04-01 20:08:41 +permalink: /pages/875f28/ +--- + # 数据结构与数据库索引 > 关键词:链表、数组、散列表、红黑树、B+ 树、LSM 树、跳表 @@ -68,7 +74,7 @@ ## B-Tree 索引 -通常我们所说的 B 树索引是指 `B-Tree` 索引,它是目前关系型数据库中查找数据最为常用和有效的索引,大多数存储引擎都支持这种索引。使用 `B-Tree` 这个术语,是因为 MySQL 在 `CREATE TABLE` 或其它语句中使用了这个关键字,但实际上不同的存储引擎可能使用不同的数据结构,比如 InnoDB 使用的是 `B+Tree `索引;而 MyISAM 使用的是 `B-Tree `索引。 +通常我们所说的 B 树索引是指 `B-Tree` 索引,它是目前关系型数据库中查找数据最为常用和有效的索引,大多数存储引擎都支持这种索引。使用 `B-Tree` 这个术语,是因为 MySQL 在 `CREATE TABLE` 或其它语句中使用了这个关键字,但实际上不同的存储引擎可能使用不同的数据结构,比如 InnoDB 使用的是 `B+Tree `索引;而 MyISAM 使用的是 `B-Tree `索引。 `B-Tree` 索引中的 B 是指 `balance`,意为平衡。需要注意的是,`B-Tree` 索引并不能找到一个给定键值的具体行,它找到的只是被查找数据行所在的页,接着数据库会把页读入到内存,再在内存中进行查找,最后得到要查找的数据。 @@ -116,7 +122,7 @@ B+ 树索引适用于**全键值查找**、**键值范围查找**和**键前缀 由于没有其他索引,所以也就不用考虑其他索引的叶子节点大小的问题。这时候我们就要优先考虑上一段提到的“尽量使用主键查询”原则,直接将这个索引设置为主键,可以避免每次查询需要搜索两棵树。 ------- +--- 内存是半导体元件。对于内存而言,只要给出了内存地址,我们就可以直接访问该地址取出数据。这个过程具有高效的随机访问特性,因此内存也叫随机访问存储器(Random Access Memory,即 RAM)。内存的访问速度很快,但是价格相对较昂贵,因此一般的计算机内存空间都相对较小。 diff --git a/docs/01.数据库综合/README.md b/docs/01.数据库综合/README.md new file mode 100644 index 0000000..7f34d15 --- /dev/null +++ b/docs/01.数据库综合/README.md @@ -0,0 +1,36 @@ +--- +title: 数据库综合 +date: 2022-04-11 11:08:47 +permalink: /pages/84f411/ +--- + +# 数据库综合 + +## 📖 内容 + +### 分布式存储原理 + +- [分布式简介](https://dunwu.github.io/design/distributed/分布式简介.html) +- [分布式基础理论](https://dunwu.github.io/design/distributed/分布式理论.html) - 关键词:`拜占庭将军`、`CAP`、`BASE` +- [分布式算法 Paxos](https://dunwu.github.io/design/distributed/分布式算法Paxos.html) - 关键词:`共识性算法` +- [分布式算法 Raft](https://dunwu.github.io/design/distributed/分布式算法Raft.html) - 关键词:`共识性算法` +- [负载均衡](https://dunwu.github.io/design/distributed/负载均衡.html) - 关键词:`轮询`、`随机`、`最少连接`、`源地址哈希`、`一致性哈希`、`虚拟 hash 槽` +- [消息队列](https://dunwu.github.io/design/distributed/消息队列.html) - 关键词:`重复消费`、`消息丢失`、`消息顺序性`、`消息积压` +- [分布式存储](https://dunwu.github.io/design/distributed/分布式存储.html) - 关键词:`读写分离`、`分库分表`、`迁移`、`扩容` +- [分布式缓存](https://dunwu.github.io/design/distributed/分布式缓存.html) - 关键词:`进程内缓存`、`分布式缓存`、`缓存雪崩`、`缓存穿透`、`缓存击穿`、`缓存更新`、`缓存预热`、`缓存降级` +- [分布式锁](https://dunwu.github.io/design/distributed/分布式锁.html) - 关键词:`数据库`、`Redis`、`ZooKeeper`、`互斥`、`可重入`、`死锁`、`容错`、`自旋尝试` +- [分布式 ID](https://dunwu.github.io/design/distributed/分布式ID.html) - 关键词:`UUID`、`自增序列`、`雪花算法`、`Leaf` +- [分布式事务](https://dunwu.github.io/design/distributed/分布式事务.html) - 关键词:`2PC`、`3PC`、`TCC`、`本地消息表`、`MQ 消息`、`SAGA` +- [分布式会话](https://dunwu.github.io/design/distributed/分布式会话.html) - 关键词:`粘性 Session`、`Session 复制共享`、`基于缓存的 session 共享` +- [流量控制](https://dunwu.github.io/design/distributed/流量控制.html) - 关键词:`计数器法`、`时间窗口法`、`令牌桶法`、`漏桶法` + +### 其他 + +- [Nosql 技术选型](01.Nosql技术选型.md) +- [数据结构与数据库索引](02.数据结构与数据库索引.md) + +## 📚 资料 + +## 🚪 传送 + +◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog) ◾ diff --git a/docs/middleware/shardingsphere.md b/docs/02.数据库中间件/01.Shardingsphere/01.ShardingSphere简介.md similarity index 88% rename from docs/middleware/shardingsphere.md rename to docs/02.数据库中间件/01.Shardingsphere/01.ShardingSphere简介.md index fec0e7e..5d1e77c 100644 --- a/docs/middleware/shardingsphere.md +++ b/docs/02.数据库中间件/01.Shardingsphere/01.ShardingSphere简介.md @@ -1,4 +1,10 @@ -# ShardingSphere +--- +title: ShardingSphere 简介 +date: 2020-08-26 20:30:39 +permalink: /pages/283bf8/ +--- + +# ShardingSphere 简介 ## 简介 @@ -6,7 +12,7 @@ ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这 3 款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151613.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151613.png) #### ShardingSphere-JDBC @@ -16,7 +22,7 @@ ShardingSphere 是一套开源的分布式数据库中间件解决方案组成 - 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。 - 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151213.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151213.png) #### Sharding-Proxy @@ -25,7 +31,7 @@ ShardingSphere 是一套开源的分布式数据库中间件解决方案组成 - 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用。 - 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151434.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151434.png) #### Sharding-Sidecar(TODO) @@ -33,7 +39,7 @@ ShardingSphere 是一套开源的分布式数据库中间件解决方案组成 Database Mesh 的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互进行有效地梳理。 使用 Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151557.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151557.png) | _Sharding-JDBC_ | _Sharding-Proxy_ | _Sharding-Sidecar_ | | | :-------------- | :--------------- | :----------------- | ------ | @@ -50,7 +56,7 @@ ShardingSphere-JDBC 采用无中心化架构,适用于 Java 开发的高性能 Apache ShardingSphere 是多接入端共同组成的生态圈。 通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合与当前业务的最佳系统架构。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151658.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151658.png) ### 功能列表 diff --git a/docs/middleware/shardingsphere-jdbc.md b/docs/02.数据库中间件/01.Shardingsphere/02.ShardingSphereJdbc.md similarity index 97% rename from docs/middleware/shardingsphere-jdbc.md rename to docs/02.数据库中间件/01.Shardingsphere/02.ShardingSphereJdbc.md index 1470280..05ae235 100644 --- a/docs/middleware/shardingsphere-jdbc.md +++ b/docs/02.数据库中间件/01.Shardingsphere/02.ShardingSphereJdbc.md @@ -1,4 +1,10 @@ -# shardingsphere-jdbc +--- +title: ShardingSphere Jdbc +date: 2020-10-08 15:20:54 +permalink: /pages/77e49a/ +--- + +# ShardingSphere Jdbc ## 简介 @@ -8,7 +14,7 @@ shardingsphere-jdbc 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供 - 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。 - 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151213.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151213.png) ## 快速入门 @@ -74,7 +80,7 @@ DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(dataSou ShardingSphere 的 3 个产品的数据分片主要流程是完全一致的。 核心由 `SQL 解析 => 执行器优化 => SQL 路由 => SQL 改写 => SQL 执行 => 结果归并`的流程组成。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008153551.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008153551.png) - QL 解析:分为词法解析和语法解析。 先通过词法解析器将 SQL 拆分为一个个不可再分的单词。再使用语法解析器对 SQL 进行理解,并最终提炼出解析上下文。 解析上下文包括表、选择项、排序项、分组项、聚合函数、分页信息、查询条件以及可能需要修改的占位符的标记。 - 执行器优化:合并和优化分片条件,如 OR 等。 diff --git a/docs/middleware/flyway.md b/docs/02.数据库中间件/02.Flyway.md similarity index 99% rename from docs/middleware/flyway.md rename to docs/02.数据库中间件/02.Flyway.md index e1555c5..aea53a7 100644 --- a/docs/middleware/flyway.md +++ b/docs/02.数据库中间件/02.Flyway.md @@ -1,8 +1,12 @@ -# Flyway +--- +title: 版本管理中间件 Flyway +date: 2020-08-26 20:30:39 +permalink: /pages/6adeea/ +--- + +# 版本管理中间件 Flyway > Flyway 是一个数据迁移工具。 -> -> 关键词: ## 简介 diff --git a/docs/02.数据库中间件/README.md b/docs/02.数据库中间件/README.md new file mode 100644 index 0000000..5f77ae3 --- /dev/null +++ b/docs/02.数据库中间件/README.md @@ -0,0 +1,19 @@ +--- +title: 数据库中间件 +date: 2022-04-11 11:31:18 +permalink: /pages/057a1d/ +--- + +# 数据库中间件 + +## 📖 内容 + +- [ShardingSphere 简介](01.Shardingsphere/01.ShardingSphere简介.md) +- [ShardingSphere Jdbc](01.Shardingsphere/02.ShardingSphereJdbc.md) +- [版本管理中间件 Flyway](02.Flyway.md) + +## 📚 资料 + +## 🚪 传送 + +◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog) ◾ diff --git a/docs/sql/common/sql-interview.md b/docs/03.关系型数据库/01.综合/01.关系型数据库面试.md similarity index 99% rename from docs/sql/common/sql-interview.md rename to docs/03.关系型数据库/01.综合/01.关系型数据库面试.md index af562b1..3bd8dcd 100644 --- a/docs/sql/common/sql-interview.md +++ b/docs/03.关系型数据库/01.综合/01.关系型数据库面试.md @@ -1,4 +1,10 @@ -# 关系型数据库面试题 +--- +title: 关系型数据库面试 +date: 2020-08-26 20:30:39 +permalink: /pages/2696ef/ +--- + +# 关系型数据库面试 ## 一、索引和约束 @@ -869,7 +875,6 @@ SQL 关键字尽量大写,如:Oracle 默认会将 SQL 语句中的关键字 - #### 第一范式 (1NF) 属性不可分。 diff --git a/docs/sql/common/sql-cheat-sheet.md b/docs/03.关系型数据库/01.综合/02.SqlCheatSheet.md similarity index 99% rename from docs/sql/common/sql-cheat-sheet.md rename to docs/03.关系型数据库/01.综合/02.SqlCheatSheet.md index 85a89c6..e80dccc 100644 --- a/docs/sql/common/sql-cheat-sheet.md +++ b/docs/03.关系型数据库/01.综合/02.SqlCheatSheet.md @@ -1,3 +1,8 @@ +--- +title: sql-cheat-sheet +date: 2020-08-26 20:30:39 +permalink: /pages/91ff1a/ +--- # SQL Cheat Sheet > 本文针对关系型数据库的基本语法。限于篇幅,本文侧重说明用法,不会展开讲解特性、原理。 diff --git a/docs/sql/common/sql-advanced.md b/docs/03.关系型数据库/01.综合/03.扩展SQL.md similarity index 61% rename from docs/sql/common/sql-advanced.md rename to docs/03.关系型数据库/01.综合/03.扩展SQL.md index ed9abfc..6650192 100644 --- a/docs/sql/common/sql-advanced.md +++ b/docs/03.关系型数据库/01.综合/03.扩展SQL.md @@ -1,6 +1,12 @@ -# 高级 SQL +--- +title: 扩展 SQL +date: 2020-10-09 09:31:05 +permalink: /pages/34648b/ +--- -> 不同于 [SQL Cheat Sheet](sql-cheat-sheet.md) 中的一般语法,本文主要整理收集一些高级但是很有用的 SQL +# 扩展 SQL + +> 不同于 [SQL Cheat Sheet](02.SqlCheatSheet.md) 中的一般语法,本文主要整理收集一些高级但是很有用的 SQL ## 数据库 diff --git a/docs/sql/common/README.md b/docs/03.关系型数据库/01.综合/README.md similarity index 83% rename from docs/sql/common/README.md rename to docs/03.关系型数据库/01.综合/README.md index 1c8df26..be4289b 100644 --- a/docs/sql/common/README.md +++ b/docs/03.关系型数据库/01.综合/README.md @@ -1,10 +1,16 @@ -# 关系型数据库共性知识 +--- +title: 关系型数据库综合知识 +date: 2020-08-26 20:30:39 +permalink: /pages/35fa72/ +--- + +# 关系型数据库综合知识 ## 📖 内容 -### [关系型数据库面试题 💯](sql-interview.md) +### [关系型数据库面试题 💯](01.关系型数据库面试.md) -### [SQL Cheat Sheet](sql-cheat-sheet.md) +### [SQL Cheat Sheet](02.SqlCheatSheet.md) ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200115160512.png) diff --git a/docs/sql/mysql/mysql-quickstart.md b/docs/03.关系型数据库/02.Mysql/01.Mysql应用指南.md similarity index 91% rename from docs/sql/mysql/mysql-quickstart.md rename to docs/03.关系型数据库/02.Mysql/01.Mysql应用指南.md index 7fdcc18..00d321c 100644 --- a/docs/sql/mysql/mysql-quickstart.md +++ b/docs/03.关系型数据库/02.Mysql/01.Mysql应用指南.md @@ -1,34 +1,11 @@ +--- +title: Mysql 应用指南 +date: 2020-08-26 20:30:39 +permalink: /pages/08cbb1/ +--- + # Mysql 应用指南 - - -- [1. SQL 执行过程](#1-sql-执行过程) -- [2. 存储引擎](#2-存储引擎) - - [2.1. 选择存储引擎](#21-选择存储引擎) - - [2.2. MyISAM](#22-myisam) - - [2.3. InnoDB](#23-innodb) -- [3. 数据类型](#3-数据类型) - - [3.1. 整型](#31-整型) - - [3.2. 浮点型](#32-浮点型) - - [3.3. 字符串](#33-字符串) - - [3.4. 时间和日期](#34-时间和日期) - - [3.5. BLOB 和 TEXT](#35-blob-和-text) - - [3.6. 枚举类型](#36-枚举类型) - - [3.7. 类型的选择](#37-类型的选择) -- [4. 索引](#4-索引) -- [5. 锁](#5-锁) -- [6. 事务](#6-事务) -- [7. 性能优化](#7-性能优化) -- [8. 复制](#8-复制) - - [8.1. 主从复制](#81-主从复制) - - [8.2. 读写分离](#82-读写分离) -- [9. 分布式事务](#9-分布式事务) -- [10. 分库分表](#10-分库分表) -- [11. 参考资料](#11-参考资料) -- [12. 传送门](#12-传送门) - - - ## 1. SQL 执行过程 学习 Mysql,最好是先从宏观上了解 Mysql 工作原理。 @@ -180,19 +157,19 @@ MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 时间戳转换为日期,并提 ## 4. 索引 -> 详见:[Mysql 索引](mysql-index.md) +> 详见:[Mysql 索引](05.Mysql索引.md) ## 5. 锁 -> 详见:[Mysql 锁](mysql-lock.md) +> 详见:[Mysql 锁](04.Mysql锁.md) ## 6. 事务 -> 详见:[Mysql 事务](mysql-transaction.md) +> 详见:[Mysql 事务](03.Mysql事务.md) ## 7. 性能优化 -> 详见:[Mysql 性能优化](mysql-optimization.md) +> 详见:[Mysql 性能优化](06.Mysql性能优化.md) ## 8. 复制 diff --git a/docs/sql/mysql/mysql-workflow.md b/docs/03.关系型数据库/02.Mysql/02.MySQL工作流.md similarity index 96% rename from docs/sql/mysql/mysql-workflow.md rename to docs/03.关系型数据库/02.Mysql/02.MySQL工作流.md index a81f9e8..da50905 100644 --- a/docs/sql/mysql/mysql-workflow.md +++ b/docs/03.关系型数据库/02.Mysql/02.MySQL工作流.md @@ -1,24 +1,11 @@ +--- +title: MySQL 工作流 +date: 2020-08-26 20:30:39 +permalink: /pages/58c61a/ +--- + # MySQL 工作流 - - -- [1. 基础架构](#1-基础架构) -- [2. 查询过程](#2-查询过程) - - [2.1. (一)连接](#21-一连接) - - [2.2. (二)查询缓存](#22-二查询缓存) - - [2.3. (三)语法分析](#23-三语法分析) - - [2.4. (四)查询优化](#24-四查询优化) - - [2.5. (五)查询执行引擎](#25-五查询执行引擎) - - [2.6. (六)返回结果](#26-六返回结果) -- [3. 更新过程](#3-更新过程) - - [3.1. redo log](#31-redo-log) - - [3.2. bin log](#32-bin-log) - - [3.3. redo log vs. bin log](#33-redo-log-vs-bin-log) - - [3.4. 两阶段提交](#34-两阶段提交) -- [4. 参考资料](#4-参考资料) - - - ## 1. 基础架构 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 diff --git a/docs/sql/mysql/mysql-transaction.md b/docs/03.关系型数据库/02.Mysql/03.Mysql事务.md similarity index 94% rename from docs/sql/mysql/mysql-transaction.md rename to docs/03.关系型数据库/02.Mysql/03.Mysql事务.md index 6360853..7add46f 100644 --- a/docs/sql/mysql/mysql-transaction.md +++ b/docs/03.关系型数据库/02.Mysql/03.Mysql事务.md @@ -1,3 +1,9 @@ +--- +title: Mysql 事务 +date: 2020-08-26 20:30:39 +permalink: /pages/d0add6/ +--- + # Mysql 事务 > 不是所有的 Mysql 存储引擎都实现了事务处理。支持事务的存储引擎有:`InnoDB` 和 `NDB Cluster`。不支持事务的存储引擎,代表有:`MyISAM`。 @@ -6,33 +12,6 @@ ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716074533.png) - - -- [1. 事务简介](#1-事务简介) -- [2. 事务用法](#2-事务用法) - - [2.1. 事务处理指令](#21-事务处理指令) - - [2.2. AUTOCOMMIT](#22-autocommit) -- [3. ACID](#3-acid) -- [4. 事务隔离级别](#4-事务隔离级别) - - [4.1. 事务隔离简介](#41-事务隔离简介) - - [4.2. 未提交读](#42-未提交读) - - [4.3. 提交读](#43-提交读) - - [4.4. 可重复读](#44-可重复读) - - [4.5. 串行化](#45-串行化) - - [4.6. 隔离级别小结](#46-隔离级别小结) -- [5. 死锁](#5-死锁) - - [5.1. 死锁的原因](#51-死锁的原因) - - [5.2. 避免死锁](#52-避免死锁) - - [5.3. 解决死锁](#53-解决死锁) -- [6. 分布式事务](#6-分布式事务) -- [7. 事务最佳实践](#7-事务最佳实践) - - [7.1. 尽量使用低级别事务隔离](#71-尽量使用低级别事务隔离) - - [7.2. 避免行锁升级表锁](#72-避免行锁升级表锁) - - [7.3. 缩小事务范围](#73-缩小事务范围) -- [8. 参考资料](#8-参考资料) - - - ## 1. 事务简介 > 事务简单来说:**一个 Session 中所进行所有的操作,要么同时成功,要么同时失败**。进一步说,事务指的是满足 ACID 特性的一组操作,可以通过 `Commit` 提交一个事务,也可以使用 `Rollback` 进行回滚。 @@ -246,11 +225,11 @@ T1 读取某个范围的数据,T2 在这个范围内插 数据库隔离级别解决的问题: | 隔离级别 | 丢失修改 | 脏读 | 不可重复读 | 幻读 | -| :------: | :--: | :--------: | :--: | :--: | -| 未提交读 | ✔️ | ❌ | ❌ | ❌ | -| 提交读 | ✔️ | ✔️ | ❌ | ❌ | -| 可重复读 | ✔️ | ✔️ | ✔️ | ❌ | -| 可串行化 | ✔️ | ✔️ | ✔️ | ✔️ | +| :------: | :------: | :--: | :--------: | :--: | +| 未提交读 | ✔️ | ❌ | ❌ | ❌ | +| 提交读 | ✔️ | ✔️ | ❌ | ❌ | +| 可重复读 | ✔️ | ✔️ | ✔️ | ❌ | +| 可串行化 | ✔️ | ✔️ | ✔️ | ✔️ | ## 5. 死锁 diff --git a/docs/sql/mysql/mysql-lock.md b/docs/03.关系型数据库/02.Mysql/04.Mysql锁.md similarity index 96% rename from docs/sql/mysql/mysql-lock.md rename to docs/03.关系型数据库/02.Mysql/04.Mysql锁.md index 1fbe52f..110a7f3 100644 --- a/docs/sql/mysql/mysql-lock.md +++ b/docs/03.关系型数据库/02.Mysql/04.Mysql锁.md @@ -1,24 +1,13 @@ +--- +title: Mysql 锁 +date: 2020-08-26 20:30:39 +permalink: /pages/dcd4a7/ +--- + # Mysql 锁 ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716064947.png) - - -- [1. 悲观锁和乐观锁](#1-悲观锁和乐观锁) -- [2. 表级锁和行级锁](#2-表级锁和行级锁) -- [3. 读写锁](#3-读写锁) -- [4. 意向锁](#4-意向锁) -- [5. MVCC](#5-mvcc) - - [5.1. MVCC 思想](#51-mvcc-思想) - - [5.2. 版本号](#52-版本号) - - [5.3. Undo 日志](#53-undo-日志) - - [5.4. ReadView](#54-readview) - - [5.5. 快照读与当前读](#55-快照读与当前读) -- [6. 行锁](#6-行锁) -- [7. 参考资料](#7-参考资料) - - - ## 1. 悲观锁和乐观锁 确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,**乐观锁和悲观锁是并发控制主要采用的技术手段。** diff --git a/docs/sql/mysql/mysql-index.md b/docs/03.关系型数据库/02.Mysql/05.Mysql索引.md similarity index 94% rename from docs/sql/mysql/mysql-index.md rename to docs/03.关系型数据库/02.Mysql/05.Mysql索引.md index ae79527..ed401a9 100644 --- a/docs/sql/mysql/mysql-index.md +++ b/docs/03.关系型数据库/02.Mysql/05.Mysql索引.md @@ -1,3 +1,9 @@ +--- +title: Mysql 索引 +date: 2020-08-26 20:30:39 +permalink: /pages/aa6a1a/ +--- + # Mysql 索引 > 索引是提高 MySQL 查询性能的一个重要途径,但过多的索引可能会导致过高的磁盘使用率以及过高的内存占用,从而影响应用程序的整体性能。应当尽量避免事后才想起添加索引,因为事后可能需要监控大量的 SQL 才能定位到问题所在,而且添加索引的时间肯定是远大于初始添加索引所需要的时间,可见索引的添加也是非常有技术含量的。 @@ -6,35 +12,6 @@ ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200715172009.png) - - -- [1. 索引简介](#1-索引简介) - - [1.1. 索引的优缺点](#11-索引的优缺点) - - [1.2. 何时使用索引](#12-何时使用索引) -- [2. 索引的数据结构](#2-索引的数据结构) - - [2.1. 哈希索引](#21-哈希索引) - - [2.2. B 树索引](#22-b-树索引) - - [2.3. 全文索引](#23-全文索引) - - [2.4. 空间数据索引](#24-空间数据索引) -- [3. 索引的类型](#3-索引的类型) - - [3.1. 主键索引(`PRIMARY`)](#31-主键索引primary) - - [3.2. 唯一索引(`UNIQUE`)](#32-唯一索引unique) - - [3.3. 普通索引(`INDEX`)](#33-普通索引index) - - [3.4. 全文索引(`FULLTEXT`)](#34-全文索引fulltext) - - [3.5. 联合索引](#35-联合索引) -- [4. 索引的策略](#4-索引的策略) - - [4.1. 索引基本原则](#41-索引基本原则) - - [4.2. 独立的列](#42-独立的列) - - [4.3. 覆盖索引](#43-覆盖索引) - - [4.4. 使用索引来排序](#44-使用索引来排序) - - [4.5. 前缀索引](#45-前缀索引) - - [4.6. 最左前缀匹配原则](#46-最左前缀匹配原则) - - [4.7. = 和 in 可以乱序](#47--和-in-可以乱序) -- [5. 索引最佳实践](#5-索引最佳实践) -- [6. 参考资料](#6-参考资料) - - - ## 1. 索引简介 **索引是数据库为了提高查找效率的一种数据结构**。 @@ -124,7 +101,6 @@ B 树是最常见的索引,按照顺序存储数据,所以 Mysql 可以用 - 出现哈希冲突时,必须遍历链表中所有的行指针,逐行比较,直到找到符合条件的行。 - 如果哈希冲突多的话,维护索引的代价会很高。 - > 因为种种限制,所以哈希索引只适用于特定的场合。而一旦使用哈希索引,则它带来的性能提升会非常显著。 ### 2.2. B 树索引 diff --git a/docs/sql/mysql/mysql-optimization.md b/docs/03.关系型数据库/02.Mysql/06.Mysql性能优化.md similarity index 95% rename from docs/sql/mysql/mysql-optimization.md rename to docs/03.关系型数据库/02.Mysql/06.Mysql性能优化.md index 057a309..ee3cf1b 100644 --- a/docs/sql/mysql/mysql-optimization.md +++ b/docs/03.关系型数据库/02.Mysql/06.Mysql性能优化.md @@ -1,26 +1,11 @@ +--- +title: Mysql 性能优化 +date: 2020-08-26 20:30:39 +permalink: /pages/387d10/ +--- + # Mysql 性能优化 - - -- [1. 数据结构优化](#1-数据结构优化) - - [1.1. 数据类型优化](#11-数据类型优化) - - [1.2. 表设计](#12-表设计) - - [1.3. 范式和反范式](#13-范式和反范式) - - [1.4. 索引优化](#14-索引优化) -- [2. SQL 优化](#2-sql-优化) - - [2.1. 优化 `COUNT()` 查询](#21-优化-count-查询) - - [2.2. 优化关联查询](#22-优化关联查询) - - [2.3. 优化 `GROUP BY` 和 `DISTINCT`](#23-优化-group-by-和-distinct) - - [2.4. 优化 `LIMIT`](#24-优化-limit) - - [2.5. 优化 UNION](#25-优化-union) - - [2.6. 优化查询方式](#26-优化查询方式) -- [3. 执行计划(`EXPLAIN`)](#3-执行计划explain) -- [4. optimizer trace](#4-optimizer-trace) -- [5. 数据模型和业务](#5-数据模型和业务) -- [6. 参考资料](#6-参考资料) - - - ## 1. 数据结构优化 良好的逻辑设计和物理设计是高性能的基石。 diff --git a/docs/sql/mysql/mysql-ops.md b/docs/03.关系型数据库/02.Mysql/20.Mysql运维.md similarity index 95% rename from docs/sql/mysql/mysql-ops.md rename to docs/03.关系型数据库/02.Mysql/20.Mysql运维.md index eb0360e..71db948 100644 --- a/docs/sql/mysql/mysql-ops.md +++ b/docs/03.关系型数据库/02.Mysql/20.Mysql运维.md @@ -1,41 +1,13 @@ +--- +title: Mysql 运维 +date: 2020-08-26 20:30:39 +permalink: /pages/4e960f/ +--- + # Mysql 运维 > 如果你的公司有 DBA,那么我恭喜你,你可以无视 Mysql 运维。如果你的公司没有 DBA,那你就好好学两手 Mysql 基本运维操作,行走江湖,防身必备。 - - -- [1. 安装部署](#1-安装部署) - - [1.1. Windows 安装](#11-windows-安装) - - [1.2. CentOS 安装](#12-centos-安装) - - [1.3. 初始化数据库密码](#13-初始化数据库密码) - - [1.4. 配置远程访问](#14-配置远程访问) - - [1.5. 跳过登录认证](#15-跳过登录认证) -- [2. 基本运维](#2-基本运维) - - [2.1. 客户端连接](#21-客户端连接) - - [2.2. 查看连接](#22-查看连接) - - [2.3. 创建用户](#23-创建用户) - - [2.4. 查看用户](#24-查看用户) - - [2.5. 授权](#25-授权) - - [2.6. 撤销授权](#26-撤销授权) - - [2.7. 查看授权](#27-查看授权) - - [2.8. 更改用户密码](#28-更改用户密码) - - [2.9. 备份与恢复](#29-备份与恢复) - - [2.10. 卸载](#210-卸载) - - [2.11. 主从节点部署](#211-主从节点部署) -- [3. 服务器配置](#3-服务器配置) - - [3.1. 配置文件路径](#31-配置文件路径) - - [3.2. 配置项语法](#32-配置项语法) - - [3.3. 常用配置项说明](#33-常用配置项说明) -- [4. 常见问题](#4-常见问题) - - [4.1. Too many connections](#41-too-many-connections) - - [4.2. 时区(time_zone)偏差](#42-时区time_zone偏差) - - [4.3. 数据表损坏如何修复](#43-数据表损坏如何修复) - - [4.4. 数据结构](#44-数据结构) -- [5. 脚本](#5-脚本) -- [6. 参考资料](#6-参考资料) - - - ## 1. 安装部署 ### 1.1. Windows 安装 @@ -682,7 +654,7 @@ Default options are read from the following files in the given order: ### 3.3. 常用配置项说明 -> 这里介绍比较常用的基本配置,更多配置项说明可以参考:[Mysql 服务器配置说明](mysql-config.md) +> 这里介绍比较常用的基本配置,更多配置项说明可以参考:[Mysql 服务器配置说明](21.Mysql配置.md) 先给出一份常用配置模板,内容如下: diff --git a/docs/sql/mysql/mysql-config.md b/docs/03.关系型数据库/02.Mysql/21.Mysql配置.md similarity index 99% rename from docs/sql/mysql/mysql-config.md rename to docs/03.关系型数据库/02.Mysql/21.Mysql配置.md index 25c4f00..fd14315 100644 --- a/docs/sql/mysql/mysql-config.md +++ b/docs/03.关系型数据库/02.Mysql/21.Mysql配置.md @@ -1,15 +1,13 @@ -# Mysql 服务器配置 +--- +title: Mysql 配置 +date: 2020-08-26 20:30:39 +permalink: /pages/423d2d/ +--- + +# Mysql 配置 > 版本:![mysql](https://img.shields.io/badge/mysql-8.0-blue) - - -- [1. 基本配置](#1-基本配置) -- [2. 配置项说明](#2-配置项说明) -- [3. 参考资料](#3-参考资料) - - - ## 1. 基本配置 ```ini diff --git a/docs/sql/mysql/mysql-faq.md b/docs/03.关系型数据库/02.Mysql/99.Mysql常见问题.md similarity index 90% rename from docs/sql/mysql/mysql-faq.md rename to docs/03.关系型数据库/02.Mysql/99.Mysql常见问题.md index 98909e0..c2b7894 100644 --- a/docs/sql/mysql/mysql-faq.md +++ b/docs/03.关系型数据库/02.Mysql/99.Mysql常见问题.md @@ -1,14 +1,13 @@ -# Mysql FAQ +--- +title: Mysql 常见问题 +date: 2020-08-26 20:30:39 +permalink: /pages/ea9962/ +--- + +# Mysql 常见问题 > **📦 本文以及示例源码已归档在 [db-tutorial](https://github.com/dunwu/db-tutorial/)** - - -- [1. 为什么表数据删掉一半,表文件大小不变](#1-为什么表数据删掉一半表文件大小不变) -- [2. 参考资料](#2-参考资料) - - - ## 1. 为什么表数据删掉一半,表文件大小不变 【问题】数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? diff --git a/docs/sql/mysql/README.md b/docs/03.关系型数据库/02.Mysql/README.md similarity index 80% rename from docs/sql/mysql/README.md rename to docs/03.关系型数据库/02.Mysql/README.md index 40948b7..ecdfbec 100644 --- a/docs/sql/mysql/README.md +++ b/docs/03.关系型数据库/02.Mysql/README.md @@ -1,36 +1,44 @@ +--- +title: Mysql 教程 +date: 2020-08-26 20:30:39 +permalink: /pages/f29f7c/ +--- + # Mysql 教程 ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716103611.png) ## 📖 内容 -### [Mysql 应用指南](mysql-quickstart.md) +### [Mysql 应用指南](01.Mysql应用指南.md) -### [Mysql 工作流](mysql-workflow.md) +### [Mysql 工作流](02.MySQL工作流.md) -### [Mysql 索引](mysql-index.md) - -> 关键词:`Hash`、`B 树`、`聚簇索引`、`回表` - -![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200715172009.png) - -### [Mysql 锁](mysql-lock.md) - -> 关键词:`乐观锁`、`表级锁`、`行级锁`、`意向锁`、`MVCC`、`Next-key 锁` - -![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716064947.png) - -### [Mysql 事务](mysql-transaction.md) +### [Mysql 事务](03.Mysql事务.md) > 关键词:`ACID`、`AUTOCOMMIT`、`事务隔离级别`、`死锁`、`分布式事务` ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716074533.png) -### [Mysql 性能优化](mysql-optimization.md) +### [Mysql 锁](04.Mysql锁.md) -### [Mysql 运维](mysql-ops.md) 🔨 +> 关键词:`乐观锁`、`表级锁`、`行级锁`、`意向锁`、`MVCC`、`Next-key 锁` -### [Mysql 配置](mysql-config.md) 🔨 +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716064947.png) + +### [Mysql 索引](05.Mysql索引.md) + +> 关键词:`Hash`、`B 树`、`聚簇索引`、`回表` + +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200715172009.png) + +### [Mysql 性能优化](06.Mysql性能优化.md) + +### [Mysql 运维](20.Mysql运维.md) 🔨 + +### [Mysql 配置](21.Mysql配置.md) 🔨 + +### [Mysql 常见问题](99.Mysql常见问题) --- diff --git a/docs/sql/postgresql.md b/docs/03.关系型数据库/99.其他/01.PostgreSQL.md similarity index 98% rename from docs/sql/postgresql.md rename to docs/03.关系型数据库/99.其他/01.PostgreSQL.md index cad63ae..385337e 100644 --- a/docs/sql/postgresql.md +++ b/docs/03.关系型数据库/99.其他/01.PostgreSQL.md @@ -1,3 +1,9 @@ +--- +title: PostgreSQL 应用指南 +date: 2020-08-26 20:30:39 +permalink: /pages/bb2260/ +--- + # PostgreSQL 应用指南 > [PostgreSQL](https://www.postgresql.org/) 是一个关系型数据库(RDBM)。 diff --git a/docs/sql/h2.md b/docs/03.关系型数据库/99.其他/02.H2.md similarity index 99% rename from docs/sql/h2.md rename to docs/03.关系型数据库/99.其他/02.H2.md index b8844a4..e243d42 100644 --- a/docs/sql/h2.md +++ b/docs/03.关系型数据库/99.其他/02.H2.md @@ -1,3 +1,9 @@ +--- +title: H2 应用指南 +date: 2020-08-26 20:30:39 +permalink: /pages/d15410/ +--- + # H2 应用指南 ## 概述 diff --git a/docs/sql/sqlite.md b/docs/03.关系型数据库/99.其他/03.Sqlite.md similarity index 99% rename from docs/sql/sqlite.md rename to docs/03.关系型数据库/99.其他/03.Sqlite.md index 70f5c45..ee4c945 100644 --- a/docs/sql/sqlite.md +++ b/docs/03.关系型数据库/99.其他/03.Sqlite.md @@ -1,3 +1,9 @@ +--- +title: sqlite +date: 2020-08-26 20:30:39 +permalink: /pages/ec4fc2/ +--- + # SQLite > SQLite 是一个实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 diff --git a/docs/03.关系型数据库/99.其他/README.md b/docs/03.关系型数据库/99.其他/README.md new file mode 100644 index 0000000..c9827b6 --- /dev/null +++ b/docs/03.关系型数据库/99.其他/README.md @@ -0,0 +1,19 @@ +--- +title: 关系型数据库其他知识 +date: 2022-04-11 12:14:59 +permalink: /pages/d64774/ +--- + +# 关系型数据库其他知识 + +## 📖 内容 + +- [PostgreSQL 应用指南](01.PostgreSQL.md) +- [H2 应用指南](02.H2.md) +- [SqLite 应用指南](03.Sqlite.md) + +## 📚 资料 + +## 🚪 传送 + +◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog) ◾ diff --git a/docs/03.关系型数据库/README.md b/docs/03.关系型数据库/README.md new file mode 100644 index 0000000..1ebae53 --- /dev/null +++ b/docs/03.关系型数据库/README.md @@ -0,0 +1,66 @@ +--- +title: 关系型数据库 +date: 2022-04-11 11:45:33 +permalink: /pages/ba3eb1/ +--- + +# 关系型数据库 + +## 📖 内容 + +### 公共知识 + +- [关系型数据库面试总结](01.综合/01.关系型数据库面试.md) 💯 +- [SQL Cheat Sheet](01.综合/02.SqlCheatSheet.md) 是一个 SQL 入门教程。 +- [扩展 SQL](01.综合/03.扩展SQL.md) 是一个 SQL 入门教程。 + +### Mysql + +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716103611.png) + +- [Mysql 应用指南](02.Mysql/01.Mysql应用指南.md) ⚡ +- [Mysql 工作流](02.Mysql/02.MySQL工作流.md) - 关键词:`连接`、`缓存`、`语法分析`、`优化`、`执行引擎`、`redo log`、`bin log`、`两阶段提交` +- [Mysql 事务](02.Mysql/03.Mysql事务.md) - 关键词:`ACID`、`AUTOCOMMIT`、`事务隔离级别`、`死锁`、`分布式事务` +- [Mysql 锁](02.Mysql/04.Mysql锁.md) - 关键词:`乐观锁`、`表级锁`、`行级锁`、`意向锁`、`MVCC`、`Next-key 锁` +- [Mysql 索引](02.Mysql/05.Mysql索引.md) - 关键词:`Hash`、`B 树`、`聚簇索引`、`回表` +- [Mysql 性能优化](02.Mysql/06.Mysql性能优化.md) +- [Mysql 运维](02.Mysql/20.Mysql运维.md) 🔨 +- [Mysql 配置](02.Mysql/21.Mysql配置.md) 🔨 +- [Mysql 问题](02.Mysql/99.Mysql常见问题.md) + +### 其他 + +- [PostgreSQL 应用指南](99.其他/01.PostgreSQL.md) +- [H2 应用指南](99.其他/02.H2.md) +- [SqLite 应用指南](99.其他/03.Sqlite.md) + +## 📚 资料 + +### 综合 + +- [《数据库的索引设计与优化》](https://book.douban.com/subject/26419771/) +- [《SQL 必知必会》](https://book.douban.com/subject/35167240/) - SQL 的基本概念和语法【入门】 + +### Mysql + +- **官方** + - [Mysql 官网](https://www.mysql.com/) + - [Mysql 官方文档](https://dev.mysql.com/doc/) + - [Mysql 官方文档之命令行客户端](https://dev.mysql.com/doc/refman/8.0/en/mysql.html) +- **书籍** + - [《高性能 MySQL》](https://book.douban.com/subject/23008813/) - 经典,适合 DBA 或作为开发者的参考手册 + - [《MySQL 必知必会》](https://book.douban.com/subject/3354490/) - 适合入门者 +- **教程** + - [MySQL 实战 45 讲](https://time.geekbang.org/column/intro/139) + - [runoob.com MySQL 教程](http://www.runoob.com/mysql/mysql-tutorial.html) + - [mysql-tutorial](https://github.com/jaywcjlove/mysql-tutorial) +- **更多资源** + - [awesome-mysql](https://github.com/jobbole/awesome-mysql-cn) + +### 其他 + +- [《Oracle Database 9i/10g/11g 编程艺术》](https://book.douban.com/subject/5402711/) + +## 🚪 传送 + +◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog) ◾ diff --git a/docs/nosql/mongodb/mongodb-quickstart.md b/docs/04.文档数据库/01.MongoDB/01.MongoDB应用指南.md similarity index 96% rename from docs/nosql/mongodb/mongodb-quickstart.md rename to docs/04.文档数据库/01.MongoDB/01.MongoDB应用指南.md index 5b64f48..e289273 100644 --- a/docs/nosql/mongodb/mongodb-quickstart.md +++ b/docs/04.文档数据库/01.MongoDB/01.MongoDB应用指南.md @@ -1,32 +1,11 @@ +--- +title: MongoDB 应用指南 +date: 2020-09-07 09:01:07 +permalink: /pages/b4209b/ +--- + # MongoDB 应用指南 - - -- [简介](#简介) - - [MongoDB 发展](#mongodb-发展) - - [MongoDB 和 RDBMS](#mongodb-和-rdbms) - - [MongoDB 特性](#mongodb-特性) -- [MongoDB 概念](#mongodb-概念) - - [数据库](#数据库) - - [文档](#文档) - - [集合](#集合) - - [元数据](#元数据) -- [MongoDB 数据类型](#mongodb-数据类型) -- [MongoDB CRUD](#mongodb-crud) - - [数据库操作](#数据库操作) - - [集合操作](#集合操作) - - [插入文档操作](#插入文档操作) - - [查询文档操作](#查询文档操作) - - [更新文档操作](#更新文档操作) - - [删除文档操作](#删除文档操作) - - [索引操作](#索引操作) -- [MongoDB 聚合操作](#mongodb-聚合操作) - - [管道](#管道) - - [聚合步骤](#聚合步骤) -- [参考资料](#参考资料) - - - ## 简介 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 diff --git a/docs/nosql/mongodb/mongodb-crud.md b/docs/04.文档数据库/01.MongoDB/02.MongoDB的CRUD操作.md similarity index 82% rename from docs/nosql/mongodb/mongodb-crud.md rename to docs/04.文档数据库/01.MongoDB/02.MongoDB的CRUD操作.md index bcc8417..e1d4321 100644 --- a/docs/nosql/mongodb/mongodb-crud.md +++ b/docs/04.文档数据库/01.MongoDB/02.MongoDB的CRUD操作.md @@ -1,8 +1,10 @@ -# MongoDB CRUD 操作 +--- +title: MongoDB 的 CRUD 操作 +date: 2020-09-24 11:16:13 +permalink: /pages/d930e5/ +--- - - - +# MongoDB 的 CRUD 操作 ## 一、基本 CRUD 操作 @@ -17,7 +19,7 @@ MongoDB 提供以下操作向一个 collection 插入 document > 注:以上操作都是原子操作。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924112342.svg) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924112342.svg) 插入操作的特性: @@ -66,7 +68,7 @@ db.inventory.insertMany([ MongoDB 提供 [`db.collection.find()`](https://docs.mongodb.com/manual/reference/method/db.collection.find/#db.collection.find) 方法来检索 document。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924113832.svg) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924113832.svg) ### Update 操作 @@ -82,7 +84,7 @@ MongoDB 提供以下操作来更新 collection 中的 document - [`db.collection.updateMany(, , )`](https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/#db.collection.updateMany) - [`db.collection.replaceOne(, , )`](https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/#db.collection.replaceOne) -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924114043.svg) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924114043.svg) 【示例】插入测试数据 @@ -191,7 +193,7 @@ MongoDB 提供以下操作来删除 collection 中的 document - [`db.collection.deleteOne()`](https://docs.mongodb.com/manual/reference/method/db.collection.deleteOne/#db.collection.deleteOne):删除一条 document - [`db.collection.deleteMany()`](https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/#db.collection.deleteMany):删除多条 document -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924120007.svg) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924120007.svg) 删除操作的特性: @@ -294,20 +296,20 @@ try { ### 术语和概念 -| SQL 术语和概念 | MongoDB 术语和概念 | -| :-------------------------- | :----------------------------------------------------------- | -| database | [database](https://docs.mongodb.com/manual/reference/glossary/#term-database) | -| table | [collection](https://docs.mongodb.com/manual/reference/glossary/#term-collection) | -| row | [document](https://docs.mongodb.com/manual/reference/glossary/#term-document) 或 [BSON](https://docs.mongodb.com/manual/reference/glossary/#term-bson) | -| column | [field](https://docs.mongodb.com/manual/reference/glossary/#term-field) | -| index | [index](https://docs.mongodb.com/manual/reference/glossary/#term-index) | -| table joins | [`$lookup`](https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#pipe._S_lookup)、嵌入式文档 | -| primary key | [primary key](https://docs.mongodb.com/manual/reference/glossary/#term-primary-key)
MongoDB 中自动设置主键为 [`_id`](https://docs.mongodb.com/manual/reference/glossary/#term-id) 字段 | -| aggregation (e.g. group by) | aggregation pipeline
参考 [SQL to Aggregation Mapping Chart](https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/). | -| SELECT INTO NEW_TABLE | [`$out`](https://docs.mongodb.com/manual/reference/operator/aggregation/out/#pipe._S_out)
参考 [SQL to Aggregation Mapping Chart](https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/) | +| SQL 术语和概念 | MongoDB 术语和概念 | +| :-------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| database | [database](https://docs.mongodb.com/manual/reference/glossary/#term-database) | +| table | [collection](https://docs.mongodb.com/manual/reference/glossary/#term-collection) | +| row | [document](https://docs.mongodb.com/manual/reference/glossary/#term-document) 或 [BSON](https://docs.mongodb.com/manual/reference/glossary/#term-bson) | +| column | [field](https://docs.mongodb.com/manual/reference/glossary/#term-field) | +| index | [index](https://docs.mongodb.com/manual/reference/glossary/#term-index) | +| table joins | [`$lookup`](https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#pipe._S_lookup)、嵌入式文档 | +| primary key | [primary key](https://docs.mongodb.com/manual/reference/glossary/#term-primary-key)
MongoDB 中自动设置主键为 [`_id`](https://docs.mongodb.com/manual/reference/glossary/#term-id) 字段 | +| aggregation (e.g. group by) | aggregation pipeline
参考 [SQL to Aggregation Mapping Chart](https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/). | +| SELECT INTO NEW_TABLE | [`$out`](https://docs.mongodb.com/manual/reference/operator/aggregation/out/#pipe._S_out)
参考 [SQL to Aggregation Mapping Chart](https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/) | | MERGE INTO TABLE | [`$merge`](https://docs.mongodb.com/manual/reference/operator/aggregation/merge/#pipe._S_merge) (MongoDB 4.2 开始支持)
参考 [SQL to Aggregation Mapping Chart](https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/). | -| UNION ALL | [`$unionWith`](https://docs.mongodb.com/manual/reference/operator/aggregation/unionWith/#pipe._S_unionWith) (MongoDB 4.4 开始支持) | -| transactions | [transactions](https://docs.mongodb.com/manual/core/transactions/) | +| UNION ALL | [`$unionWith`](https://docs.mongodb.com/manual/reference/operator/aggregation/unionWith/#pipe._S_unionWith) (MongoDB 4.4 开始支持) | +| transactions | [transactions](https://docs.mongodb.com/manual/core/transactions/) | ## 参考资料 diff --git a/docs/nosql/mongodb/mongodb-aggregation.md b/docs/04.文档数据库/01.MongoDB/03.MongoDB的聚合操作.md similarity index 99% rename from docs/nosql/mongodb/mongodb-aggregation.md rename to docs/04.文档数据库/01.MongoDB/03.MongoDB的聚合操作.md index f5087f6..e5a76bd 100644 --- a/docs/nosql/mongodb/mongodb-aggregation.md +++ b/docs/04.文档数据库/01.MongoDB/03.MongoDB的聚合操作.md @@ -1,4 +1,10 @@ -# MongoDB 聚合操作 +--- +title: MongoDB 的聚合操作 +date: 2020-09-21 09:17:26 +permalink: /pages/4abdcc/ +--- + +# MongoDB 的聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作将来自多个 document 的值分组,并可以对分组的数据执行各种操作以返回单个结果。 MongoDB 提供了三种执行聚合的方式:聚合管道,map-reduce 函数和单一目的聚合方法。 diff --git a/docs/nosql/mongodb/mongodb-transaction.md b/docs/04.文档数据库/01.MongoDB/04.MongoDB事务.md similarity index 70% rename from docs/nosql/mongodb/mongodb-transaction.md rename to docs/04.文档数据库/01.MongoDB/04.MongoDB事务.md index cc107ec..3c896c0 100644 --- a/docs/nosql/mongodb/mongodb-transaction.md +++ b/docs/04.文档数据库/01.MongoDB/04.MongoDB事务.md @@ -1,3 +1,9 @@ +--- +title: MongoDB 事务 +date: 2020-09-21 09:09:43 +permalink: /pages/368234/ +--- + # MongoDB 事务 writeConcern 可以决定写操作到达多少个节点才算成功。 @@ -14,9 +20,9 @@ journal 则定义如何才算成功。取值包括: 【示例】在集群中使用 writeConcern 参数 ```javascript -db.transaction.insert({"count":1}, {"writeConcern":{w:"majoriy"}}) -db.transaction.insert({"count":1}, {"writeConcern":{w:"4"}}) -db.transaction.insert({"count":1}, {"writeConcern":{w:"all"}}) +db.transaction.insert({ count: 1 }, { writeConcern: { w: 'majoriy' } }) +db.transaction.insert({ count: 1 }, { writeConcern: { w: '4' } }) +db.transaction.insert({ count: 1 }, { writeConcern: { w: 'all' } }) ``` 【示例】配置延迟节点,模拟网络延迟 @@ -27,4 +33,3 @@ conf.memebers[2].slaveDelay=5 conf.memebers[2].priority=0 rs.reconfig(conf) ``` - diff --git a/docs/nosql/mongodb/mongodb-model.md b/docs/04.文档数据库/01.MongoDB/05.MongoDB建模.md similarity index 95% rename from docs/nosql/mongodb/mongodb-model.md rename to docs/04.文档数据库/01.MongoDB/05.MongoDB建模.md index 9ca77ba..81be8ce 100644 --- a/docs/nosql/mongodb/mongodb-model.md +++ b/docs/04.文档数据库/01.MongoDB/05.MongoDB建模.md @@ -1,29 +1,15 @@ +--- +title: MongoDB 建模 +date: 2020-09-08 08:58:10 +permalink: /pages/e81890/ +--- + # MongoDB 建模 MongoDB 的数据模式是一种灵活模式,关系型数据库要求你在插入数据之前必须先定义好一个表的模式结构,而 MongoDB 的集合则并不限制 document 结构。这种灵活性让对象和数据库文档之间的映射变得很容易。即使数据记录之间有很大的变化,每个文档也可以很好的映射到各条不同的记录。 当然在实际使用中,同一个集合中的文档往往都有一个比较类似的结构。 数据模型设计中最具挑战性的是在应用程序需求,数据库引擎性能要求和数据读写模式之间做权衡考量。当设计数据模型的时候,一定要考虑应用程序对数据的使用模式(如查询,更新和处理)以及数据本身的天然结构。 - - -- [MongoDB 数据建模入门](#mongodb-数据建模入门) - - [(一)定义数据集](#一定义数据集) - - [(二)思考 JSON 结构](#二思考-json-结构) - - [(三)确定哪些字段作为嵌入式数据](#三确定哪些字段作为嵌入式数据) -- [数据模型简介](#数据模型简介) - - [灵活的 Schema](#灵活的-schema) - - [Document 结构](#document-结构) - - [原子写操作](#原子写操作) - - [数据使用和性能](#数据使用和性能) -- [Schema 校验](#schema-校验) - - [指定校验规则](#指定校验规则) - - [JSON Schema](#json-schema) - - [其它查询表达式](#其它查询表达式) - - [行为](#行为) -- [参考资料](#参考资料) - - - ## MongoDB 数据建模入门 > 参考:https://docs.mongodb.com/guides/server/introduction/#what-you-ll-need diff --git a/docs/nosql/mongodb/mongodb-model-example.md b/docs/04.文档数据库/01.MongoDB/06.MongoDB建模示例.md similarity index 91% rename from docs/nosql/mongodb/mongodb-model-example.md rename to docs/04.文档数据库/01.MongoDB/06.MongoDB建模示例.md index 80ebc21..5084120 100644 --- a/docs/nosql/mongodb/mongodb-model-example.md +++ b/docs/04.文档数据库/01.MongoDB/06.MongoDB建模示例.md @@ -1,21 +1,11 @@ +--- +title: MongoDB 建模示例 +date: 2020-09-12 09:06:57 +permalink: /pages/bfc4a1/ +--- + # MongoDB 建模示例 - - -- [关系型模型](#关系型模型) - - [嵌入式文档一对一关系模型](#嵌入式文档一对一关系模型) - - [嵌入式文档一对多关系模型](#嵌入式文档一对多关系模型) - - [引用式文档一对多关系模型](#引用式文档一对多关系模型) -- [树形结构模型](#树形结构模型) - - [具有父节点的树形结构模型](#具有父节点的树形结构模型) - - [具有子节点的树形结构模型](#具有子节点的树形结构模型) - - [具有祖先的树形结构模型](#具有祖先的树形结构模型) - - [具有实体化路径的树形结构模型](#具有实体化路径的树形结构模型) - - [具有嵌套集的树形结构模型](#具有嵌套集的树形结构模型) -- [参考资料](#参考资料) - - - ## 关系型模型 ### 嵌入式文档一对一关系模型 @@ -529,23 +519,23 @@ db.categories.insertMany([ ```javascript db.categories.insertMany([ - { _id: "Books", parent: 0, left: 1, right: 12 }, - { _id: "Programming", parent: "Books", left: 2, right: 11 }, - { _id: "Languages", parent: "Programming", left: 3, right: 4 }, - { _id: "Databases", parent: "Programming", left: 5, right: 10 }, - { _id: "MongoDB", parent: "Databases", left: 6, right: 7 }, - { _id: "dbm", parent: "Databases", left: 8, right: 9 } -]); + { _id: 'Books', parent: 0, left: 1, right: 12 }, + { _id: 'Programming', parent: 'Books', left: 2, right: 11 }, + { _id: 'Languages', parent: 'Programming', left: 3, right: 4 }, + { _id: 'Databases', parent: 'Programming', left: 5, right: 10 }, + { _id: 'MongoDB', parent: 'Databases', left: 6, right: 7 }, + { _id: 'dbm', parent: 'Databases', left: 8, right: 9 }, +]) ``` 可以查询以检索节点的后代: ```javascript -var databaseCategory = db.categories.findOne({ _id: "Databases" }); +var databaseCategory = db.categories.findOne({ _id: 'Databases' }) db.categories.find({ left: { $gt: databaseCategory.left }, - right: { $lt: databaseCategory.right } -}); + right: { $lt: databaseCategory.right }, +}) ``` ## 设计模式 diff --git a/docs/nosql/mongodb/mongodb-index.md b/docs/04.文档数据库/01.MongoDB/07.MongoDB索引.md similarity index 96% rename from docs/nosql/mongodb/mongodb-index.md rename to docs/04.文档数据库/01.MongoDB/07.MongoDB索引.md index 5f697ca..92ca67d 100644 --- a/docs/nosql/mongodb/mongodb-index.md +++ b/docs/04.文档数据库/01.MongoDB/07.MongoDB索引.md @@ -1,3 +1,9 @@ +--- +title: MongoDB 索引 +date: 2020-09-21 20:55:42 +permalink: /pages/580732/ +--- + # MongoDB 索引 ## MongoDB 索引简介 @@ -12,7 +18,7 @@ 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200921210621.svg) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200921210621.svg) ### createIndex() 方法 diff --git a/docs/nosql/mongodb/mongodb-replication.md b/docs/04.文档数据库/01.MongoDB/08.MongoDB复制.md similarity index 95% rename from docs/nosql/mongodb/mongodb-replication.md rename to docs/04.文档数据库/01.MongoDB/08.MongoDB复制.md index 406ed21..5abf40a 100644 --- a/docs/nosql/mongodb/mongodb-replication.md +++ b/docs/04.文档数据库/01.MongoDB/08.MongoDB复制.md @@ -1,21 +1,11 @@ +--- +title: MongoDB 复制 +date: 2020-09-21 09:09:43 +permalink: /pages/b2f73d/ +--- + # MongoDB 复制 - - -- [副本和可用性](#副本和可用性) -- [MongoDB 副本](#mongodb-副本) -- [异步复制](#异步复制) - - [慢操作](#慢操作) - - [复制延迟和流控](#复制延迟和流控) -- [故障转移](#故障转移) -- [读操作](#读操作) - - [读优先](#读优先) - - [数据可见性](#数据可见性) - - [镜像读取](#镜像读取) -- [参考资料](#参考资料) - - - ## 副本和可用性 副本可以**提供冗余并提高数据可用性**。在不同数据库服务器上使用多个数据副本,可以提供一定程度的容错能力,以防止单个数据库服务器宕机时,数据丢失。 diff --git a/docs/nosql/mongodb/mongodb-sharding.md b/docs/04.文档数据库/01.MongoDB/09.MongoDB分片.md similarity index 95% rename from docs/nosql/mongodb/mongodb-sharding.md rename to docs/04.文档数据库/01.MongoDB/09.MongoDB分片.md index 12faede..f4142e9 100644 --- a/docs/nosql/mongodb/mongodb-sharding.md +++ b/docs/04.文档数据库/01.MongoDB/09.MongoDB分片.md @@ -1,19 +1,11 @@ +--- +title: MongoDB 分片 +date: 2020-09-21 09:09:43 +permalink: /pages/ba092a/ +--- + # MongoDB 分片 - - -- [分片集群](#分片集群) - - [分片的分布](#分片的分布) - - [连接分片集群](#连接分片集群) -- [分片 Key](#分片-key) -- [分片策略](#分片策略) - - [Hash 分片](#hash-分片) - - [范围分片](#范围分片) -- [分片集群中的区域](#分片集群中的区域) -- [参考资料](#参考资料) - - - ## 分片集群简介 当 MongoDB 需要存储海量数据时,单节点不足以存储全量数据,且可能无法提供令人满意的吞吐量。所以,可以通过 MongoDB 分片机制来支持水平扩展。 diff --git a/docs/nosql/mongodb/mongodb-ops.md b/docs/04.文档数据库/01.MongoDB/20.MongoDB运维.md similarity index 96% rename from docs/nosql/mongodb/mongodb-ops.md rename to docs/04.文档数据库/01.MongoDB/20.MongoDB运维.md index aed6204..b692bdd 100644 --- a/docs/nosql/mongodb/mongodb-ops.md +++ b/docs/04.文档数据库/01.MongoDB/20.MongoDB运维.md @@ -1,21 +1,11 @@ +--- +title: MongoDB 运维 +date: 2020-08-26 20:30:39 +permalink: /pages/7d487e/ +--- + # MongoDB 运维 - - -- [MongoDB 安装](#mongodb-安装) - - [Windows](#windows) - - [Linux](#linux) - - [设置用户名、密码](#设置用户名密码) -- [备份和恢复](#备份和恢复) - - [数据备份](#数据备份) - - [数据恢复](#数据恢复) -- [导入导出](#导入导出) - - [导入操作](#导入操作) - - [导出操作](#导出操作) -- [参考资料](#参考资料) - - - ## MongoDB 安装 ### Windows diff --git a/docs/nosql/mongodb/README.md b/docs/04.文档数据库/01.MongoDB/README.md similarity index 71% rename from docs/nosql/mongodb/README.md rename to docs/04.文档数据库/01.MongoDB/README.md index bf7ccf4..13cb809 100644 --- a/docs/nosql/mongodb/README.md +++ b/docs/04.文档数据库/01.MongoDB/README.md @@ -1,3 +1,9 @@ +--- +title: MongoDB 教程 +date: 2020-09-07 09:03:47 +permalink: /pages/102927/ +--- + # MongoDB 教程 > MongoDB 是一个基于文档的分布式数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 @@ -8,23 +14,25 @@ ## 📖 内容 -### [MongoDB 应用指南](mongodb-quickstart.md) +### [MongoDB 应用指南](01.MongoDB应用指南.md) -### [MongoDB CRUD 操作](mongodb-crud.md) +### [MongoDB 的 CRUD 操作](02.MongoDB的CRUD操作.md) -### [MongoDB 聚合操作](mongodb-aggregation.md) +### [MongoDB 聚合操作](03.MongoDB的聚合操作.md) -### [MongoDB 建模](mongodb-model.md) +### [MongoDB 事务](04.MongoDB事务.md) -### [MongoDB 建模示例](mongodb-model-example.md) +### [MongoDB 建模](05.MongoDB建模.md) -### [MongoDB 索引](mongodb-index.md) +### [MongoDB 建模示例](06.MongoDB建模示例.md) -### [MongoDB 复制](mongodb-replication.md) +### [MongoDB 索引](07.MongoDB索引.md) -### [MongoDB 分片](mongodb-sharding.md) +### [MongoDB 复制](08.MongoDB复制.md) -### [MongoDB 运维](mongodb-ops.md) +### [MongoDB 分片](09.MongoDB分片.md) + +### [MongoDB 运维](20.MongoDB运维.md) ## 📚 资料 diff --git a/docs/nosql/redis/redis-interview.md b/docs/05.KV数据库/01.Redis/01.Redis面试总结.md similarity index 94% rename from docs/nosql/redis/redis-interview.md rename to docs/05.KV数据库/01.Redis/01.Redis面试总结.md index 2c9f795..b30d835 100644 --- a/docs/nosql/redis/redis-interview.md +++ b/docs/05.KV数据库/01.Redis/01.Redis面试总结.md @@ -1,20 +1,11 @@ +--- +title: Redis 面试总结 +date: 2020-08-26 20:30:39 +permalink: /pages/b30618/ +--- + # Redis 面试总结 - - -- [Redis 数据类型](#redis-数据类型) -- [Redis 内存淘汰](#redis-内存淘汰) -- [Redis 持久化](#redis-持久化) -- [Redis 事务](#redis-事务) -- [Redis 管道](#redis-管道) -- [Redis 高并发](#redis-高并发) -- [Redis 复制](#redis-复制) -- [Redis 哨兵](#redis-哨兵) -- [Redis vs. Memcached](#redis-vs-memcached) -- [参考资料](#参考资料) - - - ## Redis 数据类型 【问题】 @@ -93,7 +84,7 @@ > **_Redis 持久化_** > -> 详情可以参考:[Redis 持久化](redis-persistence.md) +> 详情可以参考:[Redis 持久化](04.Redis持久化.md) (1)Redis 支持两种持久化方式:RDB 和 AOF。 @@ -129,7 +120,7 @@ AOF 丢数据比 RDB 少,但文件会比 RDB 文件大很多。 > **_Redis 的事务特性、原理_** > -> 详情参考:[Redis 应用指南之 事务](redis-quickstart.md#六redis-事务) +> 详情参考:[Redis 应用指南之 事务](02.Redis应用指南.md#六redis-事务) **Redis 提供的不是严格的事务,Redis 只保证串行执行命令,并且能保证全部执行,但是执行命令失败时并不会回滚,而是会继续执行下去**。 @@ -169,7 +160,7 @@ Redis 是一种基于 C/S 模型以及请求/响应协议的 TCP 服务。Redis > **_Redis 集群_** > -> 详情可以参考:[Redis 集群](redis-cluster.md) +> 详情可以参考:[Redis 集群](07.Redis集群.md) (1)单线程 @@ -209,7 +200,7 @@ Redis 集群基于复制特性实现节点间的数据一致性。 > **_Redis 复制_** > -> 详情可以参考:[Redis 复制](redis-replication.md) +> 详情可以参考:[Redis 复制](05.Redis复制.md) (1)旧版复制基于 `SYNC` 命令实现。分为同步(sync)和命令传播(command propagate)两个操作。这种方式存在缺陷:不能高效处理断线重连后的复制情况。 @@ -247,7 +238,7 @@ Redis 集群基于复制特性实现节点间的数据一致性。 > **_Redis 哨兵_** > -> 详情可以参考:[Redis 哨兵](redis-sentinel.md) +> 详情可以参考:[Redis 哨兵](06.Redis哨兵.md) (1)Redis 的高可用是通过哨兵来实现(Raft 协议的 Redis 实现)。Sentinel(哨兵)可以监听主服务器,并在主服务器进入下线状态时,自动从从服务器中选举出新的主服务器。 diff --git a/docs/nosql/redis/redis-quickstart.md b/docs/05.KV数据库/01.Redis/02.Redis应用指南.md similarity index 92% rename from docs/nosql/redis/redis-quickstart.md rename to docs/05.KV数据库/01.Redis/02.Redis应用指南.md index 1b4fc44..47b9be9 100644 --- a/docs/nosql/redis/redis-quickstart.md +++ b/docs/05.KV数据库/01.Redis/02.Redis应用指南.md @@ -1,50 +1,11 @@ +--- +title: Redis 应用指南 +date: 2020-08-26 20:30:39 +permalink: /pages/2694e2/ +--- + # Redis 应用指南 - - -- [一、Redis 简介](#一redis-简介) - - [Redis 使用场景](#redis-使用场景) - - [Redis 的优势](#redis-的优势) - - [Redis 与 Memcached](#redis-与-memcached) -- [二、Redis 数据类型](#二redis-数据类型) - - [STRING](#string) - - [HASH](#hash) - - [LIST](#list) - - [SET](#set) - - [ZSET](#zset) -- [三、Redis 内存淘汰](#三redis-内存淘汰) - - [内存淘汰要点](#内存淘汰要点) - - [主键过期时间](#主键过期时间) - - [淘汰策略](#淘汰策略) - - [如何选择淘汰策略](#如何选择淘汰策略) - - [内部实现](#内部实现) -- [四、Redis 持久化](#四redis-持久化) -- [五、Redis 事件](#五redis-事件) - - [文件事件](#文件事件) - - [时间事件](#时间事件) - - [事件的调度与执行](#事件的调度与执行) -- [六、Redis 事务](#六redis-事务) - - [MULTI](#multi) - - [EXEC](#exec) - - [DISCARD](#discard) - - [WATCH](#watch) - - [Rollback](#rollback) -- [七、Redis 管道](#七redis-管道) -- [八、Redis 发布与订阅](#八redis-发布与订阅) -- [九、Redis 复制](#九redis-复制) - - [旧版复制](#旧版复制) - - [新版复制](#新版复制) - - [部分重同步](#部分重同步) - - [PSYNC 命令](#psync-命令) - - [心跳检测](#心跳检测) -- [十、Redis 哨兵](#十redis-哨兵) -- [十一、Redis 集群](#十一redis-集群) -- [Redis Client](#redis-client) -- [扩展阅读](#扩展阅读) -- [参考资料](#参考资料) - - - ## 一、Redis 简介 > Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 @@ -117,7 +78,7 @@ Redis 基本数据类型:STRING、HASH、LIST、SET、ZSET Redis 高级数据类型:BitMap、HyperLogLog、GEO -> :bulb: 更详细的特性及原理说明请参考:[Redis 数据类型和应用](redis-datatype.md) +> :bulb: 更详细的特性及原理说明请参考:[Redis 数据类型和应用](03.Redis数据类型和应用.md) ## 三、Redis 内存淘汰 @@ -195,7 +156,7 @@ Redis 支持两种持久化方式:RDB 和 AOF。 - RDB - **RDB 即快照方式,它将某个时间点的所有 Redis 数据保存到一个经过压缩的二进制文件(RDB 文件)中**。 - AOF - `AOF(Append Only File)` 是以文本日志形式将所有写命令追加到 AOF 文件的末尾,以此来记录数据的变化。当服务器重启的时候会重新载入和执行这些命令来恢复原始的数据。AOF 适合作为 **热备**。 -> :bulb: 更详细的特性及原理说明请参考:[Redis 持久化](redis-persistence.md) +> :bulb: 更详细的特性及原理说明请参考:[Redis 持久化](04.Redis持久化.md) ## 五、Redis 事件 @@ -423,12 +384,12 @@ pipe.exec(); Redis 提供了 5 个发布与订阅命令: -| 命令 | 描述 | -| -------------- | ------------------------------------------------------------ | -| `SUBSCRIBE` | `SUBSCRIBE channel [channel ...]`—订阅指定频道。 | -| `UNSUBSCRIBE` | `UNSUBSCRIBE [channel [channel ...]]`—取消订阅指定频道。 | -| `PUBLISH` | `PUBLISH channel message`—发送信息到指定的频道。 | -| `PSUBSCRIBE` | `PSUBSCRIBE pattern [pattern ...]`—订阅符合指定模式的频道。 | +| 命令 | 描述 | +| -------------- | ------------------------------------------------------------------- | +| `SUBSCRIBE` | `SUBSCRIBE channel [channel ...]`—订阅指定频道。 | +| `UNSUBSCRIBE` | `UNSUBSCRIBE [channel [channel ...]]`—取消订阅指定频道。 | +| `PUBLISH` | `PUBLISH channel message`—发送信息到指定的频道。 | +| `PSUBSCRIBE` | `PSUBSCRIBE pattern [pattern ...]`—订阅符合指定模式的频道。 | | `PUNSUBSCRIBE` | `PUNSUBSCRIBE [pattern [pattern ...]]`—取消订阅符合指定模式的频道。 | 订阅者订阅了频道之后,发布者向频道发送字符串消息会被所有订阅者接收到。 @@ -487,13 +448,13 @@ Redis 2.8 版本以后的复制功能基于 `PSYNC` 命令实现。`PSYNC` 命 从服务器通过向主服务器发送命令 `REPLCONF ACK ` 来进行心跳检测,以及命令丢失检测。 -> :bulb: 更详细的特性及原理说明请参考:[Redis 复制](redis-replication.md) +> :bulb: 更详细的特性及原理说明请参考:[Redis 复制](05.Redis复制.md) ## 十、Redis 哨兵 Sentinel(哨兵)可以监听主服务器,并在主服务器进入下线状态时,自动从从服务器中选举出新的主服务器。 -> 💡 更详细的特性及原理说明请参考:[Redis 哨兵](redis-sentinel.md) +> 💡 更详细的特性及原理说明请参考:[Redis 哨兵](06.Redis哨兵.md) ## 十一、Redis 集群 @@ -519,7 +480,7 @@ redis 官方推荐的 Java Redis Client: ## 扩展阅读 -> 💡 Redis 常用于分布式缓存,有关缓存的特性和原理请参考:[缓存基本原理](https://dunwu.github.io/blog/design/theory/cache-theory/) +> 💡 Redis 常用于分布式缓存,有关缓存的特性和原理请参考:[缓存基本原理](https://dunwu.github.io/design/distributed/分布式缓存.html) ## 参考资料 diff --git a/docs/nosql/redis/redis-datatype.md b/docs/05.KV数据库/01.Redis/03.Redis数据类型和应用.md similarity index 97% rename from docs/nosql/redis/redis-datatype.md rename to docs/05.KV数据库/01.Redis/03.Redis数据类型和应用.md index f7e8945..09aef22 100644 --- a/docs/nosql/redis/redis-datatype.md +++ b/docs/05.KV数据库/01.Redis/03.Redis数据类型和应用.md @@ -1,40 +1,15 @@ -# Redis 数据类型 +--- +title: Redis 数据类型和应用 +date: 2020-08-26 20:30:39 +permalink: /pages/ee52c4/ +--- + +# Redis 数据类型和应用 > Redis 提供了多种数据类型,每种数据类型有丰富的命令支持。 > > 使用 Redis ,不仅要了解其数据类型的特性,还需要根据业务场景,灵活的、高效的使用其数据类型来建模。 - - -- [一、Redis 基本数据类型](#一redis-基本数据类型) - - [STRING](#string) - - [HASH](#hash) - - [LIST](#list) - - [SET](#set) - - [ZSET](#zset) - - [通用命令](#通用命令) -- [二、Redis 高级数据类型](#二redis-高级数据类型) - - [BitMap](#bitmap) - - [HyperLogLog](#hyperloglog) - - [GEO](#geo) -- [三、Redis 数据类型应用](#三redis-数据类型应用) - - [案例-最受欢迎文章](#案例-最受欢迎文章) - - [案例-管理令牌](#案例-管理令牌) - - [案例-购物车](#案例-购物车) - - [案例-页面缓存](#案例-页面缓存) - - [案例-数据行缓存](#案例-数据行缓存) - - [案例-网页分析](#案例-网页分析) - - [案例-记录日志](#案例-记录日志) - - [案例-统计数据](#案例-统计数据) - - [案例-查找 IP 所属地](#案例-查找-ip-所属地) - - [案例-服务的发现与配置](#案例-服务的发现与配置) - - [案例-自动补全](#案例-自动补全) - - [案例-广告定向](#案例-广告定向) - - [案例-职位搜索](#案例-职位搜索) -- [参考资料](#参考资料) - - - ## 一、Redis 基本数据类型 ![Redis 数据类型](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200226113813.png) diff --git a/docs/nosql/redis/redis-persistence.md b/docs/05.KV数据库/01.Redis/04.Redis持久化.md similarity index 95% rename from docs/nosql/redis/redis-persistence.md rename to docs/05.KV数据库/01.Redis/04.Redis持久化.md index 3fed236..b9c9922 100644 --- a/docs/nosql/redis/redis-persistence.md +++ b/docs/05.KV数据库/01.Redis/04.Redis持久化.md @@ -1,3 +1,9 @@ +--- +title: Redis 持久化 +date: 2020-08-26 20:30:39 +permalink: /pages/2d1fde/ +--- + # Redis 持久化 > Redis 支持持久化,即把数据存储到硬盘中。 @@ -13,32 +19,6 @@ > > Redis 提供了两种持久方式:RDB 和 AOF。你可以同时开启两种持久化方式。在这种情况下, 当 redis 重启的时候会优先载入 AOF 文件来恢复原始的数据,因为在通常情况下 AOF 文件保存的数据集要比 RDB 文件保存的数据集要完整。 - - -- [一、RDB](#一rdb) - - [RDB 简介](#rdb-简介) - - [RDB 的创建](#rdb-的创建) - - [RDB 的载入](#rdb-的载入) - - [RDB 的文件结构](#rdb-的文件结构) - - [RDB 的配置](#rdb-的配置) -- [二、AOF](#二aof) - - [AOF 简介](#aof-简介) - - [AOF 的创建](#aof-的创建) - - [AOF 的载入](#aof-的载入) - - [AOF 的重写](#aof-的重写) - - [AOF 的配置](#aof-的配置) -- [三、RDB 和 AOF](#三rdb-和-aof) - - [如何选择持久化](#如何选择持久化) - - [RDB 切换为 AOF](#rdb-切换为-aof) - - [AOF 和 RDB 的相互作用](#aof-和-rdb-的相互作用) -- [四、Redis 备份](#四redis-备份) - - [备份过程](#备份过程) - - [容灾备份](#容灾备份) -- [五、要点总结](#五要点总结) -- [参考资料](#参考资料) - - - ## 一、RDB ### RDB 简介 diff --git a/docs/nosql/redis/redis-replication.md b/docs/05.KV数据库/01.Redis/05.Redis复制.md similarity index 90% rename from docs/nosql/redis/redis-replication.md rename to docs/05.KV数据库/01.Redis/05.Redis复制.md index 34e216e..14a17d1 100644 --- a/docs/nosql/redis/redis-replication.md +++ b/docs/05.KV数据库/01.Redis/05.Redis复制.md @@ -1,3 +1,9 @@ +--- +title: Redis 复制 +date: 2020-08-26 20:30:39 +permalink: /pages/36a040/ +--- + # Redis 复制 > 在 Redis 中,**可以通过执行 `SLAVEOF` 命令或设置 `slaveof` 选项,让一个服务器去复制(replicate)另一个服务器**,其中,后者叫主服务器(master),前者叫从服务器(slave)。 @@ -6,33 +12,6 @@ ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200712182603.png) - - -- [一、复制简介](#一复制简介) -- [二、旧版复制](#二旧版复制) - - [同步](#同步) - - [命令传播](#命令传播) - - [旧版复制的缺陷](#旧版复制的缺陷) -- [三、新版复制](#三新版复制) - - [部分重同步](#部分重同步) - - [PSYNC 命令](#psync-命令) -- [四、心跳检测](#四心跳检测) - - [检测主从连接状态](#检测主从连接状态) - - [辅助实现 min-slaves 选项](#辅助实现-min-slaves-选项) - - [检测命令丢失](#检测命令丢失) -- [五、复制的流程](#五复制的流程) - - [步骤 1. 设置主从服务器](#步骤-1-设置主从服务器) - - [步骤 2. 主从服务器建立 TCP 连接。](#步骤-2-主从服务器建立-tcp-连接) - - [步骤 3. 发送 PING 检查通信状态。](#步骤-3-发送-ping-检查通信状态) - - [步骤 4. 身份验证。](#步骤-4-身份验证) - - [步骤 5. 发送端口信息。](#步骤-5-发送端口信息) - - [步骤 6. 同步。](#步骤-6-同步) - - [步骤 7. 命令传播。](#步骤-7-命令传播) -- [六、复制的配置项](#六复制的配置项) -- [参考资料](#参考资料) - - - ## 一、复制简介 Redis 通过 `slaveof host port` 命令来让一个服务器成为另一个服务器的从服务器。 @@ -199,7 +178,7 @@ min-slaves-max-lag 10 ### 检测命令丢失 -如果因为网络故障,主服务传播给从服务器的写命令丢失,那么从服务器定时向主服务器发送 `REPLCONF ACK` 命令时,主服务器将发觉从服务器的复制偏移量少于自己的。然后,主服务器就会根据从服务器提交的复制偏移量,在复制积压缓冲区中找到从服务器缺少的数据,并将这些数据重新发送给从服务器。 +如果因为网络故障,主服务传播给从服务器的写命令丢失,那么从服务器定时向主服务器发送 `REPLCONF ACK` 命令时,主服务器将发觉从服务器的复制偏移量少于自己的。然后,主服务器就会根据从服务器提交的复制偏移量,在复制积压缓冲区中找到从服务器缺少的数据,并将这些数据重新发送给从服务器。 ## 五、复制的流程 diff --git a/docs/nosql/redis/redis-sentinel.md b/docs/05.KV数据库/01.Redis/06.Redis哨兵.md similarity index 95% rename from docs/nosql/redis/redis-sentinel.md rename to docs/05.KV数据库/01.Redis/06.Redis哨兵.md index eb2f352..dd34aa7 100644 --- a/docs/nosql/redis/redis-sentinel.md +++ b/docs/05.KV数据库/01.Redis/06.Redis哨兵.md @@ -1,3 +1,9 @@ +--- +title: Redis 哨兵 +date: 2020-08-26 20:30:39 +permalink: /pages/06cb53/ +--- + # Redis 哨兵 > Redis 哨兵(Sentinel)是 Redis 的**高可用性**(Hight Availability)解决方案。 @@ -6,22 +12,6 @@ ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713072747.png) - - -- [一、哨兵简介](#一哨兵简介) -- [二、启动哨兵](#二启动哨兵) -- [三、监控](#三监控) - - [检测服务器状态](#检测服务器状态) - - [获取服务器信息](#获取服务器信息) -- [四、通知](#四通知) - - [向服务器发送消息](#向服务器发送消息) - - [接收服务器的消息](#接收服务器的消息) -- [五、选举 Leader](#五选举-leader) -- [六、故障转移](#六故障转移) -- [参考资料](#参考资料) - - - ## 一、哨兵简介 Redis 哨兵(Sentinel)是 Redis 的**高可用性**(Hight Availability)解决方案:由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。 diff --git a/docs/nosql/redis/redis-cluster.md b/docs/05.KV数据库/01.Redis/07.Redis集群.md similarity index 94% rename from docs/nosql/redis/redis-cluster.md rename to docs/05.KV数据库/01.Redis/07.Redis集群.md index 3907ac1..38e993f 100644 --- a/docs/nosql/redis/redis-cluster.md +++ b/docs/05.KV数据库/01.Redis/07.Redis集群.md @@ -1,3 +1,9 @@ +--- +title: Redis 集群 +date: 2020-08-26 20:30:39 +permalink: /pages/6772f8/ +--- + # Redis 集群 > **[Redis 集群(Redis Cluster)](https://redis.io/topics/cluster-tutorial) 是 Redis 官方提供的分布式数据库方案**。 @@ -10,30 +16,6 @@ ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713100613.png) - - -- [一、Redis Cluster 分区](#一redis-cluster-分区) - - [集群节点](#集群节点) - - [分配 Hash 槽](#分配-hash-槽) - - [寻址](#寻址) - - [重新分片](#重新分片) - - [ASK 错误](#ask-错误) -- [二、Redis Cluster 故障转移](#二redis-cluster-故障转移) - - [复制](#复制) - - [故障检测](#故障检测) - - [故障转移](#故障转移) -- [三、Redis Cluster 通信](#三redis-cluster-通信) -- [四、Redis Cluster 应用](#四redis-cluster-应用) - - [集群限制](#集群限制) - - [集群配置](#集群配置) -- [五、其他方案](#五其他方案) - - [客户端分区方案](#客户端分区方案) - - [代理分区方案](#代理分区方案) - - [查询路由方案](#查询路由方案) -- [参考资料](#参考资料) - - - ## 一、Redis Cluster 分区 ### 集群节点 @@ -122,7 +104,7 @@ Redis 集群的重新分片操作由 Redis 集群管理软件 **redis-trib** 负 ### 复制 -Redis 复制机制可以参考:[Redis 复制](redis-replication.md) +Redis 复制机制可以参考:[Redis 复制](docs/05.KV数据库/01.Redis/05.Redis复制.md) ### 故障检测 diff --git a/docs/nosql/redis/redis-action.md b/docs/05.KV数据库/01.Redis/08.Redis实战.md similarity index 85% rename from docs/nosql/redis/redis-action.md rename to docs/05.KV数据库/01.Redis/08.Redis实战.md index 75790c7..0976369 100644 --- a/docs/nosql/redis/redis-action.md +++ b/docs/05.KV数据库/01.Redis/08.Redis实战.md @@ -1,17 +1,11 @@ +--- +title: Redis 实战 +date: 2020-08-26 20:30:39 +permalink: /pages/31fcbd/ +--- + # Redis 实战 - - -- [一、应用场景](#一应用场景) - - [缓存](#缓存) - - [BitMap 和 BloomFilter](#bitmap-和-bloomfilter) - - [分布式锁](#分布式锁) -- [二、技巧](#二技巧) - - [keys 和 scan](#keys-和-scan) -- [参考资料](#参考资料) - - - ## 一、应用场景 Redis 可以应用于很多场景,这里列举几个经典的应用场景。 @@ -22,7 +16,7 @@ Redis 可以应用于很多场景,这里列举几个经典的应用场景。 Redis 有多种数据类型,以及丰富的操作命令,并且有着高性能、高可用的特性,非常适合用于分布式缓存。 -> 缓存应用的基本原理,请参考 [**缓存基本原理**](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md) 第四 ~ 第六节内容。 +> 缓存应用的基本原理,请参考 [**缓存基本原理**](https://dunwu.github.io/design/distributed/分布式缓存.html) 第四 ~ 第六节内容。 ### BitMap 和 BloomFilter @@ -30,7 +24,7 @@ Redis 除了 5 种基本数据类型外,还支持 BitMap 和 BloomFilter(即 BitMap 和 BloomFilter 都可以用于解决缓存穿透问题。要点在于:过滤一些不可能存在的数据。 -> 什么是缓存穿透,可以参考:[**缓存基本原理**](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md) +> 什么是缓存穿透,可以参考:[**缓存基本原理**](https://dunwu.github.io/design/distributed/分布式缓存.html) 小数据量可以用 BitMap,大数据量可以用布隆过滤器。 diff --git a/docs/nosql/redis/redis-ops.md b/docs/05.KV数据库/01.Redis/20.Redis运维.md similarity index 97% rename from docs/nosql/redis/redis-ops.md rename to docs/05.KV数据库/01.Redis/20.Redis运维.md index 8664a3f..a3f169c 100644 --- a/docs/nosql/redis/redis-ops.md +++ b/docs/05.KV数据库/01.Redis/20.Redis运维.md @@ -1,36 +1,15 @@ +--- +title: Redis 运维 +date: 2020-08-26 20:30:39 +permalink: /pages/89a414/ +--- + # Redis 运维 > **Redis** 是一个高性能的 key-value 数据库。 > > SET 操作每秒钟 110000 次;GET 操作每秒钟 81000 次。 - - -- [一、Redis 安装](#一redis-安装) - - [Window 下安装](#window-下安装) - - [Linux 下安装](#linux-下安装) - - [Ubuntu 下安装](#ubuntu-下安装) - - [开机启动](#开机启动) - - [开放防火墙端口](#开放防火墙端口) - - [Redis 安装脚本](#redis-安装脚本) -- [二、Redis 单机使用和配置](#二redis-单机使用和配置) - - [启动 Redis](#启动-redis) - - [Redis 常见配置](#redis-常见配置) - - [设为守护进程](#设为守护进程) - - [压力测试](#压力测试) -- [三、Redis 集群使用和配置](#三redis-集群使用和配置) - - [集群规划](#集群规划) - - [部署集群](#部署集群) - - [部署哨兵](#部署哨兵) - - [扩容](#扩容) -- [四、Redis 命令](#四redis-命令) - - [通用命令](#通用命令) - - [集群命令](#集群命令) -- [五、客户端](#五客户端) -- [参考资料](#参考资料) - - - ## 一、Redis 安装 ### Window 下安装 @@ -216,7 +195,7 @@ Redis 默认访问不需要密码,如果需要设置密码,需要如下配 | `dir ./` | 指定本地数据库存放目录 | | `slaveof ` | 设置当本机为 slav 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步 | | `masterauth ` | 当 master 服务设置了密码保护时,slav 服务连接 master 的密码 | -| `requirepass foobared` | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关闭 | +| `requirepass foobared` | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 `AUTH ` 命令提供密码,默认关闭 | | `maxclients 128` | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息 | | `maxmemory ` | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区 | | `appendonly no` | 指定是否在每次更新操作后进行日志记录,Redis 在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis 本身同步数据文件是按上面 save 条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为 no | diff --git a/docs/nosql/redis/README.md b/docs/05.KV数据库/01.Redis/README.md similarity index 81% rename from docs/nosql/redis/README.md rename to docs/05.KV数据库/01.Redis/README.md index 1028a65..b6b4a13 100644 --- a/docs/nosql/redis/README.md +++ b/docs/05.KV数据库/01.Redis/README.md @@ -1,40 +1,46 @@ +--- +title: README +date: 2020-08-26 20:30:39 +permalink: /pages/9fdea9/ +--- + # Redis 教程 > Redis 最典型的应用场景是作为分布式缓存。 > > 学习 Redis,有必要深入理解缓存的原理,以及 Redis 作为一种缓存方案,在系统应用中的定位。 > -> 参考:[缓存基本原理](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md),有助于理解缓存的特性、原理,使用缓存常见的问题及解决方案。 +> 参考:[缓存基本原理](https://dunwu.github.io/design/distributed/分布式缓存.html),有助于理解缓存的特性、原理,使用缓存常见的问题及解决方案。 ## 📖 内容 -### [Redis 面试总结 💯](redis-interview.md) +### [Redis 面试总结 💯](01.Redis面试总结.md) -### [Redis 应用指南 ⚡](redis-quickstart.md) +### [Redis 应用指南 ⚡](02.Redis应用指南.md) > 关键词:`内存淘汰`、`事件`、`事务`、`管道`、`发布与订阅` ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713105627.png) -### [Redis 数据类型和应用](redis-datatype.md) +### [Redis 数据类型和应用](03.Redis数据类型和应用.md) > 关键词:`STRING`、`HASH`、`LIST`、`SET`、`ZSET`、`BitMap`、`HyperLogLog`、`Geo` ![Redis 数据类型](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200226113813.png) -### [Redis 持久化](redis-persistence.md) +### [Redis 持久化](04.Redis持久化.md) > 关键词:`RDB`、`AOF`、`SAVE`、`BGSAVE`、`appendfsync` ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200224214047.png) -### [Redis 复制](redis-replication.md) +### [Redis 复制](05.Redis复制.md) > 关键词:`SLAVEOF`、`SYNC`、`PSYNC`、`REPLCONF ACK` ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200712182603.png) -### [Redis 哨兵](redis-sentinel.md) +### [Redis 哨兵](06.Redis哨兵.md) > Redis 哨兵(Sentinel)是 Redis 的高可用性(Hight Availability)解决方案。 > @@ -44,17 +50,17 @@ ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713072747.png) -### [Redis 集群](redis-cluster.md) +### [Redis 集群](07.Redis集群.md) > 关键词:`CLUSTER MEET`、`Hash slot`、`MOVED`、`ASK`、`SLAVEOF no one`、`redis-trib` ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713100613.png) -### [Redis 实战](redis-action.md) +### [Redis 实战](08.Redis实战.md) > 关键词:`缓存`、`分布式锁`、`布隆过滤器` -### [Redis 运维 🔨](redis-ops.md) +### [Redis 运维 🔨](20.Redis运维.md) > 关键词:`安装`、`命令`、`集群`、`客户端` diff --git a/docs/nosql/redis/redis-cheat-sheets.pdf b/docs/05.KV数据库/01.Redis/redis-cheat-sheets.pdf similarity index 100% rename from docs/nosql/redis/redis-cheat-sheets.pdf rename to docs/05.KV数据库/01.Redis/redis-cheat-sheets.pdf diff --git a/docs/nosql/hbase.md b/docs/06.列式数据库/01.Hbase.md similarity index 98% rename from docs/nosql/hbase.md rename to docs/06.列式数据库/01.Hbase.md index 0362092..76ec649 100644 --- a/docs/nosql/hbase.md +++ b/docs/06.列式数据库/01.Hbase.md @@ -1,3 +1,8 @@ +--- +title: Hbase +date: 2020-08-26 20:30:39 +permalink: /pages/e848d6/ +--- # HBase diff --git a/docs/nosql/cassandra.md b/docs/06.列式数据库/02.Cassandra.md similarity index 96% rename from docs/nosql/cassandra.md rename to docs/06.列式数据库/02.Cassandra.md index 25b97bb..a673b00 100644 --- a/docs/nosql/cassandra.md +++ b/docs/06.列式数据库/02.Cassandra.md @@ -1,3 +1,8 @@ +--- +title: Cassandra +date: 2020-08-26 20:30:39 +permalink: /pages/18031b/ +--- # Cassandra > Apache Cassandra 是一个高度可扩展的分区行存储。行被组织成具有所需主键的表。 diff --git a/docs/nosql/elasticsearch/elasticsearch-interview.md b/docs/07.搜索引擎数据库/01.Elasticsearch/01.Elasticsearch面试总结.md similarity index 99% rename from docs/nosql/elasticsearch/elasticsearch-interview.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/01.Elasticsearch面试总结.md index 382c866..7aacfb7 100644 --- a/docs/nosql/elasticsearch/elasticsearch-interview.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/01.Elasticsearch面试总结.md @@ -1,4 +1,10 @@ -# Elasticsearch 面试 +--- +title: Elasticsearch 面试总结 +date: 2020-08-26 20:30:39 +permalink: /pages/aa9e4a/ +--- + +# Elasticsearch 面试总结 ## 集群部署 diff --git a/docs/nosql/elasticsearch/Elasticsearch快速入门.md b/docs/07.搜索引擎数据库/01.Elasticsearch/02.Elasticsearch快速入门.md similarity index 98% rename from docs/nosql/elasticsearch/Elasticsearch快速入门.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/02.Elasticsearch快速入门.md index 50fb00f..f914b58 100644 --- a/docs/nosql/elasticsearch/Elasticsearch快速入门.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/02.Elasticsearch快速入门.md @@ -1,3 +1,9 @@ +--- +title: Elasticsearch 快速入门 +date: 2022-01-10 09:34:00 +permalink: /pages/868e6c/ +--- + # Elasticsearch 快速入门 > **[Elasticsearch](https://github.com/elastic/elasticsearch) 是一个分布式、RESTful 风格的搜索和数据分析引擎**,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 @@ -100,7 +106,7 @@ Document 使用 JSON 格式表示,下面是一个例子。 - 实际的 node 上的 `primary shard` 处理请求,然后将数据同步到 `replica node`。 - `coordinating node` 如果发现 `primary node` 和所有 `replica node` 都搞定之后,就返回响应结果给客户端。 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20210712104055.png) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20210712104055.png) ### ES 读数据过程 diff --git a/docs/nosql/elasticsearch/Elasticsearch简介.md b/docs/07.搜索引擎数据库/01.Elasticsearch/03.Elasticsearch简介.md similarity index 99% rename from docs/nosql/elasticsearch/Elasticsearch简介.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/03.Elasticsearch简介.md index a7ed394..d70bc8a 100644 --- a/docs/nosql/elasticsearch/Elasticsearch简介.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/03.Elasticsearch简介.md @@ -1,3 +1,8 @@ +--- +title: Elasticsearch简介 +date: 2022-01-10 09:34:00 +permalink: /pages/ac661a/ +--- # Elasticsearch 简介 Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。 @@ -125,7 +130,7 @@ Elasticsearch 是一个近乎实时的搜索平台。这意味着**从索引文 #### 倒排索引 -![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20220108215559.PNG) +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20220108215559.PNG) #### index template diff --git a/docs/nosql/elasticsearch/Elasticsearch索引管理.md b/docs/07.搜索引擎数据库/01.Elasticsearch/04.Elasticsearch索引.md similarity index 96% rename from docs/nosql/elasticsearch/Elasticsearch索引管理.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/04.Elasticsearch索引.md index b2d3659..071a25a 100644 --- a/docs/nosql/elasticsearch/Elasticsearch索引管理.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/04.Elasticsearch索引.md @@ -1,27 +1,10 @@ -# Elasticsearch 索引管理 +--- +title: Elasticsearch 索引 +date: 2022-01-10 09:34:00 +permalink: /pages/db5f76/ +--- - - -- [1. 索引管理操作](#1-索引管理操作) - - [1.1. 索引删除](#11-索引删除) - - [1.2. 索引别名](#12-索引别名) -- [2. Settings 详解](#2-settings-详解) - - [2.1. 固定属性](#21-固定属性) - - [2.2. 索引静态配置](#22-索引静态配置) - - [2.3. 索引动态配置](#23-索引动态配置) -- [3. Mapping 详解](#3-mapping-详解) - - [3.1. 映射分类](#31-映射分类) - - [3.2. 基础类型](#32-基础类型) - - [3.3. 复杂类型](#33-复杂类型) - - [3.4. 特殊类型](#34-特殊类型) - - [3.5. Mapping 属性](#35-mapping-属性) -- [4. 索引查询](#4-索引查询) - - [4.1. 多个 index、多个 type 查询](#41-多个index多个type查询) - - [4.2. URI 搜索](#42-uri搜索) - - [4.3. 查询流程](#43-查询流程) -- [5. 参考资料](#5-参考资料) - - +# Elasticsearch 索引 ## 1. 索引管理操作 diff --git a/docs/nosql/elasticsearch/Elasticsearch查询.md b/docs/07.搜索引擎数据库/01.Elasticsearch/05.Elasticsearch查询.md similarity index 95% rename from docs/nosql/elasticsearch/Elasticsearch查询.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/05.Elasticsearch查询.md index c9f8f7c..259b25e 100644 --- a/docs/nosql/elasticsearch/Elasticsearch查询.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/05.Elasticsearch查询.md @@ -1,56 +1,13 @@ +--- +title: Elasticsearch 查询 +date: 2022-01-18 19:58:06 +permalink: /pages/a88250/ +--- + # Elasticsearch 查询 Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL。Elasticsearch 查询分类大致分为**全文查询**、**词项查询**、**复合查询**、**嵌套查询**、**位置查询**、**特殊查询**。Elasticsearch 查询从机制分为两种,一种是根据用户输入的查询词,通过排序模型计算文档与查询词之间的**相关度**,并根据评分高低排序返回;另一种是**过滤机制**,只根据过滤条件对文档进行过滤,不计算评分,速度相对较快。 - - -- [1. 全文查询](#1-全文查询) - - [1.1. intervals query](#11-intervals-query) - - [1.2. match query](#12-match-query) - - [1.3. match_bool_prefix query](#13-match_bool_prefix-query) - - [1.4. match_phrase query](#14-match_phrase-query) - - [1.5. match_phrase_prefix query](#15-match_phrase_prefix-query) - - [1.6. multi_match query](#16-multi_match-query) - - [1.7. combined_fields query](#17-combined_fields-query) - - [1.8. common_terms query](#18-common_terms-query) - - [1.9. query_string query](#19-query_string-query) - - [1.10. simple_query_string query](#110-simple_query_string-query) - - [1.11. 全文查询完整示例](#111-全文查询完整示例) -- [2. 词项查询](#2-词项查询) - - [2.1. exists query](#21-exists-query) - - [2.2. fuzzy query](#22-fuzzy-query) - - [2.3. ids query](#23-ids-query) - - [2.4. prefix query](#24-prefix-query) - - [2.5. range query](#25-range-query) - - [2.6. regexp query](#26-regexp-query) - - [2.7. term query](#27-term-query) - - [2.8. terms query](#28-terms-query) - - [2.9. type query](#29-type-query) - - [2.10. wildcard query](#210-wildcard-query) - - [2.11. 词项查询完整示例](#211-词项查询完整示例) -- [3. 复合查询](#3-复合查询) - - [3.1. bool query](#31-bool-query) - - [3.2. boosting query](#32-boosting-query) - - [3.3. constant_score query](#33-constant_score-query) - - [3.4. dis_max query](#34-dis_max-query) - - [3.5. function_score query](#35-function_score-query) - - [3.6. indices query](#36-indices-query) -- [4. 嵌套查询](#4-嵌套查询) - - [4.1. nested query](#41-nested-query) - - [4.2. has_child query](#42-has_child-query) - - [4.3. has_parent query](#43-has_parent-query) -- [5. 位置查询](#5-位置查询) - - [5.1. geo_distance query](#51-geo_distance-query) - - [5.2. geo_bounding_box query](#52-geo_bounding_box-query) - - [5.3. geo_polygon query](#53-geo_polygon-query) - - [5.4. geo_shape query](#54-geo_shape-query) -- [6. 特殊查询](#6-特殊查询) - - [6.1. more_like_this query](#61-more_like_this-query) - - [6.2. script query](#62-script-query) - - [6.3. percolate query](#63-percolate-query) - - - ## 1. 全文查询 ES 全文查询主要用于在全文字段上,主要考虑查询词与文档的相关性(Relevance)。 diff --git a/docs/nosql/elasticsearch/Elasticsearch高亮.md b/docs/07.搜索引擎数据库/01.Elasticsearch/06.Elasticsearch高亮.md similarity index 97% rename from docs/nosql/elasticsearch/Elasticsearch高亮.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/06.Elasticsearch高亮.md index 585f8d0..358d4fd 100644 --- a/docs/nosql/elasticsearch/Elasticsearch高亮.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/06.Elasticsearch高亮.md @@ -1,16 +1,13 @@ +--- +title: Elasticsearch 高亮搜索及显示 +date: 2022-02-22 19:33:00 +permalink: /pages/588753/ +--- + # Elasticsearch 高亮搜索及显示 Elasticsearch 的高亮(highlight)可以让您从搜索结果中的一个或多个字段中获取突出显示的摘要,以便向用户显示查询匹配的位置。当您请求突出显示(即高亮)时,响应结果的 highlight 字段中包括高亮的字段和高亮的片段。Elasticsearch 默认会用 `` 标签标记关键字。 - - -- [1. 高亮参数](#1-高亮参数) -- [2. 自定义高亮片段](#2-自定义高亮片段) -- [3. 多字段高亮](#3-多字段高亮) -- [4. 高亮性能分析](#4-高亮性能分析) - - - ## 1. 高亮参数 ES 提供了如下高亮参数: diff --git a/docs/nosql/elasticsearch/Elasticsearch排序.md b/docs/07.搜索引擎数据库/01.Elasticsearch/07.Elasticsearch排序.md similarity index 95% rename from docs/nosql/elasticsearch/Elasticsearch排序.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/07.Elasticsearch排序.md index 3ee9a3e..6e18723 100644 --- a/docs/nosql/elasticsearch/Elasticsearch排序.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/07.Elasticsearch排序.md @@ -1,20 +1,13 @@ +--- +title: Elasticsearch 排序 +date: 2022-01-20 09:16:15 +permalink: /pages/91b465/ +--- + # Elasticsearch 排序 在 Elasticsearch 中,默认排序是**按照相关性的评分(\_score)**进行降序排序,也可以按照**字段的值排序**、**多级排序**、**多值字段排序、基于 geo(地理位置)排序以及自定义脚本排序**,除此之外,对于相关性的评分也可以用 rescore 二次、三次打分,它可以限定重新打分的窗口大小(window size),并针对作用范围内的文档修改其得分,从而达到精细化控制结果相关性的目的。 - - -- [1. 默认相关性排序](#1-默认相关性排序) - - [1.1. TF-IDF 模型](#11-tf-idf-模型) - - [1.2. BM25 模型](#12-bm25-模型) -- [2. 字段的值排序](#2-字段的值排序) -- [3. 多字段排序](#3-多字段排序) -- [4. 多值字段的排序](#4-多值字段的排序) -- [5. 地理位置上的距离排序](#5-地理位置上的距离排序) -- [6. 参考资料](#6-参考资料) - - - ## 1. 默认相关性排序 在 Elasticsearch 中,默认情况下,文档是按照相关性得分倒序排列的,其对应的相关性得分字段用 `_score` 来表示,它是浮点数类型,`_score` 评分越高,相关性越高。评分模型的选择可以通过 `similarity` 参数在映射中指定。 diff --git a/docs/nosql/elasticsearch/Elasticsearch聚合.md b/docs/07.搜索引擎数据库/01.Elasticsearch/08.Elasticsearch聚合.md similarity index 99% rename from docs/nosql/elasticsearch/Elasticsearch聚合.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/08.Elasticsearch聚合.md index e8a5872..8b66e65 100644 --- a/docs/nosql/elasticsearch/Elasticsearch聚合.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/08.Elasticsearch聚合.md @@ -1,3 +1,8 @@ +--- +title: Elasticsearch聚合 +date: 2022-01-20 09:16:15 +permalink: /pages/601224/ +--- # Elasticsearch 聚合 Elasticsearch 是一个分布式的全文搜索引擎,索引和搜索是 Elasticsearch 的基本功能。事实上,Elasticsearch 的聚合(Aggregations)功能也十分强大,允许在数据上做复杂的分析统计。Elasticsearch 提供的聚合分析功能主要有**指标聚合(metrics aggregations)**、**桶聚合(bucket aggregations)**、**管道聚合(pipeline aggregations)** 和 **矩阵聚合(matrix aggregations)** 四大类,管道聚合和矩阵聚合官方说明是在试验阶段,后期会完全更改或者移除,这里不再对管道聚合和矩阵聚合进行讲解。 diff --git a/docs/nosql/elasticsearch/Elasticsearch分析器.md b/docs/07.搜索引擎数据库/01.Elasticsearch/09.Elasticsearch分析器.md similarity index 99% rename from docs/nosql/elasticsearch/Elasticsearch分析器.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/09.Elasticsearch分析器.md index ff9253d..053cc56 100644 --- a/docs/nosql/elasticsearch/Elasticsearch分析器.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/09.Elasticsearch分析器.md @@ -1,3 +1,8 @@ +--- +title: Elasticsearch分析器 +date: 2022-01-20 09:36:08 +permalink: /pages/baef46/ +--- # Elasticsearch 分析器 在 ES 中,不管是索引任务还是搜索工作,都需要使用 analyzer(分析器)。分析器,分为**内置分析器**和**自定义的分析器**。 diff --git a/docs/nosql/elasticsearch/Elasticsearch性能优化.md b/docs/07.搜索引擎数据库/01.Elasticsearch/10.Elasticsearch性能优化.md similarity index 92% rename from docs/nosql/elasticsearch/Elasticsearch性能优化.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/10.Elasticsearch性能优化.md index a0fae06..a86187d 100644 --- a/docs/nosql/elasticsearch/Elasticsearch性能优化.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/10.Elasticsearch性能优化.md @@ -1,40 +1,13 @@ +--- +title: Elasticsearch 性能优化 +date: 2022-01-21 17:27:54 +permalink: /pages/cf8acd/ +--- + # Elasticsearch 性能优化 Elasticsearch 是当前流行的企业级搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。作为一个开箱即用的产品,在生产环境上线之后,我们其实不一定能确保其的性能和稳定性。如何根据实际情况提高服务的性能,其实有很多技巧。这章我们分享从实战经验中总结出来的 elasticsearch 性能优化,主要从硬件配置优化、索引优化设置、查询方面优化、数据结构优化、集群架构优化等方面讲解。 - - -- [1. 硬件配置优化](#1-硬件配置优化) - - [1.1. CPU 配置](#11-cpu-配置) - - [1.2. 内存配置](#12-内存配置) - - [1.3. 磁盘](#13-磁盘) -- [2. 索引优化设置](#2-索引优化设置) - - [2.1. 批量提交](#21-批量提交) - - [2.2. 增加 Refresh 时间间隔](#22-增加-refresh-时间间隔) - - [2.3. 修改 index_buffer_size 的设置](#23-修改-index_buffer_size-的设置) - - [2.4. 修改 translog 相关的设置](#24-修改-translog-相关的设置) - - [2.5. 注意 \_id 字段的使用](#25-注意-_id-字段的使用) - - [2.6. 注意 \_all 字段及 \_source 字段的使用](#26-注意-_all-字段及-_source-字段的使用) - - [2.7. 合理的配置使用 index 属性](#27-合理的配置使用-index-属性) - - [2.8. 减少副本数量](#28-减少副本数量) -- [3. 查询方面优化](#3-查询方面优化) - - [3.1. 路由优化](#31-路由优化) - - [3.2. Filter VS Query](#32-filter-vs-query) - - [3.3. 深度翻页](#33-深度翻页) - - [3.4. 脚本(script)合理使用](#34-脚本script合理使用) -- [4. 数据结构优化](#4-数据结构优化) - - [4.1. 尽量减少不需要的字段](#41-尽量减少不需要的字段) - - [4.2. Nested Object vs Parent/Child](#42-nested-object-vs-parentchild) - - [4.3. 选择静态映射,非必需时,禁止动态映射](#43-选择静态映射非必需时禁止动态映射) -- [5. 集群架构设计](#5-集群架构设计) - - [5.1. 主节点、数据节点和协调节点分离](#51-主节点数据节点和协调节点分离) - - [5.2. 关闭 data 节点服务器中的 http 功能](#52-关闭-data-节点服务器中的-http-功能) - - [5.3. 一台服务器上最好只部署一个 node](#53-一台服务器上最好只部署一个-node) - - [5.4. 集群分片设置](#54-集群分片设置) -- [6. 参考资料](#6-参考资料) - - - ## 1. 硬件配置优化 升级硬件设备配置一直都是提高服务能力最快速有效的手段,在系统层面能够影响应用性能的一般包括三个因素:CPU、内存和 IO,可以从这三方面进行 ES 的性能优化工作。 diff --git a/docs/nosql/elasticsearch/ElasticsearchRestApi.md b/docs/07.搜索引擎数据库/01.Elasticsearch/11.ElasticsearchRestApi.md similarity index 95% rename from docs/nosql/elasticsearch/ElasticsearchRestApi.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/11.ElasticsearchRestApi.md index 813c411..2d99909 100644 --- a/docs/nosql/elasticsearch/ElasticsearchRestApi.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/11.ElasticsearchRestApi.md @@ -1,3 +1,9 @@ +--- +title: Elasticsearch Rest API +date: 2022-01-10 09:34:00 +permalink: /pages/18103a/ +--- + # ElasticSearch Rest API > **[Elasticsearch](https://github.com/elastic/elasticsearch) 是一个分布式、RESTful 风格的搜索和数据分析引擎**,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 @@ -8,37 +14,6 @@ > > REST API 最详尽的文档应该参考:[ES 官方 REST API](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) - - -- [1. ElasticSearch Rest API 语法格式](#1-elasticsearch-rest-api-语法格式) -- [2. 索引 API](#2-索引-api) - - [2.1. 创建索引](#21-创建索引) - - [2.2. 删除索引](#22-删除索引) - - [2.3. 查看索引](#23-查看索引) - - [2.4. 索引别名](#24-索引别名) - - [2.5. 打开/关闭索引](#25-打开关闭索引) -- [3. 文档](#3-文档) - - [3.1. 创建文档](#31-创建文档) - - [3.2. 删除文档](#32-删除文档) - - [3.3. 更新文档](#33-更新文档) - - [3.4. 查询文档](#34-查询文档) - - [3.5. 全文搜索](#35-全文搜索) - - [3.6. 逻辑运算](#36-逻辑运算) - - [3.7. 批量执行](#37-批量执行) - - [3.8. 批量读取](#38-批量读取) - - [3.9. 批量查询](#39-批量查询) - - [3.10. URI Search 查询语义](#310-uri-search-查询语义) - - [3.11. Request Body & DSL](#311-request-body--dsl) -- [4. 集群 API](#4-集群-api) - - [4.1. 集群健康 API](#41-集群健康-api) - - [4.2. 集群状态 API](#42-集群状态-api) -- [5. 节点 API](#5-节点-api) -- [6. 分片 API](#6-分片-api) -- [7. 监控 API](#7-监控-api) -- [8. 参考资料](#8-参考资料) - - - ## 1. ElasticSearch Rest API 语法格式 向 Elasticsearch 发出的请求的组成部分与其它普通的 HTTP 请求是一样的: diff --git a/docs/nosql/elasticsearch/ElasticsearchHighLevelRestJavaApi.md b/docs/07.搜索引擎数据库/01.Elasticsearch/12.ElasticsearchHighLevelRestJavaApi.md similarity index 92% rename from docs/nosql/elasticsearch/ElasticsearchHighLevelRestJavaApi.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/12.ElasticsearchHighLevelRestJavaApi.md index 1d68005..516e5d7 100644 --- a/docs/nosql/elasticsearch/ElasticsearchHighLevelRestJavaApi.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/12.ElasticsearchHighLevelRestJavaApi.md @@ -1,30 +1,13 @@ +--- +title: ElasticSearch Java API 之 High Level REST Client +date: 2022-03-01 09:31:59 +permalink: /pages/90e1b8/ +--- + # ElasticSearch Java API 之 High Level REST Client > Elasticsearch 官方的 High Level REST Client 在 7.1.5.0 版本废弃。所以本文中的 API 不推荐使用。 - - -- [1. 快速开始](#1-快速开始) - - [1.1. 引入依赖](#11-引入依赖) - - [1.2. 创建连接和关闭](#12-创建连接和关闭) -- [2. 索引 API](#2-索引-api) - - [2.1. 测试准备](#21-测试准备) - - [2.2. 创建索引](#22-创建索引) - - [2.3. 删除索引](#23-删除索引) - - [2.4. 判断索引是否存在](#24-判断索引是否存在) -- [3. 文档 API](#3-文档-api) - - [3.1. 文档测试准备](#31-文档测试准备) - - [3.2. 创建文档](#32-创建文档) - - [3.3. 删除文档](#33-删除文档) - - [3.4. 更新文档](#34-更新文档) - - [3.5. 查看文档](#35-查看文档) - - [3.6. 获取匹配条件的记录总数](#36-获取匹配条件的记录总数) - - [3.7. 分页查询](#37-分页查询) - - [3.8. 条件查询](#38-条件查询) -- [4. 参考资料](#4-参考资料) - - - ## 1. 快速开始 ### 1.1. 引入依赖 diff --git a/docs/nosql/elasticsearch/Elasticsearch运维.md b/docs/07.搜索引擎数据库/01.Elasticsearch/20.Elasticsearch运维.md similarity index 93% rename from docs/nosql/elasticsearch/Elasticsearch运维.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/20.Elasticsearch运维.md index 691ee36..fdb87a4 100644 --- a/docs/nosql/elasticsearch/Elasticsearch运维.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/20.Elasticsearch运维.md @@ -1,21 +1,13 @@ +--- +title: Elasticsearch 运维 +date: 2022-01-13 09:03:49 +permalink: /pages/bd9759/ +--- + # Elasticsearch 运维 > [Elasticsearch](https://github.com/elastic/elasticsearch) 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 - - -- [1. Elasticsearch 安装](#1-elasticsearch-安装) -- [2. Elasticsearch 集群规划](#2-elasticsearch-集群规划) -- [3. Elasticsearch 配置](#3-elasticsearch-配置) -- [4. Elasticsearch FAQ](#4-elasticsearch-faq) - - [4.1. elasticsearch 不允许以 root 权限来运行](#41-elasticsearch-不允许以-root-权限来运行) - - [4.2. vm.max_map_count 不低于 262144](#42-vmmax_map_count-不低于-262144) - - [4.3. nofile 不低于 65536](#43-nofile-不低于-65536) - - [4.4. nproc 不低于 2048](#44-nproc-不低于-2048) -- [5. 参考资料](#5-参考资料) - - - ## 1. Elasticsearch 安装 > [Elasticsearch 官方下载安装说明](https://www.elastic.co/cn/downloads/elasticsearch) diff --git a/docs/nosql/elasticsearch/Elasticsearch集群和分片.md b/docs/07.搜索引擎数据库/01.Elasticsearch/Elasticsearch集群和分片.md similarity index 99% rename from docs/nosql/elasticsearch/Elasticsearch集群和分片.md rename to docs/07.搜索引擎数据库/01.Elasticsearch/Elasticsearch集群和分片.md index 93b7d29..2ca9c6f 100644 --- a/docs/nosql/elasticsearch/Elasticsearch集群和分片.md +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/Elasticsearch集群和分片.md @@ -1,3 +1,8 @@ +--- +title: Elasticsearch集群和分片 +date: 2022-03-01 19:11:07 +permalink: /pages/58cab4/ +--- # Elasticsearch 集群和分片 diff --git a/docs/07.搜索引擎数据库/01.Elasticsearch/README.md b/docs/07.搜索引擎数据库/01.Elasticsearch/README.md new file mode 100644 index 0000000..1d59a5e --- /dev/null +++ b/docs/07.搜索引擎数据库/01.Elasticsearch/README.md @@ -0,0 +1,66 @@ +--- +title: Elasticsearch 教程 +date: 2020-08-26 20:30:39 +permalink: /pages/d0a98e/ +--- + +# Elasticsearch 教程 + +> Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。 + +## 📖 内容 + +### [Elasticsearch 面试总结](01.Elasticsearch面试总结.md) 💯 + +### [Elasticsearch 快速入门](02.Elasticsearch快速入门.md) + +### [Elasticsearch 简介](03.Elasticsearch简介.md) + +### [Elasticsearch Rest API](11.ElasticsearchRestApi.md) + +### [ElasticSearch Java API 之 High Level REST Client](12.ElasticsearchHighLevelRestJavaApi.md) + +### [Elasticsearch 索引管理](04.Elasticsearch索引.md) + +### [Elasticsearch 查询](05.Elasticsearch查询.md) + +### [Elasticsearch 高亮](06.Elasticsearch高亮.md) + +### [Elasticsearch 排序](07.Elasticsearch排序.md) + +### [Elasticsearch 聚合](08.Elasticsearch聚合.md) + +### [Elasticsearch 分析器](09.Elasticsearch分析器.md) + +### [Elasticsearch 集群和分片](Elasticsearch集群和分片.md) + +### [Elasticsearch 运维](20.Elasticsearch运维.md) + +### [Elasticsearch 性能优化](10.Elasticsearch性能优化.md) + +## 📚 资料 + +- **官方** + - [Elasticsearch 官网](https://www.elastic.co/cn/products/elasticsearch) + - [Elasticsearch Github](https://github.com/elastic/elasticsearch) + - [Elasticsearch 官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html) + - [Elasticsearch: The Definitive Guide](https://www.elastic.co/guide/en/elasticsearch/guide/master/index.html) - ElasticSearch 官方学习资料 +- **书籍** + - [《Elasticsearch 实战》](https://book.douban.com/subject/30380439/) +- **教程** + - [ELK Stack 权威指南](https://github.com/chenryn/logstash-best-practice-cn) + - [Elasticsearch 教程](https://www.knowledgedict.com/tutorial/elasticsearch-intro.html) +- **文章** + - [Elasticsearch+Logstash+Kibana 教程](https://www.cnblogs.com/xing901022/p/4704319.html) + - [ELK(Elasticsearch、Logstash、Kibana)安装和配置](https://github.com/judasn/Linux-Tutorial/blob/master/ELK-Install-And-Settings.md) + - **性能调优相关**的工程实践 + - [Elasticsearch Performance Tuning Practice at eBay](https://www.ebayinc.com/stories/blogs/tech/elasticsearch-performance-tuning-practice-at-ebay/) + - [Elasticsearch at Kickstarter](https://kickstarter.engineering/elasticsearch-at-kickstarter-db3c487887fc) + - [9 tips on ElasticSearch configuration for high performance](https://www.loggly.com/blog/nine-tips-configuring-elasticsearch-for-high-performance/) + - [Elasticsearch In Production - Deployment Best Practices](https://medium.com/@abhidrona/elasticsearch-deployment-best-practices-d6c1323b25d7) +- **更多资源** + - [GitHub: Awesome ElasticSearch](https://github.com/dzharii/awesome-elasticsearch) + +## 🚪 传送 + +◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog) ◾ diff --git a/docs/07.搜索引擎数据库/02.Elastic/README.md b/docs/07.搜索引擎数据库/02.Elastic/README.md new file mode 100644 index 0000000..aa628a1 --- /dev/null +++ b/docs/07.搜索引擎数据库/02.Elastic/README.md @@ -0,0 +1,49 @@ +--- +title: Elastic 技术栈 +date: 2022-04-11 16:36:19 +permalink: /pages/e6513d/ +--- + +# Elastic 技术栈 + +> **Elastic 技术栈通常被用来作为日志采集、检索、可视化解决方案。** +> +> ELK 是 elastic 公司旗下三款产品 [Elasticsearch](https://www.elastic.co/products/elasticsearch) 、[Logstash](https://www.elastic.co/products/logstash) 、[Kibana](https://www.elastic.co/products/kibana) 的首字母组合。 +> +> [Logstash](https://www.elastic.co/products/logstash) 传输和处理你的日志、事务或其他数据。 +> +> [Kibana](https://www.elastic.co/products/kibana) 将 Elasticsearch 的数据分析并渲染为可视化的报表。 +> +> Elastic 技术栈,在 ELK 的基础上扩展了一些新的产品,如:[Beats](https://www.elastic.co/products/beats) 、[X-Pack](https://www.elastic.co/products/x-pack) 。 + +## 📖 内容 + +- [Elastic 技术栈快速入门](elastic-quickstart.md) +- [Beats 应用指南](elastic-beats.md) +- [Beats 运维](elastic-beats-ops.md) +- [Kibana 应用指南](elastic-kibana.md) +- [Kibana 运维](elastic-kibana-ops.md) +- [Logstash 应用指南](elastic-logstash.md) +- [Logstash 运维](elastic-logstash-ops.md) + +## 📚 资料 + +- **官方** + - [Logstash 官网](https://www.elastic.co/cn/products/logstash) + - [Logstash Github](https://github.com/elastic/logstash) + - [Logstash 官方文档](https://www.elastic.co/guide/en/logstash/current/index.html) + - [Kibana 官网](https://www.elastic.co/cn/products/kibana) + - [Kibana Github](https://github.com/elastic/kibana) + - [Kibana 官方文档](https://www.elastic.co/guide/en/kibana/current/index.html) + - [Beats 官网](https://www.elastic.co/cn/products/beats) + - [Beats Github](https://github.com/elastic/beats) + - [Beats 官方文档](https://www.elastic.co/guide/en/beats/libbeat/current/index.html) +- **第三方工具** + - [logstash-logback-encoder](https://github.com/logstash/logstash-logback-encoder) +- **文章** + - [Elasticsearch+Logstash+Kibana 教程](https://www.cnblogs.com/xing901022/p/4704319.html) + - [ELK(Elasticsearch、Logstash、Kibana)安装和配置](https://github.com/judasn/Linux-Tutorial/blob/master/ELK-Install-And-Settings.md) + +## 🚪 传送 + +◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog) ◾ diff --git a/docs/nosql/elasticsearch/elastic/elastic-beats-ops.md b/docs/07.搜索引擎数据库/02.Elastic/elastic-beats-ops.md similarity index 98% rename from docs/nosql/elasticsearch/elastic/elastic-beats-ops.md rename to docs/07.搜索引擎数据库/02.Elastic/elastic-beats-ops.md index 19ad8fd..09ae3fd 100644 --- a/docs/nosql/elasticsearch/elastic/elastic-beats-ops.md +++ b/docs/07.搜索引擎数据库/02.Elastic/elastic-beats-ops.md @@ -1,3 +1,8 @@ +--- +title: elastic-beats-ops +date: 2020-08-26 20:30:39 +permalink: /pages/ef03c1/ +--- # Filebeat 运维 > Beats 平台集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。 diff --git a/docs/nosql/elasticsearch/elastic/elastic-beats.md b/docs/07.搜索引擎数据库/02.Elastic/elastic-beats.md similarity index 98% rename from docs/nosql/elasticsearch/elastic/elastic-beats.md rename to docs/07.搜索引擎数据库/02.Elastic/elastic-beats.md index ba7b0d4..f86d4cd 100644 --- a/docs/nosql/elasticsearch/elastic/elastic-beats.md +++ b/docs/07.搜索引擎数据库/02.Elastic/elastic-beats.md @@ -1,13 +1,14 @@ --- title: Elastic 技术栈之 Filebeat -date: 2017-01-03 -categories: -- javatool -tags: -- java -- javatool -- log -- elastic +date: 2017-01-03 00:00:00 +categories: + - javatool +tags: + - java + - javatool + - log + - elastic +permalink: /pages/ae851d/ --- # Elastic 技术栈之 Filebeat diff --git a/docs/nosql/elasticsearch/elastic/elastic-kibana-ops.md b/docs/07.搜索引擎数据库/02.Elastic/elastic-kibana-ops.md similarity index 99% rename from docs/nosql/elasticsearch/elastic/elastic-kibana-ops.md rename to docs/07.搜索引擎数据库/02.Elastic/elastic-kibana-ops.md index a6e46a1..68f1f06 100644 --- a/docs/nosql/elasticsearch/elastic/elastic-kibana-ops.md +++ b/docs/07.搜索引擎数据库/02.Elastic/elastic-kibana-ops.md @@ -1,3 +1,8 @@ +--- +title: elastic-kibana-ops +date: 2020-08-26 20:30:39 +permalink: /pages/286fd3/ +--- # Kibana 运维 > 通过 Kibana,您可以对自己的 Elasticsearch 进行可视化,还可以在 Elastic Stack 中进行导航,这样您便可以进行各种操作了,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。 diff --git a/docs/nosql/elasticsearch/elastic/elastic-kibana.md b/docs/07.搜索引擎数据库/02.Elastic/elastic-kibana.md similarity index 99% rename from docs/nosql/elasticsearch/elastic/elastic-kibana.md rename to docs/07.搜索引擎数据库/02.Elastic/elastic-kibana.md index e0ec60b..f796d33 100644 --- a/docs/nosql/elasticsearch/elastic/elastic-kibana.md +++ b/docs/07.搜索引擎数据库/02.Elastic/elastic-kibana.md @@ -1,3 +1,8 @@ +--- +title: elastic-kibana +date: 2020-08-26 20:30:39 +permalink: /pages/0ee32c/ +--- # Elastic 技术栈之 Kibana ## Discover diff --git a/docs/nosql/elasticsearch/elastic/elastic-logstash-ops.md b/docs/07.搜索引擎数据库/02.Elastic/elastic-logstash-ops.md similarity index 99% rename from docs/nosql/elasticsearch/elastic/elastic-logstash-ops.md rename to docs/07.搜索引擎数据库/02.Elastic/elastic-logstash-ops.md index 8ef5914..1db46fb 100644 --- a/docs/nosql/elasticsearch/elastic/elastic-logstash-ops.md +++ b/docs/07.搜索引擎数据库/02.Elastic/elastic-logstash-ops.md @@ -1,3 +1,8 @@ +--- +title: elastic-logstash-ops +date: 2020-08-26 20:30:39 +permalink: /pages/da0a57/ +--- # Logstash 运维 > [Logstash](https://github.com/elastic/logstash) 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。 diff --git a/docs/nosql/elasticsearch/elastic/elastic-logstash.md b/docs/07.搜索引擎数据库/02.Elastic/elastic-logstash.md similarity index 99% rename from docs/nosql/elasticsearch/elastic/elastic-logstash.md rename to docs/07.搜索引擎数据库/02.Elastic/elastic-logstash.md index 6ba3b63..0318873 100644 --- a/docs/nosql/elasticsearch/elastic/elastic-logstash.md +++ b/docs/07.搜索引擎数据库/02.Elastic/elastic-logstash.md @@ -1,3 +1,8 @@ +--- +title: elastic-logstash +date: 2020-08-26 20:30:39 +permalink: /pages/ccea12/ +--- # Elastic 技术栈之 Logstash 基础 > 本文是 Elastic 技术栈(ELK)的 Logstash 应用。 diff --git a/docs/nosql/elasticsearch/elastic/elastic-quickstart.md b/docs/07.搜索引擎数据库/02.Elastic/elastic-quickstart.md similarity index 99% rename from docs/nosql/elasticsearch/elastic/elastic-quickstart.md rename to docs/07.搜索引擎数据库/02.Elastic/elastic-quickstart.md index 1d5dc7a..0e920f7 100644 --- a/docs/nosql/elasticsearch/elastic/elastic-quickstart.md +++ b/docs/07.搜索引擎数据库/02.Elastic/elastic-quickstart.md @@ -1,3 +1,8 @@ +--- +title: elastic-quickstart +date: 2020-08-26 20:30:39 +permalink: /pages/528196/ +--- # Elastic 快速入门 > 开源协议:[Apache 2.0](https://github.com/elastic/elasticsearch/tree/7.4/licenses/APACHE-LICENSE-2.0.txt) diff --git a/docs/@pages/archivesPage.md b/docs/@pages/archivesPage.md new file mode 100644 index 0000000..c021f6b --- /dev/null +++ b/docs/@pages/archivesPage.md @@ -0,0 +1,6 @@ +--- +archivesPage: true +title: 归档 +permalink: /archives/ +article: false +--- \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 6def6ad..85291f5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,27 +1,41 @@ --- home: true -heroImage: https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png +heroImage: img/bg.gif heroText: DB-TUTORIAL -tagline: 💾 db-tutorial 是一个数据库教程。 -actionLink: / +tagline: ☕ db-tutorial 是一个数据库教程。 +bannerBg: none +postList: none footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu --- -![license](https://badgen.net/github/license/dunwu/db-tutorial) -![build](https://api.travis-ci.com/dunwu/db-tutorial.svg?branch=master) +

+ + + star + + + + fork + + + + commit + + + + code style + + +

> 💾 **db-tutorial** 是一个数据库教程。 > > - 🔁 项目同步维护:[Github](https://github.com/dunwu/db-tutorial/) | [Gitee](https://gitee.com/turnon/db-tutorial/) > - 📖 电子书阅读:[Github Pages](https://dunwu.github.io/db-tutorial/) | [Gitee Pages](https://turnon.gitee.io/db-tutorial/) -## 数据库原理 +## 数据库综合 -### 数据结构 - -TODO... - -### 分布式 +### 分布式存储原理 - [分布式简介](https://dunwu.github.io/design/distributed/分布式简介.html) - [分布式基础理论](https://dunwu.github.io/design/distributed/分布式理论.html) - 关键词:`拜占庭将军`、`CAP`、`BASE` @@ -37,32 +51,83 @@ TODO... - [分布式会话](https://dunwu.github.io/design/distributed/分布式会话.html) - 关键词:`粘性 Session`、`Session 复制共享`、`基于缓存的 session 共享` - [流量控制](https://dunwu.github.io/design/distributed/流量控制.html) - 关键词:`计数器法`、`时间窗口法`、`令牌桶法`、`漏桶法` +### 其他 + +- [Nosql 技术选型](01.数据库综合/01.Nosql技术选型.md) +- [数据结构与数据库索引](01.数据库综合/02.数据结构与数据库索引.md) + +## 数据库中间件 + +- [ShardingSphere 简介](02.数据库中间件/01.Shardingsphere/01.ShardingSphere简介.md) +- [ShardingSphere Jdbc](02.数据库中间件/01.Shardingsphere/02.ShardingSphereJdbc.md) +- [版本管理中间件 Flyway](02.数据库中间件/02.Flyway.md) + ## 关系型数据库 -> [关系型数据库](sql) 整理主流关系型数据库知识点。 +> [关系型数据库](03.关系型数据库) 整理主流关系型数据库知识点。 -- [关系型数据库面试总结](sql/common/sql-interview.md) 💯 -- [SQL Cheat Sheet](sql/common/sql-cheat-sheet.md) 是一个 SQL 入门教程。 +### 公共知识 -### [Mysql](sql/mysql) +- [关系型数据库面试总结](03.关系型数据库/01.综合/01.关系型数据库面试.md) 💯 +- [SQL Cheat Sheet](03.关系型数据库/01.综合/02.SqlCheatSheet.md) 是一个 SQL 入门教程。 +- [扩展 SQL](03.关系型数据库/01.综合/03.扩展SQL.md) 是一个 SQL 入门教程。 + +### Mysql ![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716103611.png) -- [Mysql 应用指南](sql/mysql/mysql-quickstart.md) ⚡ -- [Mysql 工作流](sql/mysql/mysql-workflow.md) - 关键词:`连接`、`缓存`、`语法分析`、`优化`、`执行引擎`、`redo log`、`bin log`、`两阶段提交` -- [Mysql 索引](sql/mysql/mysql-index.md) - 关键词:`Hash`、`B 树`、`聚簇索引`、`回表` -- [Mysql 锁](sql/mysql/mysql-lock.md) - 关键词:`乐观锁`、`表级锁`、`行级锁`、`意向锁`、`MVCC`、`Next-key 锁` -- [Mysql 事务](sql/mysql/mysql-transaction.md) - 关键词:`ACID`、`AUTOCOMMIT`、`事务隔离级别`、`死锁`、`分布式事务` -- [Mysql 性能优化](sql/mysql/mysql-optimization.md) -- [Mysql 运维](sql/mysql/mysql-ops.md) 🔨 -- [Mysql 配置](sql/mysql/mysql-config.md) -- [Mysql 问题](sql/mysql/mysql-faq.md) +- [Mysql 应用指南](03.关系型数据库/02.Mysql/01.Mysql应用指南.md) ⚡ +- [Mysql 工作流](03.关系型数据库/02.Mysql/02.MySQL工作流.md) - 关键词:`连接`、`缓存`、`语法分析`、`优化`、`执行引擎`、`redo log`、`bin log`、`两阶段提交` +- [Mysql 事务](03.关系型数据库/02.Mysql/03.Mysql事务.md) - 关键词:`ACID`、`AUTOCOMMIT`、`事务隔离级别`、`死锁`、`分布式事务` +- [Mysql 锁](03.关系型数据库/02.Mysql/04.Mysql锁.md) - 关键词:`乐观锁`、`表级锁`、`行级锁`、`意向锁`、`MVCC`、`Next-key 锁` +- [Mysql 索引](03.关系型数据库/02.Mysql/05.Mysql索引.md) - 关键词:`Hash`、`B 树`、`聚簇索引`、`回表` +- [Mysql 性能优化](03.关系型数据库/02.Mysql/06.Mysql性能优化.md) +- [Mysql 运维](03.关系型数据库/02.Mysql/20.Mysql运维.md) 🔨 +- [Mysql 配置](03.关系型数据库/02.Mysql/21.Mysql配置.md) 🔨 +- [Mysql 问题](03.关系型数据库/02.Mysql/99.Mysql常见问题.md) ### 其他 -- [H2 应用指南](sql/h2.md) -- [SqLite 应用指南](sql/sqlite.md) -- [PostgreSQL 应用指南](sql/postgresql.md) +- [PostgreSQL 应用指南](03.关系型数据库/99.其他/01.PostgreSQL.md) +- [H2 应用指南](03.关系型数据库/99.其他/02.H2.md) +- [SqLite 应用指南](03.关系型数据库/99.其他/03.Sqlite.md) + +## 文档数据库 + +### MongoDB + +> MongoDB 是一个基于文档的分布式数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 +> +> MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品。它是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。 +> +> MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 + +- [MongoDB 应用指南](04.文档数据库/01.MongoDB/01.MongoDB应用指南.md) +- [MongoDB 的 CRUD 操作](04.文档数据库/01.MongoDB/02.MongoDB的CRUD操作.md) +- [MongoDB 聚合操作](04.文档数据库/01.MongoDB/03.MongoDB的聚合操作.md) +- [MongoDB 事务](04.文档数据库/01.MongoDB/04.MongoDB事务.md) +- [MongoDB 建模](04.文档数据库/01.MongoDB/05.MongoDB建模.md) +- [MongoDB 建模示例](04.文档数据库/01.MongoDB/06.MongoDB建模示例.md) +- [MongoDB 索引](04.文档数据库/01.MongoDB/07.MongoDB索引.md) +- [MongoDB 复制](04.文档数据库/01.MongoDB/08.MongoDB复制.md) +- [MongoDB 分片](04.文档数据库/01.MongoDB/09.MongoDB分片.md) +- [MongoDB 运维](04.文档数据库/01.MongoDB/20.MongoDB运维.md) + +## KV 数据库 + +### Redis + +![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713105627.png) + +- [Redis 面试总结](05.KV数据库/01.Redis/01.Redis面试总结.md) 💯 +- [Redis 应用指南](05.KV数据库/01.Redis/02.Redis应用指南.md) ⚡ - 关键词:`内存淘汰`、`事件`、`事务`、`管道`、`发布与订阅` +- [Redis 数据类型和应用](05.KV数据库/01.Redis/03.Redis数据类型和应用.md) - 关键词:`STRING`、`HASH`、`LIST`、`SET`、`ZSET`、`BitMap`、`HyperLogLog`、`Geo` +- [Redis 持久化](05.KV数据库/01.Redis/04.Redis持久化.md) - 关键词:`RDB`、`AOF`、`SAVE`、`BGSAVE`、`appendfsync` +- [Redis 复制](05.KV数据库/01.Redis/05.Redis复制.md) - 关键词:`SLAVEOF`、`SYNC`、`PSYNC`、`REPLCONF ACK` +- [Redis 哨兵](05.KV数据库/01.Redis/06.Redis哨兵.md) - 关键词:`Sentinel`、`PING`、`INFO`、`Raft` +- [Redis 集群](05.KV数据库/01.Redis/07.Redis集群.md) - 关键词:`CLUSTER MEET`、`Hash slot`、`MOVED`、`ASK`、`SLAVEOF no one`、`redis-trib` +- [Redis 实战](05.KV数据库/01.Redis/08.Redis实战.md) - 关键词:`缓存`、`分布式锁`、`布隆过滤器` +- [Redis 运维](05.KV数据库/01.Redis/20.Redis运维.md) 🔨 - 关键词:`安装`、`命令`、`集群`、`客户端` ## 列式数据库 @@ -75,65 +140,25 @@ TODO... - [HBase 应用](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/HBase应用.md) - [HBase 运维](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/HBase运维.md) -## KV 数据库 - -### Redis - -![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713105627.png) - -- [Redis 面试总结](nosql/redis/redis-interview.md) 💯 -- [Redis 应用指南](nosql/redis/redis-quickstart.md) ⚡ - 关键词:`内存淘汰`、`事件`、`事务`、`管道`、`发布与订阅` -- [Redis 数据类型和应用](nosql/redis/redis-datatype.md) - 关键词:`STRING`、`HASH`、`LIST`、`SET`、`ZSET`、`BitMap`、`HyperLogLog`、`Geo` -- [Redis 持久化](nosql/redis/redis-persistence.md) - 关键词:`RDB`、`AOF`、`SAVE`、`BGSAVE`、`appendfsync` -- [Redis 复制](nosql/redis/redis-replication.md) - 关键词:`SLAVEOF`、`SYNC`、`PSYNC`、`REPLCONF ACK` -- [Redis 哨兵](nosql/redis/redis-sentinel.md) - 关键词:`Sentinel`、`PING`、`INFO`、`Raft` -- [Redis 集群](nosql/redis/redis-cluster.md) - 关键词:`CLUSTER MEET`、`Hash slot`、`MOVED`、`ASK`、`SLAVEOF no one`、`redis-trib` -- [Redis 实战](nosql/redis/redis-action.md) - 关键词:`缓存`、`分布式锁`、`布隆过滤器` -- [Redis 运维](nosql/redis/redis-ops.md) 🔨 - 关键词:`安装`、`命令`、`集群`、`客户端` - -## 文档数据库 - -### MongoDB - -> MongoDB 是一个基于文档的分布式数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 -> -> MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品。它是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。 -> -> MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 - -- [MongoDB 应用指南](nosql/mongodb/mongodb-quickstart.md) -- [MongoDB 聚合操作](nosql/mongodb/mongodb-aggregation.md) -- [MongoDB 建模](nosql/mongodb/mongodb-model.md) -- [MongoDB 建模示例](nosql/mongodb/mongodb-model-example.md) -- [MongoDB 索引](nosql/mongodb/mongodb-index.md) -- [MongoDB 复制](nosql/mongodb/mongodb-replication.md) -- [MongoDB 分片](nosql/mongodb/mongodb-sharding.md) -- [MongoDB 运维](nosql/mongodb/mongodb-ops.md) - ## 搜索引擎数据库 ### Elasticsearch > Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。 -- [Elasticsearch 面试总结](nosql/elasticsearch/elasticsearch-interview.md) 💯 -- [Elasticsearch 快速入门](nosql/elasticsearch/Elasticsearch快速入门.md) -- [Elasticsearch 简介](nosql/elasticsearch/Elasticsearch简介.md) -- [Elasticsearch Rest API](nosql/elasticsearch/ElasticsearchRestApi.md) -- [ElasticSearch Java API 之 High Level REST Client](nosql/elasticsearch/ElasticsearchHighLevelRestJavaApi.md) -- [Elasticsearch 索引管理](nosql/elasticsearch/Elasticsearch索引管理.md) -- [Elasticsearch 查询](nosql/elasticsearch/Elasticsearch查询.md) -- [Elasticsearch 高亮](nosql/elasticsearch/Elasticsearch高亮.md) -- [Elasticsearch 排序](nosql/elasticsearch/Elasticsearch排序.md) -- [Elasticsearch 聚合](nosql/elasticsearch/Elasticsearch聚合.md) -- [Elasticsearch 分析器](nosql/elasticsearch/Elasticsearch分析器.md) -- [Elasticsearch 运维](nosql/elasticsearch/Elasticsearch运维.md) -- [Elasticsearch 性能优化](nosql/elasticsearch/Elasticsearch性能优化.md) - -## 中间件 - -- [版本管理中间件 flyway](middleware/flyway.md) -- [分库分表中间件 ShardingSphere](middleware/shardingsphere.md) +- [Elasticsearch 面试总结](07.搜索引擎数据库/01.Elasticsearch/01.Elasticsearch面试总结.md) 💯 +- [Elasticsearch 快速入门](07.搜索引擎数据库/01.Elasticsearch/02.Elasticsearch快速入门.md) +- [Elasticsearch 简介](07.搜索引擎数据库/01.Elasticsearch/03.Elasticsearch简介.md) +- [Elasticsearch 索引](07.搜索引擎数据库/01.Elasticsearch/04.Elasticsearch索引.md) +- [Elasticsearch 查询](07.搜索引擎数据库/01.Elasticsearch/05.Elasticsearch查询.md) +- [Elasticsearch 高亮](07.搜索引擎数据库/01.Elasticsearch/06.Elasticsearch高亮.md) +- [Elasticsearch 排序](07.搜索引擎数据库/01.Elasticsearch/07.Elasticsearch排序.md) +- [Elasticsearch 聚合](07.搜索引擎数据库/01.Elasticsearch/08.Elasticsearch聚合.md) +- [Elasticsearch 分析器](07.搜索引擎数据库/01.Elasticsearch/09.Elasticsearch分析器.md) +- [Elasticsearch 性能优化](07.搜索引擎数据库/01.Elasticsearch/10.Elasticsearch性能优化.md) +- [Elasticsearch Rest API](07.搜索引擎数据库/01.Elasticsearch/11.ElasticsearchRestApi.md) +- [ElasticSearch Java API 之 High Level REST Client](07.搜索引擎数据库/01.Elasticsearch/12.ElasticsearchHighLevelRestJavaApi.md) +- [Elasticsearch 运维](07.搜索引擎数据库/01.Elasticsearch/20.Elasticsearch运维.md) ## 资料 📚 @@ -146,7 +171,7 @@ TODO... - [CMU 15445 数据库基础课程](https://15445.courses.cs.cmu.edu/fall2019/schedule.html) - [CMU 15721 数据库高级课程](https://15721.courses.cs.cmu.edu/spring2020/schedule.html) - [检索技术核心 20 讲](https://time.geekbang.org/column/intro/100048401) - 极客教程【进阶】 - - [后端存储实战课](https://time.geekbang.org/column/intro/100046801) - 极客教程【进阶】 + - [后端存储实战课](https://time.geekbang.org/column/intro/100046801) - 极客教程【入门】:讲解存储在电商领域的种种应用和一些基本特性 - **论文** - [Efficiency in the Columbia Database Query Optimizer](https://15721.courses.cs.cmu.edu/spring2018/papers/15-optimizer1/xu-columbia-thesis1998.pdf) - [How Good Are Query Optimizers, Really?](http://www.vldb.org/pvldb/vol9/p204-leis.pdf) @@ -200,8 +225,7 @@ TODO... - [Better Parallel Replication for MySQL](https://medium.com/booking-com-infrastructure/better-parallel-replication-for-mysql-14e2d7857813) - [Evaluating MySQL Parallel Replication Part 2: Slave Group Commit](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-2-slave-group-commit-459026a141d2) - [Evaluating MySQL Parallel Replication Part 3: Benchmarks in Production](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-3-benchmarks-in-production-db5811058d74) - - [Evaluating MySQL Parallel Replication Part 4: More Benchmarks in Production - ](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-more-benchmarks-in-production-49ee255043ab) + - [Evaluating MySQL Parallel Replication Part 4: More Benchmarks in Production](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-more-benchmarks-in-production-49ee255043ab) - [Evaluating MySQL Parallel Replication Part 4, Annex: Under the Hood](https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-annex-under-the-hood-eb456cf8b2fb) - Mysql 数据分区 - [StackOverflow: MySQL sharding approaches?](https://stackoverflow.com/questions/5541421/mysql-sharding-approaches) @@ -209,8 +233,7 @@ TODO... - [How to Scale Big Data Applications](https://www.percona.com/sites/default/files/presentations/How to Scale Big Data Applications.pdf) - [MySQL Sharding with ProxySQL](https://www.percona.com/blog/2016/08/30/mysql-sharding-with-proxysql/) - 各公司的 Mysql 数据分区经验分享 - - [MailChimp: Using Shards to Accommodate Millions of Users - ](https://devs.mailchimp.com/blog/using-shards-to-accommodate-millions-of-users/) + - [MailChimp: Using Shards to Accommodate Millions of Users](https://devs.mailchimp.com/blog/using-shards-to-accommodate-millions-of-users/) - [Uber: Code Migration in Production: Rewriting the Sharding Layer of Uber’s Schemaless Datastore](https://eng.uber.com/schemaless-rewrite/) - [Sharding & IDs at Instagram](https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c) - [Airbnb: How We Partitioned Airbnb’s Main Database in Two Weeks](https://medium.com/airbnb-engineering/how-we-partitioned-airbnb-s-main-database-in-two-weeks-55f7e006ff21) diff --git a/docs/nosql/elasticsearch/README.md b/docs/nosql/elasticsearch/README.md deleted file mode 100644 index c0112c3..0000000 --- a/docs/nosql/elasticsearch/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# Elasticsearch 教程 - -> Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。 - -## 📖 内容 - -### [Elasticsearch 面试总结](elasticsearch-interview.md) 💯 - -### [Elasticsearch 快速入门](Elasticsearch快速入门.md) - -### [Elasticsearch 简介](Elasticsearch简介.md) - -### [Elasticsearch Rest API](ElasticsearchRestApi.md) - -### [ElasticSearch Java API 之 High Level REST Client](ElasticsearchHighLevelRestJavaApi.md) - -### [Elasticsearch 索引管理](Elasticsearch索引管理.md) - -### [Elasticsearch 查询](Elasticsearch查询.md) - -### [Elasticsearch 高亮](Elasticsearch高亮.md) - -### [Elasticsearch 排序](Elasticsearch排序.md) - -### [Elasticsearch 聚合](Elasticsearch聚合.md) - -### [Elasticsearch 分析器](Elasticsearch分析器.md) - -### [Elasticsearch 集群和分片](Elasticsearch集群和分片.md) - -### [Elasticsearch 运维](Elasticsearch运维.md) - -### [Elasticsearch 性能优化](Elasticsearch性能优化.md) - -### Elastic 技术栈 - -> **Elastic 技术栈通常被用来作为日志采集、检索、可视化解决方案。** -> -> ELK 是 elastic 公司旗下三款产品 [Elasticsearch](https://www.elastic.co/products/elasticsearch) 、[Logstash](https://www.elastic.co/products/logstash) 、[Kibana](https://www.elastic.co/products/kibana) 的首字母组合。 -> -> [Logstash](https://www.elastic.co/products/logstash) 传输和处理你的日志、事务或其他数据。 -> -> [Kibana](https://www.elastic.co/products/kibana) 将 Elasticsearch 的数据分析并渲染为可视化的报表。 -> -> Elastic 技术栈,在 ELK 的基础上扩展了一些新的产品,如:[Beats](https://www.elastic.co/products/beats) 、[X-Pack](https://www.elastic.co/products/x-pack) 。 - -- [Elastic 技术栈快速入门](nosql/elasticsearch/elastic/elastic-quickstart.md) -- [Beats 应用指南](nosql/elasticsearch/elastic/elastic-beats.md) -- [Beats 运维](nosql/elasticsearch/elastic/elastic-beats-ops.md) -- [Kibana 应用指南](nosql/elasticsearch/elastic/elastic-kibana.md) -- [Kibana 运维](nosql/elasticsearch/elastic/elastic-kibana-ops.md) -- [Logstash 应用指南](nosql/elasticsearch/elastic/elastic-logstash.md) -- [Logstash 运维](nosql/elasticsearch/elastic/elastic-logstash-ops.md) - -## 📚 资料 - -### Elasticsearch 资料 - -- **官方** - - [Elasticsearch 官网](https://www.elastic.co/cn/products/elasticsearch) - - [Elasticsearch Github](https://github.com/elastic/elasticsearch) - - [Elasticsearch 官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html) - - [Elasticsearch: The Definitive Guide](https://www.elastic.co/guide/en/elasticsearch/guide/master/index.html) - ElasticSearch 官方学习资料 -- **书籍** - - [《Elasticsearch 实战》](https://book.douban.com/subject/30380439/) -- **教程** - - [ELK Stack 权威指南](https://github.com/chenryn/logstash-best-practice-cn) - - [Elasticsearch 教程](https://www.knowledgedict.com/tutorial/elasticsearch-intro.html) -- **文章** - - [Elasticsearch+Logstash+Kibana 教程](https://www.cnblogs.com/xing901022/p/4704319.html) - - [ELK(Elasticsearch、Logstash、Kibana)安装和配置](https://github.com/judasn/Linux-Tutorial/blob/master/ELK-Install-And-Settings.md) - - **性能调优相关**的工程实践 - - [Elasticsearch Performance Tuning Practice at eBay](https://www.ebayinc.com/stories/blogs/tech/elasticsearch-performance-tuning-practice-at-ebay/) - - [Elasticsearch at Kickstarter](https://kickstarter.engineering/elasticsearch-at-kickstarter-db3c487887fc) - - [9 tips on ElasticSearch configuration for high performance](https://www.loggly.com/blog/nine-tips-configuring-elasticsearch-for-high-performance/) - - [Elasticsearch In Production - Deployment Best Practices](https://medium.com/@abhidrona/elasticsearch-deployment-best-practices-d6c1323b25d7) -- **更多资源** - - [GitHub: Awesome ElasticSearch](https://github.com/dzharii/awesome-elasticsearch) - -### Elastic 技术栈资料 - -- **官方** - - [Logstash 官网](https://www.elastic.co/cn/products/logstash) - - [Logstash Github](https://github.com/elastic/logstash) - - [Logstash 官方文档](https://www.elastic.co/guide/en/logstash/current/index.html) - - [Kibana 官网](https://www.elastic.co/cn/products/kibana) - - [Kibana Github](https://github.com/elastic/kibana) - - [Kibana 官方文档](https://www.elastic.co/guide/en/kibana/current/index.html) - - [Beats 官网](https://www.elastic.co/cn/products/beats) - - [Beats Github](https://github.com/elastic/beats) - - [Beats 官方文档](https://www.elastic.co/guide/en/beats/libbeat/current/index.html) -- **第三方工具** - - [logstash-logback-encoder](https://github.com/logstash/logstash-logback-encoder) -- **文章** - - [Elasticsearch+Logstash+Kibana 教程](https://www.cnblogs.com/xing901022/p/4704319.html) - - [ELK(Elasticsearch、Logstash、Kibana)安装和配置](https://github.com/judasn/Linux-Tutorial/blob/master/ELK-Install-And-Settings.md) - -## 🚪 传送 - -◾ 🏠 [DB-TUTORIAL 首页](https://github.com/dunwu/db-tutorial) ◾ 🎯 [我的博客](https://github.com/dunwu/blog) ◾ diff --git a/utils/config.yml b/utils/config.yml new file mode 100644 index 0000000..6fac6a2 --- /dev/null +++ b/utils/config.yml @@ -0,0 +1,14 @@ +#批量添加和修改、删除front matter配置文件 + +# 需要批量处理的路径,docs文件夹内的文件夹 (数组。映射路径:docs/arr[0]/arr[1] ... ) +path: + - docs # 第一个成员必须是docs + +# 要删除的字段 (数组) +delete: + # - test + # - tags + + # 要添加、修改front matter的数据 (front matter中没有的数据则添加,已有的数据则覆盖) +data: + article: false \ No newline at end of file diff --git a/utils/editFrontmatter.js b/utils/editFrontmatter.js new file mode 100644 index 0000000..8c223f4 --- /dev/null +++ b/utils/editFrontmatter.js @@ -0,0 +1,92 @@ +/** + * 批量添加和修改front matter ,需要配置 ./config.yml 文件。 + */ +const fs = require('fs'); // 文件模块 +const path = require('path'); // 路径模块 +const matter = require('gray-matter'); // front matter解析器 https://github.com/jonschlinkert/gray-matter +const jsonToYaml = require('json2yaml') +const yamlToJs = require('yamljs') +const inquirer = require('inquirer') // 命令行操作 +const chalk = require('chalk') // 命令行打印美化 +const readFileList = require('./modules/readFileList'); +const { type, repairDate} = require('./modules/fn'); +const log = console.log + +const configPath = path.join(__dirname, 'config.yml') // 配置文件的路径 + +main(); + +/** + * 主体函数 + */ +async function main() { + + const promptList = [{ + type: "confirm", + message: chalk.yellow('批量操作frontmatter有修改数据的风险,确定要继续吗?'), + name: "edit", + }]; + let edit = true; + + await inquirer.prompt(promptList).then(answers => { + edit = answers.edit + }) + + if(!edit) { // 退出操作 + return + } + + const config = yamlToJs.load(configPath) // 解析配置文件的数据转为js对象 + + if (type(config.path) !== 'array') { + log(chalk.red('路径配置有误,path字段应该是一个数组')) + return + } + + if (config.path[0] !== 'docs') { + log(chalk.red("路径配置有误,path数组的第一个成员必须是'docs'")) + return + } + + const filePath = path.join(__dirname, '..', ...config.path); // 要批量修改的文件路径 + const files = readFileList(filePath); // 读取所有md文件数据 + + files.forEach(file => { + let dataStr = fs.readFileSync(file.filePath, 'utf8');// 读取每个md文件的内容 + const fileMatterObj = matter(dataStr) // 解析md文件的front Matter。 fileMatterObj => {content:'剔除frontmatter后的文件内容字符串', data:{}, ...} + let matterData = fileMatterObj.data; // 得到md文件的front Matter + + let mark = false + // 删除操作 + if (config.delete) { + if( type(config.delete) !== 'array' ) { + log(chalk.yellow('未能完成删除操作,delete字段的值应该是一个数组!')) + } else { + config.delete.forEach(item => { + if (matterData[item]) { + delete matterData[item] + mark = true + } + }) + + } + } + + // 添加、修改操作 + if (type(config.data) === 'object') { + Object.assign(matterData, config.data) // 将配置数据合并到front Matter对象 + mark = true + } + + // 有操作时才继续 + if (mark) { + if(matterData.date && type(matterData.date) === 'date') { + matterData.date = repairDate(matterData.date) // 修复时间格式 + } + const newData = jsonToYaml.stringify(matterData).replace(/\n\s{2}/g,"\n").replace(/"/g,"") + '---\r\n' + fileMatterObj.content; + fs.writeFileSync(file.filePath, newData); // 写入 + log(chalk.green(`update frontmatter:${file.filePath} `)) + } + + }) +} diff --git a/utils/modules/fn.js b/utils/modules/fn.js new file mode 100644 index 0000000..48cbbd1 --- /dev/null +++ b/utils/modules/fn.js @@ -0,0 +1,21 @@ +// 类型判断 +exports.type = function (o){ + var s = Object.prototype.toString.call(o) + return s.match(/\[object (.*?)\]/)[1].toLowerCase() +} + + // 修复date时区格式的问题 + exports.repairDate = function (date) { + date = new Date(date); + return `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; +} + +// 日期的格式 +exports.dateFormat = function (date) { + return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}` +} + +// 小于10补0 +function zero(d){ + return d.toString().padStart(2,'0') +} \ No newline at end of file diff --git a/utils/modules/readFileList.js b/utils/modules/readFileList.js new file mode 100644 index 0000000..8eb97c6 --- /dev/null +++ b/utils/modules/readFileList.js @@ -0,0 +1,43 @@ +/** + * 读取所有md文件数据 + */ +const fs = require('fs'); // 文件模块 +const path = require('path'); // 路径模块 +const docsRoot = path.join(__dirname, '..', '..', 'docs'); // docs文件路径 + +function readFileList(dir = docsRoot, filesList = []) { + const files = fs.readdirSync(dir); + files.forEach( (item, index) => { + let filePath = path.join(dir, item); + const stat = fs.statSync(filePath); + if (stat.isDirectory() && item !== '.vuepress') { + readFileList(path.join(dir, item), filesList); //递归读取文件 + } else { + if(path.basename(dir) !== 'docs'){ // 过滤docs目录级下的文件 + + const fileNameArr = path.basename(filePath).split('.') + let name = null, type = null; + if (fileNameArr.length === 2) { // 没有序号的文件 + name = fileNameArr[0] + type = fileNameArr[1] + } else if (fileNameArr.length === 3) { // 有序号的文件 + name = fileNameArr[1] + type = fileNameArr[2] + } else { // 超过两个‘.’的 + log(chalk.yellow(`warning: 该文件 "${filePath}" 没有按照约定命名,将忽略生成相应数据。`)) + return + } + if(type === 'md'){ // 过滤非md文件 + filesList.push({ + name, + filePath + }); + } + + } + } + }); + return filesList; +} + +module.exports = readFileList; \ No newline at end of file