diff --git a/404.html b/404.html index dbacf3e..184d60e 100644 --- a/404.html +++ b/404.html @@ -16,13 +16,13 @@ - + -

404

How did we get here?
+ - + diff --git a/assets/js/19.1f71a0e2.js b/assets/js/19.1f71a0e2.js deleted file mode 100644 index 8566382..0000000 --- a/assets/js/19.1f71a0e2.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{261:function(t,e,v){"use strict";v.r(e);var _=v(2),a=Object(_.a)({},(function(){var t=this,e=t.$createElement,v=t._self._c||e;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"数据库"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#数据库"}},[t._v("#")]),t._v(" 数据库 🔎")]),t._v(" "),v("p",[t._v("数据库不是凭空产生的,它们是为了解决实际使用中提出的问题,在RDBMS(关系数据库管理系统)出现的环境中,数据库插叙你的灵活性比灵活的模式更重要")]),t._v(" "),v("h2",{attrs:{id:"数据库概述"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#数据库概述"}},[t._v("#")]),t._v(" 数据库概述")]),t._v(" "),v("p",[t._v("本节包含了9种数据库的信息")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th"),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("MongoDB")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("counchDB")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Riak")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Redis")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("PostgreSQL")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Neo4J")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("HBase")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Mysql")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Clickhouse")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文档")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文档")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("键-值")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("键-值")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("关系")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("图")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("列")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("关系")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("列")])]),t._v(" "),v("tr",[v("td",[t._v("数据类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Blob")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("半类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义且有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义且有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("数据关系")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("自由定义的(链接)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义的(边)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("标准对象")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JSON")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JSON")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文本")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("字符串")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("表")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("哈希")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("列")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("编写语言")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("C++")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Erlang")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Erlang")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("C/C++")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("C")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JAVA")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JAVA")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("接口协议")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("TCP上自定义")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("HTTP")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("HTTP-Protobuf")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("TCP上的简单文本")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("TCP上自定义")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("HTTP")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Thrift-HTTP")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("HTTP/REST")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("二级索引")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("版本化")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("Build Load")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("mongoimport")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Bulk Doc API")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("COPY命令")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("非常大的文件")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("GridFS")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("附件")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Luwak(已弃用)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("BLOB")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("自由定义的查询")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("命令mapreduce")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("临时视图")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("弱支持Lucene")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("命令")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("SQL")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("图遍历,Cypher,搜索")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("弱")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("mapreduce")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JavaScript")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JavaScript")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JavaScript,Erlang")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Hadoop")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("伸缩性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("集群(主-从)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("集群(通过一些扩展)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("集群(通过HA)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("耐久性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写前日志安全模式")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("只在崩溃时")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写入法定数则耐久")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("仅追加的日志")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写前日志")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("请求压缩")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文件重写")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("快照")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("复制")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从(通过复集)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-主")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("基于对等主-主")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从(在企业版中)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("并发")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无锁的MVCC")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("向量锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("表/行写锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("每行一段")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("分片")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("锁(通过BigCouch过滤器)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("插件(客户端)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("扩展(PL/Proxy)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("通过HDFS")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("事务")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("多操作队列")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("触发器")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("更新验证或改变API")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("提交前后")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("事物事件处理程序")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("安全性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("用户")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("用户")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("口令")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("用户/群")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Kerberos,通过Hadoop的安全性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("一主机多实例")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("主要区别")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("容易查询大量数据")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("耐久的可嵌入的集群")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("高可用性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("非常非常快")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("最好的OSS RDBMS模型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("灵活的图")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("规模非常大,Hadoop基础设施")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("不足")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("嵌入能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("查询能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("查询能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("负责数据")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("分布式高可用性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Blob或TB级数据")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("灵活增长查询能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])])])]),t._v(" "),v("h2",{attrs:{id:"附录"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#附录"}},[t._v("#")]),t._v(" 附录")]),t._v(" "),v("ul",[v("li",[v("a",{attrs:{href:"https://db-engines.com/en/ranking",target:"_blank",rel:"noopener noreferrer"}},[t._v("数据库全球排名"),v("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/19.2aa38084.js b/assets/js/19.2aa38084.js new file mode 100644 index 0000000..b4dc341 --- /dev/null +++ b/assets/js/19.2aa38084.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{261:function(t,e,v){"use strict";v.r(e);var _=v(2),a=Object(_.a)({},(function(){var t=this,e=t.$createElement,v=t._self._c||e;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"数据库"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#数据库"}},[t._v("#")]),t._v(" 数据库 🔎")]),t._v(" "),v("p",[t._v("数据库不是凭空产生的,它们是为了解决实际使用中提出的问题,在RDBMS(关系数据库管理系统)出现的环境中,数据库插叙你的灵活性比灵活的模式更重要")]),t._v(" "),v("h2",{attrs:{id:"数据库概述"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#数据库概述"}},[t._v("#")]),t._v(" 数据库概述")]),t._v(" "),v("p",[t._v("本节包含了9种数据库的信息")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th"),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("MongoDB")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("counchDB")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Riak")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Redis")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[v("RouterLink",{attrs:{to:"/zh/db/postgreSQL.html"}},[t._v("PostgreSQL")])],1),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Neo4J")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("HBase")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Mysql")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Clickhouse")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文档")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文档")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("键-值")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("键-值")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("关系")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("图")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("列")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("关系")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("列")])]),t._v(" "),v("tr",[v("td",[t._v("数据类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Blob")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("半类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义且有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义且有类型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("数据关系")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("自由定义的(链接)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("预定义的(边)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("标准对象")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JSON")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JSON")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文本")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("字符串")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("表")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("哈希")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("列")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("编写语言")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("C++")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Erlang")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Erlang")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("C/C++")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("C")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JAVA")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JAVA")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("接口协议")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("TCP上自定义")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("HTTP")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("HTTP-Protobuf")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("TCP上的简单文本")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("TCP上自定义")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("HTTP")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Thrift-HTTP")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("HTTP/REST")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("二级索引")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("版本化")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("Build Load")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("mongoimport")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Bulk Doc API")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("COPY命令")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("非常大的文件")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("GridFS")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("附件")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Luwak(已弃用)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("BLOB")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("自由定义的查询")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("命令mapreduce")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("临时视图")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("弱支持Lucene")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("命令")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("SQL")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("图遍历,Cypher,搜索")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("弱")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("mapreduce")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JavaScript")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JavaScript")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("JavaScript,Erlang")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Hadoop")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("伸缩性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("集群(主-从)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("集群(通过一些扩展)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("集群(通过HA)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("数据中心")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("耐久性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写前日志安全模式")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("只在崩溃时")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写入法定数则耐久")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("仅追加的日志")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写前日志")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("请求压缩")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("文件重写")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("快照")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("复制")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从(通过复集)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-主")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("基于对等主-主")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从(在企业版中)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("主-从")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("并发")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无锁的MVCC")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("向量锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("表/行写锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("写锁")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("每行一段")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("分片")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("锁(通过BigCouch过滤器)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("插件(客户端)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("扩展(PL/Proxy)")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("否")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("通过HDFS")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("事务")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("多操作队列")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("ACID")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("触发器")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("更新验证或改变API")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("提交前后")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("是")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("事物事件处理程序")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("安全性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("用户")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("用户")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("口令")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("用户/群")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("无")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Kerberos,通过Hadoop的安全性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("一主机多实例")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("主要区别")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("容易查询大量数据")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("耐久的可嵌入的集群")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("高可用性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("非常非常快")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("最好的OSS RDBMS模型")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("灵活的图")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("规模非常大,Hadoop基础设施")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),v("tr",[v("td",[t._v("不足")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("嵌入能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("查询能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("查询能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("负责数据")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("分布式高可用性")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("Blob或TB级数据")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("灵活增长查询能力")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])])])]),t._v(" "),v("h2",{attrs:{id:"附录"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#附录"}},[t._v("#")]),t._v(" 附录")]),t._v(" "),v("ul",[v("li",[v("a",{attrs:{href:"https://db-engines.com/en/ranking",target:"_blank",rel:"noopener noreferrer"}},[t._v("数据库全球排名"),v("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/25.9165907b.js b/assets/js/25.9165907b.js new file mode 100644 index 0000000..90ddd18 --- /dev/null +++ b/assets/js/25.9165907b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{267:function(s,t,a){"use strict";a.r(t);var n=a(2),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"postgresql"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#postgresql"}},[s._v("#")]),s._v(" PostgreSQL")]),s._v(" "),a("center",[a("img",{attrs:{src:s.$withBase("/db/postgresql/postgresql-01.png"),alt:"foo"}})]),s._v("\n20世纪70年代初,最初的项目产生于加州大学伯克利分校,叫做交互式图形和检索系统(Interactive Graphincs and Retrieval System),简称Ingres,在20世纪80年代,推出了一个改进版,post-ingres,简称为Postgres,虽然后面这个项目让伯克利大学中介,但开源社区拿到了源码,并将其改名为PostgreSQL95,后来在1996年更名为PostgreSQL,表示对心的SQL标准的支持,此后就一直用这个名字\n"),a("h2",{attrs:{id:"初始化"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#初始化"}},[s._v("#")]),s._v(" 初始化")]),s._v(" "),a("p",[s._v("PostgreSQL不仅支持关系数据库的各种功能,而且还具备类、继承等对象数据库的特征。它是目前功能最强大、特性最丰富和结构最复杂的开源数据库管理系统,其中有些特性甚至连商业数据库都不具备。这个起源于加州大学伯克利分校(UCB)的数据库研究计划,现在已经衍生成一项国际开发项目,并且拥有广泛的用户群。PostgreSQL主要运行在Unix和Linux操作系统上(从8.0版本开始推出了Windows平台上的版本),并且免费开放源代码,用户可以在其"),a("a",{attrs:{href:"www.postgresql.org"}},[s._v("官方网站")]),s._v("上下载各种安装程序和文档")]),s._v(" "),a("h3",{attrs:{id:"数学关系"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数学关系"}},[s._v("#")]),s._v(" 数学关系")]),s._v(" "),a("p",[s._v("关系数据库的名称源于它们包含关系(即表),它们是元组(即行)的集合,元组又将属性映射到原子值,可用的属性通过头部的属性元组来定义,这些属性映射啊都某个域或限制的类型,这是关系结构的要点")]),s._v(" "),a("h3",{attrs:{id:"准备环境"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#准备环境"}},[s._v("#")]),s._v(" 准备环境")]),s._v(" "),a("ol",[a("li",[s._v("安装环境,并进入环境")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("set")]),s._v(" -ex "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" docker run --name pgsql -e "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("POSTGRES_PASSWORD")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("marco -d postgres:9.6 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" docker "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("exec")]),s._v(" -it -u postgres pgsql /bin/bash \n")])])]),a("ol",{attrs:{start:"2"}},[a("li",[s._v("创建"),a("code",[s._v("book")]),s._v("数据库")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[s._v(" createdb book "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# pg套件里自带的命令")]),s._v("\n")])])]),a("h3",{attrs:{id:"从sql开始"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#从sql开始"}},[s._v("#")]),s._v(" 从SQL开始")]),s._v(" "),a("p",[s._v("一个简单的CURD")]),s._v(" "),a("div",{staticClass:"language-sql extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("CREATE")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("TABLE")]),s._v(" students "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("id "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("SERIAL")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("PRIMARY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("KEY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("VARCHAR")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("UNIQUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("hobby "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("VARCHAR")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("255")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("INSERT")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("INTO")]),s._v(" students"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("hobby"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("VALUES")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'marco'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'foo'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'jack'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'bar'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("UPDATE")]),s._v(" students "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("SET")]),s._v(" hobby"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"bar"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("WHERE")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'marco'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" \n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("DELETE")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" students "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("WHERE")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'jack'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("SELECT")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("FROM")]),s._v(" students"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])])]),a("p",[s._v("获得结果集")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("book")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# SELECT * FROM students;")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("id")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" hobby\n----+-------+-------\n "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" marco "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" bar\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])])]),a("p",[s._v("关于外键")]),s._v(" "),a("div",{staticClass:"language-sql extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("CREATE")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("TABLE")]),s._v(" class "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("student_id "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("int")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("REFERENCES")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"students"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" title "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("VARCHAR")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("CHECK")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("title "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<>")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("PRIMARY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("KEY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("student_id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("INSERT")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("INTO")]),s._v(" class"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("student_id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("VALUES")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'boss'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])])]),a("p",[s._v("查看当前数据库里所有表类似mysql的"),a("code",[s._v("SHOW TABLES;")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("book")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# \\d")]),s._v("\n List of relations\n Schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" Name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" Type "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" Owner\n--------+-----------------+----------+----------\n public "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" class "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" table "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" postgres\n public "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" students "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" table "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" postgres\n public "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" students_id_seq "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" sequence "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" postgres\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v(" rows"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n\n")])])]),a("h2",{attrs:{id:"体系结构"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#体系结构"}},[s._v("#")]),s._v(" 体系结构")]),s._v(" "),a("img",{attrs:{src:s.$withBase("/db/postgresql/postgresql-02.png"),alt:"foo"}}),s._v(" "),a("p",[s._v("PostgreSQL数据库由连接管理系统(系统控制器)、编译执行系统、存储管理系统、事务系统、系统表五大部分组成,")]),s._v(" "),a("ul",[a("li",[a("strong",[s._v("连接管理系统")]),s._v(" 接受外部操作对系统的请求,对操作请求进行预处理和分发,起系统逻辑控制作用;")]),s._v(" "),a("li",[a("strong",[s._v("编译执行系统")]),s._v(" 由查询编译器、查询执行器组成,完成操作请求在数据库中的分析处理和转化工作,最终实现物理存储介质中数据的操作;")]),s._v(" "),a("li",[a("strong",[s._v("存储管理系统")]),s._v(" 由索引管理器、内存管理器、外存管理器组成,负责存储和管理物理数据,提供对编译查询系统的支持;")]),s._v(" "),a("li",[a("strong",[s._v("事务系统")]),s._v(" 由事务管理器、日志管理器、并发控制、锁管理器组成,日志管理器和事务管理器完成对操作请求处理的事务一致性支持,锁管理器-和并发控制提供对并发访问数据的一致性支持;")]),s._v(" "),a("li",[a("strong",[s._v("系统表")]),s._v(" 是PostgreSQL数据库的元信息管理中心,包括数据库对象信息和数据库管理控制信息。系统表管理元数据信息,将PostgreSQL数据库的各个模块有机地连接在一起,形成一个高效的数据管理系统。")])]),s._v(" "),a("h2",{attrs:{id:"mvcc"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mvcc"}},[s._v("#")]),s._v(" MVCC")])],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/25.e734f04f.js b/assets/js/25.e734f04f.js deleted file mode 100644 index 7573a54..0000000 --- a/assets/js/25.e734f04f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{267:function(t,s,e){"use strict";e.r(s);var r=e(2),n=Object(r.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",{attrs:{id:"postgresql"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#postgresql"}},[this._v("#")]),this._v(" PostgreSQL")])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/app.58b94fd8.js b/assets/js/app.317b3400.js similarity index 85% rename from assets/js/app.58b94fd8.js rename to assets/js/app.317b3400.js index 8bb03bc..f19d49c 100644 --- a/assets/js/app.58b94fd8.js +++ b/assets/js/app.317b3400.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],c=e[1],u=e[2],f=0,p=[];f-1}function i(t,e){return e instanceof t||e&&(e.name===t.name||e._name===t._name)}function a(t,e){for(var n in e)t[n]=e[n];return t}var s={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var s=o.$createElement,u=n.name,l=o.$route,f=o._routerViewCache||(o._routerViewCache={}),p=0,d=!1;o&&o._routerRoot!==o;){var h=o.$vnode?o.$vnode.data:{};h.routerView&&p++,h.keepAlive&&o._directInactive&&o._inactive&&(d=!0),o=o.$parent}if(i.routerViewDepth=p,d){var v=f[u],m=v&&v.component;return m?(v.configProps&&c(m,i,v.route,v.configProps),s(m,i,r)):s()}var y=l.matched[p],g=y&&y.components[u];if(!y||!g)return f[u]=null,s();f[u]={component:g},i.registerRouteInstance=function(t,e){var n=y.instances[u];(e&&n!==t||!e&&n===t)&&(y.instances[u]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){y.instances[u]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==y.instances[u]&&(y.instances[u]=t.componentInstance)};var b=y.props&&y.props[u];return b&&(a(f[u],{route:l,configProps:b}),c(g,i,l,b)),s(g,i,r)}};function c(t,e,n,r){var o=e.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(n,r);if(o){o=e.props=a({},o);var i=e.attrs=e.attrs||{};for(var s in o)t.props&&s in t.props||(i[s]=o[s],delete o[s])}}var u=/[!'()*]/g,l=function(t){return"%"+t.charCodeAt(0).toString(16)},f=/%2C/g,p=function(t){return encodeURIComponent(t).replace(u,l).replace(f,",")},d=decodeURIComponent;function h(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=d(n.shift()),o=n.length>0?d(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function v(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return p(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(p(e)):r.push(p(e)+"="+p(t)))})),r.join("&")}return p(e)+"="+p(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var m=/\/?$/;function y(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=g(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:w(e,o),matched:t?_(t):[]};return n&&(a.redirectedFrom=w(n,o)),Object.freeze(a)}function g(t){if(Array.isArray(t))return t.map(g);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=g(t[n]);return e}return t}var b=y(null,{path:"/"});function _(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function w(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||v)(r)+o}function x(t,e){return e===b?t===e:!!e&&(t.path&&e.path?t.path.replace(m,"")===e.path.replace(m,"")&&t.hash===e.hash&&O(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&O(t.query,e.query)&&O(t.params,e.params)))}function O(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every((function(n){var r=t[n],o=e[n];return"object"==typeof r&&"object"==typeof o?O(r,o):String(r)===String(o)}))}function k(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var o=e.split("/");n&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),a=0;a=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",f=u.path?k(u.path,l,n||o.append):l,p=function(t,e,n){void 0===e&&(e={});var r,o=n||h;try{r=o(t||"")}catch(t){r={}}for(var i in e)r[i]=e[i];return r}(u.query,o.query,r&&r.options.parseQuery),d=o.hash||u.hash;return d&&"#"!==d.charAt(0)&&(d="#"+d),{_normalized:!0,path:f,query:p,hash:d}}var q,W=function(){},G={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,s=o.route,c=o.href,u={},l=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==l?"router-link-active":l,d=null==f?"router-link-exact-active":f,h=null==this.activeClass?p:this.activeClass,v=null==this.exactActiveClass?d:this.exactActiveClass,g=s.redirectedFrom?y(null,V(s.redirectedFrom),null,n):s;u[v]=x(r,g),u[h]=this.exact?u[v]:function(t,e){return 0===t.path.replace(m,"/").indexOf(e.path.replace(m,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,g);var b=function(t){X(t)&&(e.replace?n.replace(i,W):n.push(i,W))},_={click:X};Array.isArray(this.event)?this.event.forEach((function(t){_[t]=b})):_[this.event]=b;var w={class:u},O=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:s,navigate:b,isActive:u[h],isExactActive:u[v]});if(O){if(1===O.length)return O[0];if(O.length>1||!O.length)return 0===O.length?t():t("span",{},O)}if("a"===this.tag)w.on=_,w.attrs={href:c};else{var k=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=H(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function bt(t){return function(e,n,r){var i=!1,a=0,s=null;_t(t,(function(t,e,n,c){if("function"==typeof t&&void 0===t.cid){i=!0,a++;var u,l=Ot((function(e){var o;((o=e).__esModule||xt&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:q.extend(e),n.components[c]=e,--a<=0&&r()})),f=Ot((function(t){var e="Failed to resolve async component "+c+": "+t;s||(s=o(t)?t:new Error(e),r(s))}));try{u=t(l,f)}catch(t){f(t)}if(u)if("function"==typeof u.then)u.then(l,f);else{var p=u.component;p&&"function"==typeof p.then&&p.then(l,f)}}})),i||r()}}function _t(t,e){return wt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function wt(t){return Array.prototype.concat.apply([],t)}var xt="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ot(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var kt=function(t){function e(e){t.call(this),this.name=this._name="NavigationDuplicated",this.message='Navigating to current location ("'+e.fullPath+'") is not allowed',Object.defineProperty(this,"stack",{value:(new t).stack,writable:!0,configurable:!0})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);kt._name="NavigationDuplicated";var Ct=function(t,e){this.router=t,this.base=function(t){if(!t)if(Y){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=b,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function St(t,e,n,r){var o=_t(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=q.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return wt(r?o.reverse():o)}function Et(t,e){if(e)return function(){return t.apply(e,arguments)}}Ct.prototype.listen=function(t){this.cb=t},Ct.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ct.prototype.onError=function(t){this.errorCbs.push(t)},Ct.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,(function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach((function(t){t(o)})))}),(function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach((function(e){e(t)})))}))},Ct.prototype.confirmTransition=function(t,e,n){var r=this,a=this.current,s=function(t){!i(kt,t)&&o(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)};if(x(t,a)&&t.matched.length===a.matched.length)return this.ensureURL(),s(new kt(t));var c=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n-1?decodeURI(t.slice(0,r))+t.slice(r):decodeURI(t)}else t=decodeURI(t.slice(0,n))+t.slice(n);return t}function Pt(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Lt(t){vt?mt(Pt(t)):window.location.hash=t}function Mt(t){vt?yt(Pt(t)):window.location.replace(Pt(t))}var It=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){e.index=n,e.updateRoute(r)}),(function(t){i(kt,t)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ct),Rt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Z(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!vt&&!1!==t.fallback,this.fallback&&(e="hash"),Y||(e="abstract"),this.mode=e,e){case"history":this.history=new At(this,t.base);break;case"hash":this.history=new jt(this,t.base,this.fallback);break;case"abstract":this.history=new It(this,t.base);break;default:0}},Nt={currentRoute:{configurable:!0}};function Dt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Rt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Nt.currentRoute.get=function(){return this.history&&this.history.current},Rt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null)})),!this.app){this.app=t;var n=this.history;if(n instanceof At)n.transitionTo(n.getCurrentLocation());else if(n instanceof jt){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Rt.prototype.beforeEach=function(t){return Dt(this.beforeHooks,t)},Rt.prototype.beforeResolve=function(t){return Dt(this.resolveHooks,t)},Rt.prototype.afterEach=function(t){return Dt(this.afterHooks,t)},Rt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Rt.prototype.onError=function(t){this.history.onError(t)},Rt.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Rt.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Rt.prototype.go=function(t){this.history.go(t)},Rt.prototype.back=function(){this.go(-1)},Rt.prototype.forward=function(){this.go(1)},Rt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Rt.prototype.resolve=function(t,e,n){var r=V(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?C(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Rt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==b&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Rt.prototype,Nt),Rt.install=function t(e){if(!t.installed||q!==e){t.installed=!0,q=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",s),e.component("RouterLink",G);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Rt.version="3.1.5",Y&&window.Vue&&window.Vue.use(Rt);var Ft=Rt;var Ut=n(1),Bt={created(){this.$ssrContext&&(this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.description=this.$page.description||this.$description)},mounted(){this.currentMetaTags=new Set,this.updateMeta()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.$page.frontmatter.meta||[],e=t.slice(0);0===t.filter(t=>"description"===t.name).length&&e.push({name:"description",content:this.$description});const n=document.querySelectorAll('meta[name="description"]');n.length&&n.forEach(t=>this.currentMetaTags.add(t)),this.currentMetaTags=new Set(Ht(e,this.currentMetaTags))}},watch:{$page(){this.updateMeta()}},beforeDestroy(){Ht(null,this.currentMetaTags)}};function Ht(t,e){if(e&&[...e].forEach(t=>{document.head.removeChild(t)}),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}var Vt=n(29),qt=n.n(Vt),Wt={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:qt()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Gt=n(30),Xt=n.n(Gt),Yt={mounted(){Xt.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||r.a.component(t.name)||Xt.a.start(),n()}),this.$router.afterEach(()=>{Xt.a.done(),this.isSidebarOpen=!1})}},Kt=n(78),Qt=n.n(Kt),Zt={mounted(){Qt.a.polyfill()}},Jt=(n(97),Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(t){function e(){}t(e,e)},o=function(t){var e=t.target;e!==C?-1!==b.indexOf(e)&&v({target:e}):h()},i=function(){if(!w&&k.original){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(x-t)>O.scrollOffset&&setTimeout(h,150)}},a=function(t){var e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||h()},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t;if(t.background&&(C.style.background=t.background),t.container&&t.container instanceof Object&&(e.container=Jt({},O.container,t.container)),t.template){var n=ee(t.template)?t.template:document.querySelector(t.template);e.template=n}return O=Jt({},O,e),b.forEach((function(t){t.dispatchEvent(ae("medium-zoom:update",{detail:{zoom:S}}))})),S},c=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(Jt({},O,e))},u=function(){for(var t=arguments.length,e=Array(t),n=0;n0?e.reduce((function(t,e){return[].concat(t,re(e))}),[]):b;return r.forEach((function(t){t.classList.remove("medium-zoom-image"),t.dispatchEvent(ae("medium-zoom:detach",{detail:{zoom:S}}))})),b=b.filter((function(t){return-1===r.indexOf(t)})),S},f=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.addEventListener("medium-zoom:"+t,e,n)})),_.push({type:"medium-zoom:"+t,listener:e,options:n}),S},p=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.removeEventListener("medium-zoom:"+t,e,n)})),_=_.filter((function(n){return!(n.type==="medium-zoom:"+t&&n.listener.toString()===e.toString())})),S},d=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,n=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},e=void 0,n=void 0;if(O.container)if(O.container instanceof Object)e=(t=Jt({},t,O.container)).width-t.left-t.right-2*O.margin,n=t.height-t.top-t.bottom-2*O.margin;else{var r=(ee(O.container)?O.container:document.querySelector(O.container)).getBoundingClientRect(),o=r.width,i=r.height,a=r.left,s=r.top;t=Jt({},t,{width:o,height:i,left:a,top:s})}e=e||t.width-2*O.margin,n=n||t.height-2*O.margin;var c=k.zoomedHd||k.original,u=ne(c)?e:c.naturalWidth||e,l=ne(c)?n:c.naturalHeight||n,f=c.getBoundingClientRect(),p=f.top,d=f.left,h=f.width,v=f.height,m=Math.min(u,e)/h,y=Math.min(l,n)/v,g=Math.min(m,y),b="scale("+g+") translate3d("+((e-h)/2-d+O.margin+t.left)/g+"px, "+((n-v)/2-p+O.margin+t.top)/g+"px, 0)";k.zoomed.style.transform=b,k.zoomedHd&&(k.zoomedHd.style.transform=b)};return new r((function(t){if(e&&-1===b.indexOf(e))t(S);else{if(k.zoomed)t(S);else{if(e)k.original=e;else{if(!(b.length>0))return void t(S);var r=b;k.original=r[0]}if(k.original.dispatchEvent(ae("medium-zoom:open",{detail:{zoom:S}})),x=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,w=!0,k.zoomed=ie(k.original),document.body.appendChild(C),O.template){var o=ee(O.template)?O.template:document.querySelector(O.template);k.template=document.createElement("div"),k.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(k.template)}if(document.body.appendChild(k.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),k.original.classList.add("medium-zoom-image--hidden"),k.zoomed.classList.add("medium-zoom-image--opened"),k.zoomed.addEventListener("click",h),k.zoomed.addEventListener("transitionend",(function e(){w=!1,k.zoomed.removeEventListener("transitionend",e),k.original.dispatchEvent(ae("medium-zoom:opened",{detail:{zoom:S}})),t(S)})),k.original.getAttribute("data-zoom-src")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute("srcset"),k.zoomedHd.removeAttribute("sizes"),k.zoomedHd.src=k.zoomed.getAttribute("data-zoom-src"),k.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+k.zoomedHd.src),k.zoomedHd=null,n()};var i=setInterval((function(){k.zoomedHd.complete&&(clearInterval(i),k.zoomedHd.classList.add("medium-zoom-image--opened"),k.zoomedHd.addEventListener("click",h),document.body.appendChild(k.zoomedHd),n())}),10)}else if(k.original.hasAttribute("srcset")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute("sizes");var a=k.zoomedHd.addEventListener("load",(function(){k.zoomedHd.removeEventListener("load",a),k.zoomedHd.classList.add("medium-zoom-image--opened"),k.zoomedHd.addEventListener("click",h),document.body.appendChild(k.zoomedHd),n()}))}else n()}}}))},h=function(){return new r((function(t){if(!w&&k.original){w=!0,document.body.classList.remove("medium-zoom--opened"),k.zoomed.style.transform="",k.zoomedHd&&(k.zoomedHd.style.transform=""),k.template&&(k.template.style.transition="opacity 150ms",k.template.style.opacity=0),k.original.dispatchEvent(ae("medium-zoom:close",{detail:{zoom:S}})),k.zoomed.addEventListener("transitionend",(function e(){k.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(k.zoomed),k.zoomedHd&&document.body.removeChild(k.zoomedHd),document.body.removeChild(C),k.zoomed.classList.remove("medium-zoom-image--opened"),k.template&&document.body.removeChild(k.template),w=!1,k.zoomed.removeEventListener("transitionend",e),k.original.dispatchEvent(ae("medium-zoom:closed",{detail:{zoom:S}})),k.original=null,k.zoomed=null,k.zoomedHd=null,k.template=null,t(S)}))}else t(S)}))},v=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target;return k.original?h():d({target:e})},m=function(){return O},y=function(){return b},g=function(){return k.original},b=[],_=[],w=!1,x=0,O=n,k={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(e)?O=e:(e||"string"==typeof e)&&u(e),O=Jt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},O);var C=oe(O.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",h);var S={open:d,close:h,toggle:v,update:s,clone:c,attach:u,detach:l,on:f,off:p,getOptions:m,getImages:y,getZoomedImage:g};return S},ce=[Bt,Wt,Yt,Zt,{data:()=>({zoom:null}),mounted(){this.updateZoom()},updated(){this.updateZoom()},methods:{updateZoom(){setTimeout(()=>{this.zoom&&this.zoom.detach(),this.zoom=se(".theme-default-content :not(a) > img",void 0)},1e3)}}}],ue={name:"GlobalLayout",computed:{layout:function(){var t=this.getLayout();return Object(Ut.h)("layout",t),r.a.component(t)}},methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},le=n(2),fe=Object(le.a)(ue,(function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;Object(Ut.f)(fe,"mixins",ce);var pe=[{name:"v-746bd11e",path:"/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-746bd11e").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-5ba934e1",path:"/zh/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-5ba934e1").then(n)}},{path:"/zh/index.html",redirect:"/zh/"},{name:"v-74d01bde",path:"/zh/db/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-74d01bde").then(n)}},{path:"/zh/db/index.html",redirect:"/zh/db/"},{name:"v-58cebc34",path:"/zh/db/clickhouse.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-58cebc34").then(n)}},{name:"v-dbd7ec2c",path:"/zh/db/hbase.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-dbd7ec2c").then(n)}},{name:"v-94740eec",path:"/zh/db/mongodb.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-94740eec").then(n)}},{name:"v-5559350a",path:"/zh/db/mysql.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-5559350a").then(n)}},{name:"v-0a8a5aec",path:"/zh/db/neo4j.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-0a8a5aec").then(n)}},{name:"v-fc0c3ca4",path:"/zh/db/postgreSQL.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-fc0c3ca4").then(n)}},{name:"v-f82d23ac",path:"/zh/db/redis.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-f82d23ac").then(n)}},{name:"v-16372753",path:"/zh/devops/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-16372753").then(n)}},{path:"/zh/devops/index.html",redirect:"/zh/devops/"},{name:"v-793e68e1",path:"/zh/distributed/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-793e68e1").then(n)}},{path:"/zh/distributed/index.html",redirect:"/zh/distributed/"},{name:"v-5cfbe97e",path:"/zh/guide/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-5cfbe97e").then(n)}},{path:"/zh/guide/index.html",redirect:"/zh/guide/"},{name:"v-accb5676",path:"/zh/os/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-accb5676").then(n)}},{path:"/zh/os/index.html",redirect:"/zh/os/"},{name:"v-728e1cec",path:"/zh/os/coroutines.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-728e1cec").then(n)}},{name:"v-d2c24fec",path:"/zh/os/cpu.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-d2c24fec").then(n)}},{name:"v-173c9516",path:"/zh/os/io.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-173c9516").then(n)}},{name:"v-3d7c27ec",path:"/zh/os/linux.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-3d7c27ec").then(n)}},{name:"v-77f2e22a",path:"/zh/os/process.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-77f2e22a").then(n)}},{name:"v-d505af64",path:"/zh/os/thread.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-d505af64").then(n)}},{name:"v-4db484c1",path:"/zh/program/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-4db484c1").then(n)}},{path:"/zh/program/index.html",redirect:"/zh/program/"},{name:"v-6c1827f0",path:"/zh/program/c.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-6c1827f0").then(n)}},{name:"v-775f4f8a",path:"/zh/program/golang.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-775f4f8a").then(n)}},{name:"v-3ca656aa",path:"/zh/program/javascript.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-3ca656aa").then(n)}},{name:"v-a9d38bc4",path:"/zh/program/php.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-a9d38bc4").then(n)}},{name:"v-3bd307ca",path:"/zh/program/python.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-3bd307ca").then(n)}},{path:"*",component:fe}],de={title:"",description:"",base:"/",pages:[{title:"Home",frontmatter:{home:!0,heroImage:"/hero.png",actionText:"快速上手 →",footer:"MIT Licensed | Copyright © 2020 Marco"},regularPath:"/",relativePath:"README.md",key:"v-746bd11e",path:"/",lastUpdated:"2/28/2020, 6:33:35 AM"},{title:"Home",frontmatter:{home:!0,heroImage:"/hero.png",actionText:"快速上手 →",actionLink:"/zh/guide/",features:[{title:"简洁至上",details:"以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。"}],footer:"MIT Licensed | Copyright © 2020-PRESENT Marco"},regularPath:"/zh/",relativePath:"zh/README.md",key:"v-5ba934e1",path:"/zh/",lastUpdated:"2/15/2020, 9:48:35 AM"},{title:"数据库 🔎",frontmatter:{},regularPath:"/zh/db/",relativePath:"zh/db/README.md",key:"v-74d01bde",path:"/zh/db/",headers:[{level:2,title:"数据库概述",slug:"数据库概述"},{level:2,title:"附录",slug:"附录"}],lastUpdated:"2/28/2020, 6:33:35 AM"},{title:"Clickhouse",frontmatter:{},regularPath:"/zh/db/clickhouse.html",relativePath:"zh/db/clickhouse.md",key:"v-58cebc34",path:"/zh/db/clickhouse.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"HBase",frontmatter:{},regularPath:"/zh/db/hbase.html",relativePath:"zh/db/hbase.md",key:"v-dbd7ec2c",path:"/zh/db/hbase.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"MongoDB",frontmatter:{},regularPath:"/zh/db/mongodb.html",relativePath:"zh/db/mongodb.md",key:"v-94740eec",path:"/zh/db/mongodb.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"MySQL",frontmatter:{},regularPath:"/zh/db/mysql.html",relativePath:"zh/db/mysql.md",key:"v-5559350a",path:"/zh/db/mysql.html",headers:[{level:2,title:"基础架构",slug:"基础架构"},{level:3,title:"连接器管理",slug:"连接器管理"},{level:3,title:"Mysql缓存",slug:"mysql缓存"},{level:3,title:"分析器",slug:"分析器"},{level:3,title:"优化器",slug:"优化器"},{level:3,title:"执行器",slug:"执行器"},{level:3,title:"日志系统",slug:"日志系统"},{level:2,title:"数据结构",slug:"数据结构"},{level:3,title:"B树、B-树、B+树",slug:"b树、b-树、b-树"},{level:3,title:"磁盘存取原理",slug:"磁盘存取原理"},{level:3,title:"MyISAM 索引实现",slug:"myisam-索引实现"},{level:3,title:"InnoDB 索引实现",slug:"innodb-索引实现"},{level:2,title:"锁机制",slug:"锁机制"},{level:2,title:"隔离级别",slug:"隔离级别"},{level:2,title:"MVCC",slug:"mvcc"},{level:2,title:"InnoDB",slug:"innodb"},{level:2,title:"Explain",slug:"explain"},{level:3,title:"参考文献",slug:"参考文献"}],lastUpdated:"2/16/2020, 4:43:13 PM"},{title:"Neo4J",frontmatter:{},regularPath:"/zh/db/neo4j.html",relativePath:"zh/db/neo4j.md",key:"v-0a8a5aec",path:"/zh/db/neo4j.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"PostgreSQL",frontmatter:{},regularPath:"/zh/db/postgreSQL.html",relativePath:"zh/db/postgreSQL.md",key:"v-fc0c3ca4",path:"/zh/db/postgreSQL.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"Redis",frontmatter:{},regularPath:"/zh/db/redis.html",relativePath:"zh/db/redis.md",key:"v-f82d23ac",path:"/zh/db/redis.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{frontmatter:{},regularPath:"/zh/devops/",relativePath:"zh/devops/README.md",key:"v-16372753",path:"/zh/devops/",lastUpdated:"2/15/2020, 11:02:54 AM"},{frontmatter:{},regularPath:"/zh/distributed/",relativePath:"zh/distributed/README.md",key:"v-793e68e1",path:"/zh/distributed/",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"要怎样努力,才能成为很厉害的人",frontmatter:{},regularPath:"/zh/guide/",relativePath:"zh/guide/README.md",key:"v-5cfbe97e",path:"/zh/guide/",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"操作系统",frontmatter:{},regularPath:"/zh/os/",relativePath:"zh/os/README.md",key:"v-accb5676",path:"/zh/os/",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"协程",frontmatter:{},regularPath:"/zh/os/coroutines.html",relativePath:"zh/os/coroutines.md",key:"v-728e1cec",path:"/zh/os/coroutines.html",lastUpdated:"2/24/2020, 2:21:13 PM"},{title:"CPU",frontmatter:{},regularPath:"/zh/os/cpu.html",relativePath:"zh/os/cpu.md",key:"v-d2c24fec",path:"/zh/os/cpu.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"IO",frontmatter:{},regularPath:"/zh/os/io.html",relativePath:"zh/os/io.md",key:"v-173c9516",path:"/zh/os/io.html",headers:[{level:2,title:"概念",slug:"概念"},{level:3,title:"用户态切换到内核态",slug:"用户态切换到内核态"},{level:3,title:"进程的结构-PCB",slug:"进程的结构-pcb"},{level:3,title:"进程切换",slug:"进程切换"},{level:3,title:"创建进程",slug:"创建进程"},{level:3,title:"进程的阻塞",slug:"进程的阻塞"},{level:3,title:"同步与异步",slug:"同步与异步"},{level:3,title:"同步与异步的区别",slug:"同步与异步的区别"},{level:3,title:"阻塞与非阻塞",slug:"阻塞与非阻塞"},{level:3,title:"文件描述符 fd",slug:"文件描述符-fd"},{level:2,title:"缓存 I/O",slug:"缓存-i-o"},{level:2,title:"网络 I/O",slug:"网络-i-o"},{level:2,title:"IO模式",slug:"io模式"},{level:2,title:"阻塞 I/O",slug:"阻塞-i-o"},{level:3,title:"非阻塞 I/O",slug:"非阻塞-i-o"},{level:3,title:"同步非阻塞与同步阻塞之间有什么优缺点呢?",slug:"同步非阻塞与同步阻塞之间有什么优缺点呢?"},{level:2,title:"I/O 多路复用",slug:"i-o-多路复用"},{level:3,title:"poll",slug:"poll"},{level:3,title:"epoll",slug:"epoll"},{level:3,title:"实现原理",slug:"实现原理"},{level:2,title:"信号驱动 I/O",slug:"信号驱动-i-o"},{level:2,title:"异步 I/O",slug:"异步-i-o"},{level:3,title:"小结",slug:"小结"},{level:2,title:"IO设计模式",slug:"io设计模式"},{level:3,title:"传统IO设计模式",slug:"传统io设计模式"},{level:3,title:"多线程模式",slug:"多线程模式"},{level:3,title:"线程池模式",slug:"线程池模式"},{level:3,title:"高性能IO设计模式",slug:"高性能io设计模式"},{level:3,title:"Reactor",slug:"reactor"},{level:3,title:"Proactor",slug:"proactor"}],lastUpdated:"2/25/2020, 7:09:44 AM"},{title:"LINUX",frontmatter:{},regularPath:"/zh/os/linux.html",relativePath:"zh/os/linux.md",key:"v-3d7c27ec",path:"/zh/os/linux.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"进程",frontmatter:{},regularPath:"/zh/os/process.html",relativePath:"zh/os/process.md",key:"v-77f2e22a",path:"/zh/os/process.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"线程",frontmatter:{},regularPath:"/zh/os/thread.html",relativePath:"zh/os/thread.md",key:"v-d505af64",path:"/zh/os/thread.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"编译型语言",frontmatter:{},regularPath:"/zh/program/",relativePath:"zh/program/README.md",key:"v-4db484c1",path:"/zh/program/",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"C",frontmatter:{},regularPath:"/zh/program/c.html",relativePath:"zh/program/c.md",key:"v-6c1827f0",path:"/zh/program/c.html",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"Golang",frontmatter:{},regularPath:"/zh/program/golang.html",relativePath:"zh/program/golang.md",key:"v-775f4f8a",path:"/zh/program/golang.html",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"JavaScript",frontmatter:{},regularPath:"/zh/program/javascript.html",relativePath:"zh/program/javascript.md",key:"v-3ca656aa",path:"/zh/program/javascript.html",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"PHP",frontmatter:{},regularPath:"/zh/program/php.html",relativePath:"zh/program/php.md",key:"v-a9d38bc4",path:"/zh/program/php.html",headers:[{level:2,title:"源码整体框架",slug:"源码整体框架"},{level:2,title:"执行原理概述",slug:"执行原理概述"},{level:2,title:"Zend 虚拟机",slug:"zend-虚拟机"},{level:3,title:"符号表",slug:"符号表"},{level:3,title:"指令",slug:"指令"},{level:2,title:"生命周期",slug:"生命周期"},{level:3,title:"SAPI",slug:"sapi"},{level:2,title:"内存管理",slug:"内存管理"},{level:2,title:"垃圾回收",slug:"垃圾回收"},{level:3,title:"垃圾的产生",slug:"垃圾的产生"},{level:3,title:"回收过程",slug:"回收过程"},{level:3,title:"垃圾收集的内部实现",slug:"垃圾收集的内部实现"},{level:2,title:"扩展的构成及编译",slug:"扩展的构成及编译"},{level:3,title:"扩展的构成",slug:"扩展的构成"},{level:3,title:"编译工具",slug:"编译工具"},{level:3,title:"php-config",slug:"php-config"},{level:3,title:"编写扩展的基本步骤",slug:"编写扩展的基本步骤"},{level:3,title:"config.m4",slug:"config-m4"}],lastUpdated:"2/24/2020, 2:14:52 AM"},{title:"Python",frontmatter:{},regularPath:"/zh/program/python.html",relativePath:"zh/program/python.md",key:"v-3bd307ca",path:"/zh/program/python.html",lastUpdated:"2/22/2020, 6:07:07 PM"}],themeConfig:{repo:"m9rco/practice",docsRepo:"m9-lab/m9-lab.github.io",docsBranch:"master",editLinks:!0,docsDir:"docs",algolia:{apiKey:"17103d809d3df489f3e1de21aaa02b48",indexName:"practice"},smoothScroll:!0,locales:{"/":{label:"简体中文",selectText:"选择语言",ariaLabel:"选择语言",editLinkText:"在 GitHub 上编辑此页",lastUpdated:"上次更新",nav:[{text:"指南",link:"/zh/guide/"},{text:"数据库",link:"/zh/db/"},{text:"操作系统",link:"/zh/os/"},{text:"编程语言",link:"/zh/program/"},{text:"分布式设计",link:"/zh/distributed/"},{text:"DevOPS",link:"/zh/devops/"},{text:"通用基础",ariaLabel:"通用基础",items:[{text:"算法 & 数据结构",items:[{text:"数据结构",link:"/zh/structures-algorithm/structures.html"},{text:"基本算法",link:"/zh/structures-algorithm/algorithm.html"},{text:"Leetcode",link:"/zh/leetcode/"}]},{text:"网络安全",items:[{text:"WEB 安全",link:"/zh/structures-algorithm/structures.html"},{text:"服务器安全",link:"/zh/structures-algorithm/algorithm.html"},{text:"序列化漏洞",link:"/zh/structures-algorithm/algorithm.html"},{text:"加密解密",link:"/zh/structures-algorithm/algorithm.html"},{text:"网络隔离",link:"/zh/structures-algorithm/algorithm.html"}]},{text:"设计思路",items:[{text:"并发问题",link:"/zh/structures-algorithm/structures.html"},{text:"限流熔断",link:"/zh/structures-algorithm/algorithm.html"},{text:"海量搜索",link:"/zh/structures-algorithm/algorithm.html"}]}]}],sidebar:{"/zh/guide/":[{title:"指南",collapsable:!1,children:[""]}],"/zh/db/":[{title:"关系型数据库",collapsable:!1,children:["mysql","postgreSQL"]},{title:"键-值数据库",collapsable:!1,children:["redis"]},{title:"列数据库",collapsable:!1,children:["hbase","clickhouse"]},{title:"文档型数据库",collapsable:!1,children:["mongodb"]},{title:"图数据库",collapsable:!1,children:["neo4j"]}],"/zh/os/":[{title:"操作系统",collapsable:!1,children:["io","cpu","thread","coroutines","process"]},{title:"计算机原理",collapsable:!1,children:["linux"]}],"/zh/program/":[{title:"解释型语言",collapsable:!1,children:["php","python","javascript"]},{title:"编译型语言",collapsable:!1,children:["golang","c"]}]}},"/en":{label:"English",selectText:"Languages",ariaLabel:"Select language",editLinkText:"Edit this page on GitHub",lastUpdated:"Last Updated",nav:[{text:"Guide",link:"/guide/"},{text:"Config Reference",link:"/config/"},{text:"Plugin",link:"/plugin/"},{text:"Theme",link:"/theme/"},{text:"0.x",link:"https://v0.vuepress.vuejs.org/"}],sidebar:{}}}},locales:{"/":{lang:"zh-CN",title:"笃行",description:"笃行致远,不负芳华",path:"/"},"/en/":{lang:"English",title:"Practice",description:"The back-end architects self practice",path:"/en/"}}};function he(t){var e=document.createElement("link");e.href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css",e.rel="stylesheet",document.body.appendChild(e);var n=document.createElement("script");function r(t){var e=document.getElementById("gitalk-container");e||((e=document.createElement("div")).id="gitalk-container",e.classList.add("content"));var n=document.querySelector(".page-nav");n&&(n.appendChild(e),"undefined"!=typeof Gitalk&&Gitalk instanceof Function&&(t.fullPath,new Gitalk({clientID:"5e01d05713fb81675776",clientSecret:"599d38643f2c2fb15438c137f345a03fcb244b50",repo:"practice",owner:"m9rco",admin:["m9rco"],id:location.pathname,distractionFreeMode:!1,language:"zh-CN"}).render("gitalk-container")))}n.src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js",document.body.appendChild(n),t.afterEach((function(t){n.onload?r(t):n.onload=function(){r(t)}}))}n(98);r.a.component("Bit",(function(){return Promise.all([n.e(0),n.e(6)]).then(n.bind(null,285))})),r.a.component("Comment",(function(){return n.e(11).then(n.bind(null,256))})),r.a.component("OtherComponent",(function(){return n.e(13).then(n.bind(null,286))})),r.a.component("UpgradePath",(function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,287))})),r.a.component("demo-1",(function(){return n.e(14).then(n.bind(null,257))})),r.a.component("diagram-markdown-slot-relationship",(function(){return n.e(15).then(n.bind(null,288))})),r.a.component("svg-container",(function(){return Promise.all([n.e(0),n.e(8)]).then(n.bind(null,289))})),r.a.component("Foo-Bar",(function(){return n.e(12).then(n.bind(null,258))})),r.a.component("Badge",(function(){return Promise.all([n.e(0),n.e(10)]).then(n.bind(null,290))}));n(99),n(100);function ve(t){const e=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-e.left,y:n.top-e.top}}n(101);var me={name:"BackToTop",props:{threshold:{type:Number,default:300}},data:function(){return{scrollTop:null}},computed:{show:function(){return this.scrollTop>this.threshold}},mounted:function(){var t=this;this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",qt()((function(){t.scrollTop=t.getScrollTop()}),100))},methods:{getScrollTop:function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},scrollToTop:function(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}}},ye=(n(110),Object(le.a)(me,(function(){var t=this.$createElement,e=this._self._c||t;return e("transition",{attrs:{name:"fade"}},[this.show?e("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[e("g",{attrs:{transform:"translate(-229 -126.358)"}},[e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])}),[],!1,null,"5fd4ef0c",null).exports);function ge(t,e){void 0===e&&(e={});var n=e.registrationOptions;void 0===n&&(n={}),delete e.registrationOptions;var r=function(t){for(var n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];e&&e[t]&&e[t].apply(e,n)};"serviceWorker"in navigator&&window.addEventListener("load",(function(){Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))?(!function(t,e,n){fetch(t).then((function(r){404===r.status?(e("error",new Error("Service worker not found at "+t)),_e()):-1===r.headers.get("content-type").indexOf("javascript")?(e("error",new Error("Expected "+t+" to have javascript content-type, but received "+r.headers.get("content-type"))),_e()):be(t,e,n)})).catch((function(t){navigator.onLine?e("error",t):e("offline")}))}(t,r,n),navigator.serviceWorker.ready.then((function(t){r("ready",t)}))):be(t,r,n)}))}function be(t,e,n){navigator.serviceWorker.register(t,n).then((function(t){e("registered",t),t.waiting?e("updated",t):t.onupdatefound=function(){e("updatefound",t);var n=t.installing;n.onstatechange=function(){"installed"===n.state&&(navigator.serviceWorker.controller?e("updated",t):e("cached",t))}}})).catch((function(t){e("error",t)}))}function _e(){"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(t){t.unregister()}))}class we{constructor(t){Object.defineProperty(this,"registration",{value:t,configurable:!0,writable:!0})}update(){return this.registration.update()}skipWaiting(){const t=this.registration.waiting;return t?(console.log("[vuepress:sw] Doing worker.skipWaiting()."),new Promise((e,n)=>{const r=new MessageChannel;r.port1.onmessage=t=>{console.log("[vuepress:sw] Done worker.skipWaiting()."),t.data.error?n(t.data.error):e(t.data)},t.postMessage({type:"skip-waiting"},[r.port2])})):Promise.resolve()}}var xe=n(12);r.a.component("SWUpdatePopup",()=>Promise.all([n.e(0),n.e(9)]).then(n.bind(null,254)));var Oe=n(77),ke=(n(81),n(91),Object(le.a)({},(function(){var t=this.$createElement,e=this._self._c||t;return e("svg",{staticStyle:{"enable-background":"new 0 0 50 50"},attrs:{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 30 30"}},[e("rect",{attrs:{x:"0",y:"13",width:"4",height:"5"}},[e("animate",{attrs:{attributeName:"height",attributeType:"XML",values:"5;21;5",begin:"0s",dur:"0.6s",repeatCount:"indefinite"}}),this._v(" "),e("animate",{attrs:{attributeName:"y",attributeType:"XML",values:"13; 5; 13",begin:"0s",dur:"0.6s",repeatCount:"indefinite"}})]),this._v(" "),e("rect",{attrs:{x:"10",y:"13",width:"4",height:"5"}},[e("animate",{attrs:{attributeName:"height",attributeType:"XML",values:"5;21;5",begin:"0.15s",dur:"0.6s",repeatCount:"indefinite"}}),this._v(" "),e("animate",{attrs:{attributeName:"y",attributeType:"XML",values:"13; 5; 13",begin:"0.15s",dur:"0.6s",repeatCount:"indefinite"}})]),this._v(" "),e("rect",{attrs:{x:"20",y:"13",width:"4",height:"5"}},[e("animate",{attrs:{attributeName:"height",attributeType:"XML",values:"5;21;5",begin:"0.3s",dur:"0.6s",repeatCount:"indefinite"}}),this._v(" "),e("animate",{attrs:{attributeName:"y",attributeType:"XML",values:"13; 5; 13",begin:"0.3s",dur:"0.6s",repeatCount:"indefinite"}})])])}),[],!1,null,null,null).exports),Ce={x:0,y:0,"line-width":2,"line-length":50,"text-margin":10,"font-size":14,"font-color":"#8DA1AC","line-color":"#8DA1AC","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block",scale:1},Se={ant:Object.assign({},Ce,{symbols:{start:{class:"start-element","font-color":"white",fill:"#595959","line-width":"0px"},end:{class:"end-element","font-color":"white",fill:"#595959","line-width":"0px"},operation:{class:"operation-element","font-color":"white",fill:"#1890ff","line-width":"0px"},inputoutput:{class:"inputoutput-element","font-color":"white",fill:"#1890ff","line-width":"0px"},subroutine:{class:"subroutine-element","font-color":"white",fill:"#FF485E","element-color":"#fff","line-color":"red"},condition:{class:"condition-element","font-color":"white",fill:"#FF485E","line-width":"0px"},parallel:{class:"parallel-element","font-color":"white",fill:"#1890ff","line-width":"0px"}}}),vue:Object.assign({},Ce,{symbols:{start:{class:"start-element","font-color":"white",fill:"#2F495F","line-width":"0px"},end:{class:"end-element","font-color":"white",fill:"#2F495F","line-width":"0px"},operation:{class:"operation-element","font-color":"white",fill:"#00BC7D","line-width":"0px"},inputoutput:{class:"inputoutput-element","font-color":"white",fill:"#EB4D5D","line-width":"0px"},subroutine:{class:"subroutine-element","font-color":"white",fill:"#937AC4","element-color":"#fff","line-color":"red"},condition:{class:"condition-element","font-color":"white",fill:"#FFB500","line-width":"0px"},parallel:{class:"parallel-element","font-color":"white",fill:"#2F495F","line-width":"0px"}}})},Ee={name:"flowchart",components:{Loading:ke},props:{id:{type:String,required:!0},code:{type:String,required:!0},preset:{type:String,default:"vue"}},data:function(){return{loading:!0}},mounted:function(){var t=this,e=Se[this.preset];if(e){var r=this.code;this.$el.setAttribute("id",this.id);Promise.all([n.e(3).then(n.t.bind(null,250,7)),new Promise((function(t){return setTimeout(t,500)}))]).then((function(n){(0,Object(Oe.a)(n,1)[0].default.parse)(r).drawSVG(t.id,e),t.loading=!1}))}else console.warn("[vuepress-plugin-flowchart] Unknown preset: ".concat(this.preset))}},Ae=(n(140),Object(le.a)(Ee,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vuepress-flowchart",class:{loading:this.loading}},[this.loading?e("Loading",{staticClass:"vuepress-flowchart-loading-icon"}):this._e()],1)}),[],!1,null,null,null).exports),$e=[function(t){var e=t.Vue,r=t.isServer,o=t.router;try{document&&he(o)}catch(t){console.error(t.message)}r||n.e(4).then(n.t.bind(null,249,7)).then((function(t){e.use(t.default)}))},{},function(t){t.Vue.mixin({computed:{$dataBlock:function(){return this.$options.__data__block__}}})},{},{},({Vue:t,router:e})=>{e.options.scrollBehavior=(e,n,r)=>{if(r)return window.scrollTo({top:r.y,behavior:"smooth"});if(e.hash){if(t.$vuepress.$get("disableScrollBehavior"))return!1;const n=document.querySelector(e.hash);return!!n&&window.scrollTo({top:ve(n).y,behavior:"smooth"})}return window.scrollTo({top:0,behavior:"smooth"})}},({Vue:t})=>{t.component("BackToTop",ye)},({router:t,isServer:e})=>{t.onReady(()=>{e||ge("/service-worker.js",{registrationOptions:{},ready(){console.log("[vuepress:sw] Service worker is active."),xe.a.$emit("sw-ready")},cached(t){console.log("[vuepress:sw] Content has been cached for offline use."),xe.a.$emit("sw-cached",new we(t))},updated(t){console.log("[vuepress:sw] Content updated."),xe.a.$emit("sw-updated",new we(t))},offline(){console.log("[vuepress:sw] No internet connection found. App is running in offline mode."),xe.a.$emit("sw-offline")},error(t){console.error("[vuepress:sw] Error during service worker registration:",t),xe.a.$emit("sw-error",t),ga("send","exception",{exDescription:t.message,exFatal:!1})}})})},({router:t})=>{var e,n,r,o,i,a;"undefined"!=typeof window&&(e=window,n=document,r="script",o="ga",e.GoogleAnalyticsObject=o,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,i=n.createElement(r),a=n.getElementsByTagName(r)[0],i.async=1,i.src="https://www.google-analytics.com/analytics.js",a.parentNode.insertBefore(i,a),ga("create","UA-158536766-1","auto"),ga("set","anonymizeIp",!0),t.afterEach((function(t){ga("set","page",t.fullPath),ga("send","pageview")})))},function(t){const{Vue:e}=t;e.component("FlowChart",Ae)}],je=["BackToTop"];n(141),n(93),n(95);var Te=n(80),ze=n.n(Te);function Pe(t,e){for(var n=0;nt.path.toLowerCase()===e.toLowerCase()).length>0}var Re={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return Object(Ut.h)("pageKey",e),r.a.component(e)||r.a.component(e,Object(Ut.d)(e)),r.a.component(e)?t(e):t("")}},Ne={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:[`content__${e.slotKey}`]},n()[e.slotKey])},De=(n(146),Object(le.a)({},(function(t,e){var n=e._c;return n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),e._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])}),[],!0,null,null,null).exports),Fe={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};r.a.config.productionTip=!1,r.a.use(Ft),r.a.use(Me),r.a.mixin(function(t,e,n=r.a){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const o=new(t(n.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(i).reduce((t,e)=>(e.startsWith("$")&&(t[e]=i[e].get),t),a),{computed:a}}((function(t){return function(){function e(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e)}var n,r,o;return n=e,(r=[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||""}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;nn||(t.hash?!r.a.$vuepress.$get("disableScrollBehavior")&&{selector:t.hash}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Ie(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Ie(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Ie(t,o)?r(o):Ie(t,n)?r(n):r()}})}(n);const o={};try{$e.forEach(e=>{"function"==typeof e&&e({Vue:r.a,options:o,router:n,siteData:de,isServer:t})})}catch(t){console.error(t)}return{app:new r.a(Object.assign(o,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},je.map(e=>t(e)))])})),router:n}}(!1);window.__VUEPRESS__={version:"1.3.0",hash:"0e1c4d9"},Be.onReady(()=>{Ue.$mount("#app")})}]); \ No newline at end of file + */function o(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function i(t,e){return e instanceof t||e&&(e.name===t.name||e._name===t._name)}function a(t,e){for(var n in e)t[n]=e[n];return t}var s={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var s=o.$createElement,u=n.name,l=o.$route,f=o._routerViewCache||(o._routerViewCache={}),p=0,d=!1;o&&o._routerRoot!==o;){var h=o.$vnode?o.$vnode.data:{};h.routerView&&p++,h.keepAlive&&o._directInactive&&o._inactive&&(d=!0),o=o.$parent}if(i.routerViewDepth=p,d){var v=f[u],m=v&&v.component;return m?(v.configProps&&c(m,i,v.route,v.configProps),s(m,i,r)):s()}var y=l.matched[p],g=y&&y.components[u];if(!y||!g)return f[u]=null,s();f[u]={component:g},i.registerRouteInstance=function(t,e){var n=y.instances[u];(e&&n!==t||!e&&n===t)&&(y.instances[u]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){y.instances[u]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==y.instances[u]&&(y.instances[u]=t.componentInstance)};var b=y.props&&y.props[u];return b&&(a(f[u],{route:l,configProps:b}),c(g,i,l,b)),s(g,i,r)}};function c(t,e,n,r){var o=e.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(n,r);if(o){o=e.props=a({},o);var i=e.attrs=e.attrs||{};for(var s in o)t.props&&s in t.props||(i[s]=o[s],delete o[s])}}var u=/[!'()*]/g,l=function(t){return"%"+t.charCodeAt(0).toString(16)},f=/%2C/g,p=function(t){return encodeURIComponent(t).replace(u,l).replace(f,",")},d=decodeURIComponent;function h(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=d(n.shift()),o=n.length>0?d(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function v(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return p(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(p(e)):r.push(p(e)+"="+p(t)))})),r.join("&")}return p(e)+"="+p(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var m=/\/?$/;function y(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=g(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:w(e,o),matched:t?_(t):[]};return n&&(a.redirectedFrom=w(n,o)),Object.freeze(a)}function g(t){if(Array.isArray(t))return t.map(g);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=g(t[n]);return e}return t}var b=y(null,{path:"/"});function _(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function w(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||v)(r)+o}function x(t,e){return e===b?t===e:!!e&&(t.path&&e.path?t.path.replace(m,"")===e.path.replace(m,"")&&t.hash===e.hash&&O(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&O(t.query,e.query)&&O(t.params,e.params)))}function O(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every((function(n){var r=t[n],o=e[n];return"object"==typeof r&&"object"==typeof o?O(r,o):String(r)===String(o)}))}function k(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var o=e.split("/");n&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),a=0;a=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",f=u.path?k(u.path,l,n||o.append):l,p=function(t,e,n){void 0===e&&(e={});var r,o=n||h;try{r=o(t||"")}catch(t){r={}}for(var i in e)r[i]=e[i];return r}(u.query,o.query,r&&r.options.parseQuery),d=o.hash||u.hash;return d&&"#"!==d.charAt(0)&&(d="#"+d),{_normalized:!0,path:f,query:p,hash:d}}var q,W=function(){},G={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,s=o.route,c=o.href,u={},l=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==l?"router-link-active":l,d=null==f?"router-link-exact-active":f,h=null==this.activeClass?p:this.activeClass,v=null==this.exactActiveClass?d:this.exactActiveClass,g=s.redirectedFrom?y(null,V(s.redirectedFrom),null,n):s;u[v]=x(r,g),u[h]=this.exact?u[v]:function(t,e){return 0===t.path.replace(m,"/").indexOf(e.path.replace(m,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,g);var b=function(t){X(t)&&(e.replace?n.replace(i,W):n.push(i,W))},_={click:X};Array.isArray(this.event)?this.event.forEach((function(t){_[t]=b})):_[this.event]=b;var w={class:u},O=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:s,navigate:b,isActive:u[h],isExactActive:u[v]});if(O){if(1===O.length)return O[0];if(O.length>1||!O.length)return 0===O.length?t():t("span",{},O)}if("a"===this.tag)w.on=_,w.attrs={href:c};else{var k=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=H(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function bt(t){return function(e,n,r){var i=!1,a=0,s=null;_t(t,(function(t,e,n,c){if("function"==typeof t&&void 0===t.cid){i=!0,a++;var u,l=Ot((function(e){var o;((o=e).__esModule||xt&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:q.extend(e),n.components[c]=e,--a<=0&&r()})),f=Ot((function(t){var e="Failed to resolve async component "+c+": "+t;s||(s=o(t)?t:new Error(e),r(s))}));try{u=t(l,f)}catch(t){f(t)}if(u)if("function"==typeof u.then)u.then(l,f);else{var p=u.component;p&&"function"==typeof p.then&&p.then(l,f)}}})),i||r()}}function _t(t,e){return wt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function wt(t){return Array.prototype.concat.apply([],t)}var xt="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ot(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var kt=function(t){function e(e){t.call(this),this.name=this._name="NavigationDuplicated",this.message='Navigating to current location ("'+e.fullPath+'") is not allowed',Object.defineProperty(this,"stack",{value:(new t).stack,writable:!0,configurable:!0})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);kt._name="NavigationDuplicated";var Ct=function(t,e){this.router=t,this.base=function(t){if(!t)if(Y){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=b,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function St(t,e,n,r){var o=_t(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=q.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return wt(r?o.reverse():o)}function Et(t,e){if(e)return function(){return t.apply(e,arguments)}}Ct.prototype.listen=function(t){this.cb=t},Ct.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ct.prototype.onError=function(t){this.errorCbs.push(t)},Ct.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,(function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach((function(t){t(o)})))}),(function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach((function(e){e(t)})))}))},Ct.prototype.confirmTransition=function(t,e,n){var r=this,a=this.current,s=function(t){!i(kt,t)&&o(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)};if(x(t,a)&&t.matched.length===a.matched.length)return this.ensureURL(),s(new kt(t));var c=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n-1?decodeURI(t.slice(0,r))+t.slice(r):decodeURI(t)}else t=decodeURI(t.slice(0,n))+t.slice(n);return t}function Pt(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Lt(t){vt?mt(Pt(t)):window.location.hash=t}function Mt(t){vt?yt(Pt(t)):window.location.replace(Pt(t))}var It=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){e.index=n,e.updateRoute(r)}),(function(t){i(kt,t)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ct),Rt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Z(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!vt&&!1!==t.fallback,this.fallback&&(e="hash"),Y||(e="abstract"),this.mode=e,e){case"history":this.history=new At(this,t.base);break;case"hash":this.history=new jt(this,t.base,this.fallback);break;case"abstract":this.history=new It(this,t.base);break;default:0}},Nt={currentRoute:{configurable:!0}};function Dt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Rt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Nt.currentRoute.get=function(){return this.history&&this.history.current},Rt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null)})),!this.app){this.app=t;var n=this.history;if(n instanceof At)n.transitionTo(n.getCurrentLocation());else if(n instanceof jt){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Rt.prototype.beforeEach=function(t){return Dt(this.beforeHooks,t)},Rt.prototype.beforeResolve=function(t){return Dt(this.resolveHooks,t)},Rt.prototype.afterEach=function(t){return Dt(this.afterHooks,t)},Rt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Rt.prototype.onError=function(t){this.history.onError(t)},Rt.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Rt.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Rt.prototype.go=function(t){this.history.go(t)},Rt.prototype.back=function(){this.go(-1)},Rt.prototype.forward=function(){this.go(1)},Rt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Rt.prototype.resolve=function(t,e,n){var r=V(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?C(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Rt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==b&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Rt.prototype,Nt),Rt.install=function t(e){if(!t.installed||q!==e){t.installed=!0,q=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",s),e.component("RouterLink",G);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Rt.version="3.1.5",Y&&window.Vue&&window.Vue.use(Rt);var Ft=Rt;var Ut=n(1),Bt={created(){this.$ssrContext&&(this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.description=this.$page.description||this.$description)},mounted(){this.currentMetaTags=new Set,this.updateMeta()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.$page.frontmatter.meta||[],e=t.slice(0);0===t.filter(t=>"description"===t.name).length&&e.push({name:"description",content:this.$description});const n=document.querySelectorAll('meta[name="description"]');n.length&&n.forEach(t=>this.currentMetaTags.add(t)),this.currentMetaTags=new Set(Ht(e,this.currentMetaTags))}},watch:{$page(){this.updateMeta()}},beforeDestroy(){Ht(null,this.currentMetaTags)}};function Ht(t,e){if(e&&[...e].forEach(t=>{document.head.removeChild(t)}),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}var Vt=n(29),qt=n.n(Vt),Wt={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:qt()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Gt=n(30),Xt=n.n(Gt),Yt={mounted(){Xt.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||r.a.component(t.name)||Xt.a.start(),n()}),this.$router.afterEach(()=>{Xt.a.done(),this.isSidebarOpen=!1})}},Kt=n(78),Qt=n.n(Kt),Zt={mounted(){Qt.a.polyfill()}},Jt=(n(97),Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(t){function e(){}t(e,e)},o=function(t){var e=t.target;e!==C?-1!==b.indexOf(e)&&v({target:e}):h()},i=function(){if(!w&&k.original){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(x-t)>O.scrollOffset&&setTimeout(h,150)}},a=function(t){var e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||h()},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t;if(t.background&&(C.style.background=t.background),t.container&&t.container instanceof Object&&(e.container=Jt({},O.container,t.container)),t.template){var n=ee(t.template)?t.template:document.querySelector(t.template);e.template=n}return O=Jt({},O,e),b.forEach((function(t){t.dispatchEvent(ae("medium-zoom:update",{detail:{zoom:S}}))})),S},c=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(Jt({},O,e))},u=function(){for(var t=arguments.length,e=Array(t),n=0;n0?e.reduce((function(t,e){return[].concat(t,re(e))}),[]):b;return r.forEach((function(t){t.classList.remove("medium-zoom-image"),t.dispatchEvent(ae("medium-zoom:detach",{detail:{zoom:S}}))})),b=b.filter((function(t){return-1===r.indexOf(t)})),S},f=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.addEventListener("medium-zoom:"+t,e,n)})),_.push({type:"medium-zoom:"+t,listener:e,options:n}),S},p=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.removeEventListener("medium-zoom:"+t,e,n)})),_=_.filter((function(n){return!(n.type==="medium-zoom:"+t&&n.listener.toString()===e.toString())})),S},d=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,n=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},e=void 0,n=void 0;if(O.container)if(O.container instanceof Object)e=(t=Jt({},t,O.container)).width-t.left-t.right-2*O.margin,n=t.height-t.top-t.bottom-2*O.margin;else{var r=(ee(O.container)?O.container:document.querySelector(O.container)).getBoundingClientRect(),o=r.width,i=r.height,a=r.left,s=r.top;t=Jt({},t,{width:o,height:i,left:a,top:s})}e=e||t.width-2*O.margin,n=n||t.height-2*O.margin;var c=k.zoomedHd||k.original,u=ne(c)?e:c.naturalWidth||e,l=ne(c)?n:c.naturalHeight||n,f=c.getBoundingClientRect(),p=f.top,d=f.left,h=f.width,v=f.height,m=Math.min(u,e)/h,y=Math.min(l,n)/v,g=Math.min(m,y),b="scale("+g+") translate3d("+((e-h)/2-d+O.margin+t.left)/g+"px, "+((n-v)/2-p+O.margin+t.top)/g+"px, 0)";k.zoomed.style.transform=b,k.zoomedHd&&(k.zoomedHd.style.transform=b)};return new r((function(t){if(e&&-1===b.indexOf(e))t(S);else{if(k.zoomed)t(S);else{if(e)k.original=e;else{if(!(b.length>0))return void t(S);var r=b;k.original=r[0]}if(k.original.dispatchEvent(ae("medium-zoom:open",{detail:{zoom:S}})),x=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,w=!0,k.zoomed=ie(k.original),document.body.appendChild(C),O.template){var o=ee(O.template)?O.template:document.querySelector(O.template);k.template=document.createElement("div"),k.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(k.template)}if(document.body.appendChild(k.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),k.original.classList.add("medium-zoom-image--hidden"),k.zoomed.classList.add("medium-zoom-image--opened"),k.zoomed.addEventListener("click",h),k.zoomed.addEventListener("transitionend",(function e(){w=!1,k.zoomed.removeEventListener("transitionend",e),k.original.dispatchEvent(ae("medium-zoom:opened",{detail:{zoom:S}})),t(S)})),k.original.getAttribute("data-zoom-src")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute("srcset"),k.zoomedHd.removeAttribute("sizes"),k.zoomedHd.src=k.zoomed.getAttribute("data-zoom-src"),k.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+k.zoomedHd.src),k.zoomedHd=null,n()};var i=setInterval((function(){k.zoomedHd.complete&&(clearInterval(i),k.zoomedHd.classList.add("medium-zoom-image--opened"),k.zoomedHd.addEventListener("click",h),document.body.appendChild(k.zoomedHd),n())}),10)}else if(k.original.hasAttribute("srcset")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute("sizes");var a=k.zoomedHd.addEventListener("load",(function(){k.zoomedHd.removeEventListener("load",a),k.zoomedHd.classList.add("medium-zoom-image--opened"),k.zoomedHd.addEventListener("click",h),document.body.appendChild(k.zoomedHd),n()}))}else n()}}}))},h=function(){return new r((function(t){if(!w&&k.original){w=!0,document.body.classList.remove("medium-zoom--opened"),k.zoomed.style.transform="",k.zoomedHd&&(k.zoomedHd.style.transform=""),k.template&&(k.template.style.transition="opacity 150ms",k.template.style.opacity=0),k.original.dispatchEvent(ae("medium-zoom:close",{detail:{zoom:S}})),k.zoomed.addEventListener("transitionend",(function e(){k.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(k.zoomed),k.zoomedHd&&document.body.removeChild(k.zoomedHd),document.body.removeChild(C),k.zoomed.classList.remove("medium-zoom-image--opened"),k.template&&document.body.removeChild(k.template),w=!1,k.zoomed.removeEventListener("transitionend",e),k.original.dispatchEvent(ae("medium-zoom:closed",{detail:{zoom:S}})),k.original=null,k.zoomed=null,k.zoomedHd=null,k.template=null,t(S)}))}else t(S)}))},v=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target;return k.original?h():d({target:e})},m=function(){return O},y=function(){return b},g=function(){return k.original},b=[],_=[],w=!1,x=0,O=n,k={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(e)?O=e:(e||"string"==typeof e)&&u(e),O=Jt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},O);var C=oe(O.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",h);var S={open:d,close:h,toggle:v,update:s,clone:c,attach:u,detach:l,on:f,off:p,getOptions:m,getImages:y,getZoomedImage:g};return S},ce=[Bt,Wt,Yt,Zt,{data:()=>({zoom:null}),mounted(){this.updateZoom()},updated(){this.updateZoom()},methods:{updateZoom(){setTimeout(()=>{this.zoom&&this.zoom.detach(),this.zoom=se(".theme-default-content :not(a) > img",void 0)},1e3)}}}],ue={name:"GlobalLayout",computed:{layout:function(){var t=this.getLayout();return Object(Ut.h)("layout",t),r.a.component(t)}},methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},le=n(2),fe=Object(le.a)(ue,(function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;Object(Ut.f)(fe,"mixins",ce);var pe=[{name:"v-746bd11e",path:"/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-746bd11e").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-5ba934e1",path:"/zh/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-5ba934e1").then(n)}},{path:"/zh/index.html",redirect:"/zh/"},{name:"v-74d01bde",path:"/zh/db/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-74d01bde").then(n)}},{path:"/zh/db/index.html",redirect:"/zh/db/"},{name:"v-58cebc34",path:"/zh/db/clickhouse.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-58cebc34").then(n)}},{name:"v-dbd7ec2c",path:"/zh/db/hbase.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-dbd7ec2c").then(n)}},{name:"v-94740eec",path:"/zh/db/mongodb.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-94740eec").then(n)}},{name:"v-5559350a",path:"/zh/db/mysql.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-5559350a").then(n)}},{name:"v-0a8a5aec",path:"/zh/db/neo4j.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-0a8a5aec").then(n)}},{name:"v-fc0c3ca4",path:"/zh/db/postgreSQL.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-fc0c3ca4").then(n)}},{name:"v-f82d23ac",path:"/zh/db/redis.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-f82d23ac").then(n)}},{name:"v-16372753",path:"/zh/devops/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-16372753").then(n)}},{path:"/zh/devops/index.html",redirect:"/zh/devops/"},{name:"v-793e68e1",path:"/zh/distributed/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-793e68e1").then(n)}},{path:"/zh/distributed/index.html",redirect:"/zh/distributed/"},{name:"v-5cfbe97e",path:"/zh/guide/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-5cfbe97e").then(n)}},{path:"/zh/guide/index.html",redirect:"/zh/guide/"},{name:"v-accb5676",path:"/zh/os/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-accb5676").then(n)}},{path:"/zh/os/index.html",redirect:"/zh/os/"},{name:"v-728e1cec",path:"/zh/os/coroutines.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-728e1cec").then(n)}},{name:"v-d2c24fec",path:"/zh/os/cpu.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-d2c24fec").then(n)}},{name:"v-173c9516",path:"/zh/os/io.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-173c9516").then(n)}},{name:"v-3d7c27ec",path:"/zh/os/linux.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-3d7c27ec").then(n)}},{name:"v-77f2e22a",path:"/zh/os/process.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-77f2e22a").then(n)}},{name:"v-d505af64",path:"/zh/os/thread.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-d505af64").then(n)}},{name:"v-4db484c1",path:"/zh/program/",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-4db484c1").then(n)}},{path:"/zh/program/index.html",redirect:"/zh/program/"},{name:"v-6c1827f0",path:"/zh/program/c.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-6c1827f0").then(n)}},{name:"v-775f4f8a",path:"/zh/program/golang.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-775f4f8a").then(n)}},{name:"v-3ca656aa",path:"/zh/program/javascript.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-3ca656aa").then(n)}},{name:"v-a9d38bc4",path:"/zh/program/php.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-a9d38bc4").then(n)}},{name:"v-3bd307ca",path:"/zh/program/python.html",component:fe,beforeEnter:function(t,e,n){Object(Ut.a)("Layout","v-3bd307ca").then(n)}},{path:"*",component:fe}],de={title:"",description:"",base:"/",pages:[{title:"Home",frontmatter:{home:!0,heroImage:"/hero.png",actionText:"快速上手 →",footer:"MIT Licensed | Copyright © 2020 Marco"},regularPath:"/",relativePath:"README.md",key:"v-746bd11e",path:"/",lastUpdated:"2/28/2020, 6:33:35 AM"},{title:"Home",frontmatter:{home:!0,heroImage:"/hero.png",actionText:"快速上手 →",actionLink:"/zh/guide/",features:[{title:"简洁至上",details:"以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。"}],footer:"MIT Licensed | Copyright © 2020-PRESENT Marco"},regularPath:"/zh/",relativePath:"zh/README.md",key:"v-5ba934e1",path:"/zh/",lastUpdated:"2/15/2020, 9:48:35 AM"},{title:"数据库 🔎",frontmatter:{},regularPath:"/zh/db/",relativePath:"zh/db/README.md",key:"v-74d01bde",path:"/zh/db/",headers:[{level:2,title:"数据库概述",slug:"数据库概述"},{level:2,title:"附录",slug:"附录"}],lastUpdated:"3/1/2020, 11:29:42 PM"},{title:"Clickhouse",frontmatter:{},regularPath:"/zh/db/clickhouse.html",relativePath:"zh/db/clickhouse.md",key:"v-58cebc34",path:"/zh/db/clickhouse.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"HBase",frontmatter:{},regularPath:"/zh/db/hbase.html",relativePath:"zh/db/hbase.md",key:"v-dbd7ec2c",path:"/zh/db/hbase.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"MongoDB",frontmatter:{},regularPath:"/zh/db/mongodb.html",relativePath:"zh/db/mongodb.md",key:"v-94740eec",path:"/zh/db/mongodb.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"MySQL",frontmatter:{},regularPath:"/zh/db/mysql.html",relativePath:"zh/db/mysql.md",key:"v-5559350a",path:"/zh/db/mysql.html",headers:[{level:2,title:"基础架构",slug:"基础架构"},{level:3,title:"连接器管理",slug:"连接器管理"},{level:3,title:"Mysql缓存",slug:"mysql缓存"},{level:3,title:"分析器",slug:"分析器"},{level:3,title:"优化器",slug:"优化器"},{level:3,title:"执行器",slug:"执行器"},{level:3,title:"日志系统",slug:"日志系统"},{level:2,title:"数据结构",slug:"数据结构"},{level:3,title:"B树、B-树、B+树",slug:"b树、b-树、b-树"},{level:3,title:"磁盘存取原理",slug:"磁盘存取原理"},{level:3,title:"MyISAM 索引实现",slug:"myisam-索引实现"},{level:3,title:"InnoDB 索引实现",slug:"innodb-索引实现"},{level:2,title:"锁机制",slug:"锁机制"},{level:2,title:"隔离级别",slug:"隔离级别"},{level:2,title:"MVCC",slug:"mvcc"},{level:2,title:"InnoDB",slug:"innodb"},{level:2,title:"Explain",slug:"explain"},{level:3,title:"参考文献",slug:"参考文献"}],lastUpdated:"2/16/2020, 4:43:13 PM"},{title:"Neo4J",frontmatter:{},regularPath:"/zh/db/neo4j.html",relativePath:"zh/db/neo4j.md",key:"v-0a8a5aec",path:"/zh/db/neo4j.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"PostgreSQL",frontmatter:{},regularPath:"/zh/db/postgreSQL.html",relativePath:"zh/db/postgreSQL.md",key:"v-fc0c3ca4",path:"/zh/db/postgreSQL.html",headers:[{level:2,title:"初始化",slug:"初始化"},{level:3,title:"数学关系",slug:"数学关系"},{level:3,title:"准备环境",slug:"准备环境"},{level:3,title:"从SQL开始",slug:"从sql开始"},{level:2,title:"体系结构",slug:"体系结构"},{level:2,title:"MVCC",slug:"mvcc"}],lastUpdated:"3/1/2020, 11:29:42 PM"},{title:"Redis",frontmatter:{},regularPath:"/zh/db/redis.html",relativePath:"zh/db/redis.md",key:"v-f82d23ac",path:"/zh/db/redis.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{frontmatter:{},regularPath:"/zh/devops/",relativePath:"zh/devops/README.md",key:"v-16372753",path:"/zh/devops/",lastUpdated:"2/15/2020, 11:02:54 AM"},{frontmatter:{},regularPath:"/zh/distributed/",relativePath:"zh/distributed/README.md",key:"v-793e68e1",path:"/zh/distributed/",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"要怎样努力,才能成为很厉害的人",frontmatter:{},regularPath:"/zh/guide/",relativePath:"zh/guide/README.md",key:"v-5cfbe97e",path:"/zh/guide/",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"操作系统",frontmatter:{},regularPath:"/zh/os/",relativePath:"zh/os/README.md",key:"v-accb5676",path:"/zh/os/",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"协程",frontmatter:{},regularPath:"/zh/os/coroutines.html",relativePath:"zh/os/coroutines.md",key:"v-728e1cec",path:"/zh/os/coroutines.html",lastUpdated:"2/24/2020, 2:21:13 PM"},{title:"CPU",frontmatter:{},regularPath:"/zh/os/cpu.html",relativePath:"zh/os/cpu.md",key:"v-d2c24fec",path:"/zh/os/cpu.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"IO",frontmatter:{},regularPath:"/zh/os/io.html",relativePath:"zh/os/io.md",key:"v-173c9516",path:"/zh/os/io.html",headers:[{level:2,title:"概念",slug:"概念"},{level:3,title:"用户态切换到内核态",slug:"用户态切换到内核态"},{level:3,title:"进程的结构-PCB",slug:"进程的结构-pcb"},{level:3,title:"进程切换",slug:"进程切换"},{level:3,title:"创建进程",slug:"创建进程"},{level:3,title:"进程的阻塞",slug:"进程的阻塞"},{level:3,title:"同步与异步",slug:"同步与异步"},{level:3,title:"同步与异步的区别",slug:"同步与异步的区别"},{level:3,title:"阻塞与非阻塞",slug:"阻塞与非阻塞"},{level:3,title:"文件描述符 fd",slug:"文件描述符-fd"},{level:2,title:"缓存 I/O",slug:"缓存-i-o"},{level:2,title:"网络 I/O",slug:"网络-i-o"},{level:2,title:"IO模式",slug:"io模式"},{level:2,title:"阻塞 I/O",slug:"阻塞-i-o"},{level:3,title:"非阻塞 I/O",slug:"非阻塞-i-o"},{level:3,title:"同步非阻塞与同步阻塞之间有什么优缺点呢?",slug:"同步非阻塞与同步阻塞之间有什么优缺点呢?"},{level:2,title:"I/O 多路复用",slug:"i-o-多路复用"},{level:3,title:"poll",slug:"poll"},{level:3,title:"epoll",slug:"epoll"},{level:3,title:"实现原理",slug:"实现原理"},{level:2,title:"信号驱动 I/O",slug:"信号驱动-i-o"},{level:2,title:"异步 I/O",slug:"异步-i-o"},{level:3,title:"小结",slug:"小结"},{level:2,title:"IO设计模式",slug:"io设计模式"},{level:3,title:"传统IO设计模式",slug:"传统io设计模式"},{level:3,title:"多线程模式",slug:"多线程模式"},{level:3,title:"线程池模式",slug:"线程池模式"},{level:3,title:"高性能IO设计模式",slug:"高性能io设计模式"},{level:3,title:"Reactor",slug:"reactor"},{level:3,title:"Proactor",slug:"proactor"}],lastUpdated:"2/25/2020, 7:09:44 AM"},{title:"LINUX",frontmatter:{},regularPath:"/zh/os/linux.html",relativePath:"zh/os/linux.md",key:"v-3d7c27ec",path:"/zh/os/linux.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"进程",frontmatter:{},regularPath:"/zh/os/process.html",relativePath:"zh/os/process.md",key:"v-77f2e22a",path:"/zh/os/process.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"线程",frontmatter:{},regularPath:"/zh/os/thread.html",relativePath:"zh/os/thread.md",key:"v-d505af64",path:"/zh/os/thread.html",lastUpdated:"2/15/2020, 11:02:54 AM"},{title:"编译型语言",frontmatter:{},regularPath:"/zh/program/",relativePath:"zh/program/README.md",key:"v-4db484c1",path:"/zh/program/",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"C",frontmatter:{},regularPath:"/zh/program/c.html",relativePath:"zh/program/c.md",key:"v-6c1827f0",path:"/zh/program/c.html",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"Golang",frontmatter:{},regularPath:"/zh/program/golang.html",relativePath:"zh/program/golang.md",key:"v-775f4f8a",path:"/zh/program/golang.html",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"JavaScript",frontmatter:{},regularPath:"/zh/program/javascript.html",relativePath:"zh/program/javascript.md",key:"v-3ca656aa",path:"/zh/program/javascript.html",lastUpdated:"2/22/2020, 6:07:07 PM"},{title:"PHP",frontmatter:{},regularPath:"/zh/program/php.html",relativePath:"zh/program/php.md",key:"v-a9d38bc4",path:"/zh/program/php.html",headers:[{level:2,title:"源码整体框架",slug:"源码整体框架"},{level:2,title:"执行原理概述",slug:"执行原理概述"},{level:2,title:"Zend 虚拟机",slug:"zend-虚拟机"},{level:3,title:"符号表",slug:"符号表"},{level:3,title:"指令",slug:"指令"},{level:2,title:"生命周期",slug:"生命周期"},{level:3,title:"SAPI",slug:"sapi"},{level:2,title:"内存管理",slug:"内存管理"},{level:2,title:"垃圾回收",slug:"垃圾回收"},{level:3,title:"垃圾的产生",slug:"垃圾的产生"},{level:3,title:"回收过程",slug:"回收过程"},{level:3,title:"垃圾收集的内部实现",slug:"垃圾收集的内部实现"},{level:2,title:"扩展的构成及编译",slug:"扩展的构成及编译"},{level:3,title:"扩展的构成",slug:"扩展的构成"},{level:3,title:"编译工具",slug:"编译工具"},{level:3,title:"php-config",slug:"php-config"},{level:3,title:"编写扩展的基本步骤",slug:"编写扩展的基本步骤"},{level:3,title:"config.m4",slug:"config-m4"}],lastUpdated:"2/24/2020, 2:14:52 AM"},{title:"Python",frontmatter:{},regularPath:"/zh/program/python.html",relativePath:"zh/program/python.md",key:"v-3bd307ca",path:"/zh/program/python.html",lastUpdated:"2/22/2020, 6:07:07 PM"}],themeConfig:{repo:"m9rco/practice",docsRepo:"m9-lab/m9-lab.github.io",docsBranch:"master",editLinks:!0,docsDir:"docs",algolia:{apiKey:"17103d809d3df489f3e1de21aaa02b48",indexName:"practice"},smoothScroll:!0,locales:{"/":{label:"简体中文",selectText:"选择语言",ariaLabel:"选择语言",editLinkText:"在 GitHub 上编辑此页",lastUpdated:"上次更新",nav:[{text:"指南",link:"/zh/guide/"},{text:"数据库",link:"/zh/db/"},{text:"操作系统",link:"/zh/os/"},{text:"编程语言",link:"/zh/program/"},{text:"分布式设计",link:"/zh/distributed/"},{text:"DevOPS",link:"/zh/devops/"},{text:"通用基础",ariaLabel:"通用基础",items:[{text:"算法 & 数据结构",items:[{text:"数据结构",link:"/zh/structures-algorithm/structures.html"},{text:"基本算法",link:"/zh/structures-algorithm/algorithm.html"},{text:"Leetcode",link:"/zh/leetcode/"}]},{text:"网络安全",items:[{text:"WEB 安全",link:"/zh/structures-algorithm/structures.html"},{text:"服务器安全",link:"/zh/structures-algorithm/algorithm.html"},{text:"序列化漏洞",link:"/zh/structures-algorithm/algorithm.html"},{text:"加密解密",link:"/zh/structures-algorithm/algorithm.html"},{text:"网络隔离",link:"/zh/structures-algorithm/algorithm.html"}]},{text:"设计思路",items:[{text:"并发问题",link:"/zh/structures-algorithm/structures.html"},{text:"限流熔断",link:"/zh/structures-algorithm/algorithm.html"},{text:"海量搜索",link:"/zh/structures-algorithm/algorithm.html"}]}]}],sidebar:{"/zh/guide/":[{title:"指南",collapsable:!1,children:[""]}],"/zh/db/":[{title:"关系型数据库",collapsable:!1,children:["mysql","postgreSQL"]},{title:"键-值数据库",collapsable:!1,children:["redis"]},{title:"列数据库",collapsable:!1,children:["hbase","clickhouse"]},{title:"文档型数据库",collapsable:!1,children:["mongodb"]},{title:"图数据库",collapsable:!1,children:["neo4j"]}],"/zh/os/":[{title:"操作系统",collapsable:!1,children:["io","cpu","thread","coroutines","process"]},{title:"计算机原理",collapsable:!1,children:["linux"]}],"/zh/program/":[{title:"解释型语言",collapsable:!1,children:["php","python","javascript"]},{title:"编译型语言",collapsable:!1,children:["golang","c"]}]}},"/en":{label:"English",selectText:"Languages",ariaLabel:"Select language",editLinkText:"Edit this page on GitHub",lastUpdated:"Last Updated",nav:[{text:"Guide",link:"/guide/"},{text:"Config Reference",link:"/config/"},{text:"Plugin",link:"/plugin/"},{text:"Theme",link:"/theme/"},{text:"0.x",link:"https://v0.vuepress.vuejs.org/"}],sidebar:{}}}},locales:{"/":{lang:"zh-CN",title:"笃行",description:"笃行致远,不负芳华",path:"/"},"/en/":{lang:"English",title:"Practice",description:"The back-end architects self practice",path:"/en/"}}};function he(t){var e=document.createElement("link");e.href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css",e.rel="stylesheet",document.body.appendChild(e);var n=document.createElement("script");function r(t){var e=document.getElementById("gitalk-container");e||((e=document.createElement("div")).id="gitalk-container",e.classList.add("content"));var n=document.querySelector(".page-nav");n&&(n.appendChild(e),"undefined"!=typeof Gitalk&&Gitalk instanceof Function&&(t.fullPath,new Gitalk({clientID:"5e01d05713fb81675776",clientSecret:"599d38643f2c2fb15438c137f345a03fcb244b50",repo:"practice",owner:"m9rco",admin:["m9rco"],id:location.pathname,distractionFreeMode:!1,language:"zh-CN"}).render("gitalk-container")))}n.src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js",document.body.appendChild(n),t.afterEach((function(t){n.onload?r(t):n.onload=function(){r(t)}}))}n(98);r.a.component("Bit",(function(){return Promise.all([n.e(0),n.e(6)]).then(n.bind(null,285))})),r.a.component("Comment",(function(){return n.e(11).then(n.bind(null,256))})),r.a.component("OtherComponent",(function(){return n.e(13).then(n.bind(null,286))})),r.a.component("UpgradePath",(function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,287))})),r.a.component("demo-1",(function(){return n.e(14).then(n.bind(null,257))})),r.a.component("diagram-markdown-slot-relationship",(function(){return n.e(15).then(n.bind(null,288))})),r.a.component("svg-container",(function(){return Promise.all([n.e(0),n.e(8)]).then(n.bind(null,289))})),r.a.component("Foo-Bar",(function(){return n.e(12).then(n.bind(null,258))})),r.a.component("Badge",(function(){return Promise.all([n.e(0),n.e(10)]).then(n.bind(null,290))}));n(99),n(100);function ve(t){const e=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-e.left,y:n.top-e.top}}n(101);var me={name:"BackToTop",props:{threshold:{type:Number,default:300}},data:function(){return{scrollTop:null}},computed:{show:function(){return this.scrollTop>this.threshold}},mounted:function(){var t=this;this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",qt()((function(){t.scrollTop=t.getScrollTop()}),100))},methods:{getScrollTop:function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},scrollToTop:function(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}}},ye=(n(110),Object(le.a)(me,(function(){var t=this.$createElement,e=this._self._c||t;return e("transition",{attrs:{name:"fade"}},[this.show?e("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[e("g",{attrs:{transform:"translate(-229 -126.358)"}},[e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])}),[],!1,null,"5fd4ef0c",null).exports);function ge(t,e){void 0===e&&(e={});var n=e.registrationOptions;void 0===n&&(n={}),delete e.registrationOptions;var r=function(t){for(var n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];e&&e[t]&&e[t].apply(e,n)};"serviceWorker"in navigator&&window.addEventListener("load",(function(){Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))?(!function(t,e,n){fetch(t).then((function(r){404===r.status?(e("error",new Error("Service worker not found at "+t)),_e()):-1===r.headers.get("content-type").indexOf("javascript")?(e("error",new Error("Expected "+t+" to have javascript content-type, but received "+r.headers.get("content-type"))),_e()):be(t,e,n)})).catch((function(t){navigator.onLine?e("error",t):e("offline")}))}(t,r,n),navigator.serviceWorker.ready.then((function(t){r("ready",t)}))):be(t,r,n)}))}function be(t,e,n){navigator.serviceWorker.register(t,n).then((function(t){e("registered",t),t.waiting?e("updated",t):t.onupdatefound=function(){e("updatefound",t);var n=t.installing;n.onstatechange=function(){"installed"===n.state&&(navigator.serviceWorker.controller?e("updated",t):e("cached",t))}}})).catch((function(t){e("error",t)}))}function _e(){"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(t){t.unregister()}))}class we{constructor(t){Object.defineProperty(this,"registration",{value:t,configurable:!0,writable:!0})}update(){return this.registration.update()}skipWaiting(){const t=this.registration.waiting;return t?(console.log("[vuepress:sw] Doing worker.skipWaiting()."),new Promise((e,n)=>{const r=new MessageChannel;r.port1.onmessage=t=>{console.log("[vuepress:sw] Done worker.skipWaiting()."),t.data.error?n(t.data.error):e(t.data)},t.postMessage({type:"skip-waiting"},[r.port2])})):Promise.resolve()}}var xe=n(12);r.a.component("SWUpdatePopup",()=>Promise.all([n.e(0),n.e(9)]).then(n.bind(null,254)));var Oe=n(77),ke=(n(81),n(91),Object(le.a)({},(function(){var t=this.$createElement,e=this._self._c||t;return e("svg",{staticStyle:{"enable-background":"new 0 0 50 50"},attrs:{xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 30 30"}},[e("rect",{attrs:{x:"0",y:"13",width:"4",height:"5"}},[e("animate",{attrs:{attributeName:"height",attributeType:"XML",values:"5;21;5",begin:"0s",dur:"0.6s",repeatCount:"indefinite"}}),this._v(" "),e("animate",{attrs:{attributeName:"y",attributeType:"XML",values:"13; 5; 13",begin:"0s",dur:"0.6s",repeatCount:"indefinite"}})]),this._v(" "),e("rect",{attrs:{x:"10",y:"13",width:"4",height:"5"}},[e("animate",{attrs:{attributeName:"height",attributeType:"XML",values:"5;21;5",begin:"0.15s",dur:"0.6s",repeatCount:"indefinite"}}),this._v(" "),e("animate",{attrs:{attributeName:"y",attributeType:"XML",values:"13; 5; 13",begin:"0.15s",dur:"0.6s",repeatCount:"indefinite"}})]),this._v(" "),e("rect",{attrs:{x:"20",y:"13",width:"4",height:"5"}},[e("animate",{attrs:{attributeName:"height",attributeType:"XML",values:"5;21;5",begin:"0.3s",dur:"0.6s",repeatCount:"indefinite"}}),this._v(" "),e("animate",{attrs:{attributeName:"y",attributeType:"XML",values:"13; 5; 13",begin:"0.3s",dur:"0.6s",repeatCount:"indefinite"}})])])}),[],!1,null,null,null).exports),Ce={x:0,y:0,"line-width":2,"line-length":50,"text-margin":10,"font-size":14,"font-color":"#8DA1AC","line-color":"#8DA1AC","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block",scale:1},Se={ant:Object.assign({},Ce,{symbols:{start:{class:"start-element","font-color":"white",fill:"#595959","line-width":"0px"},end:{class:"end-element","font-color":"white",fill:"#595959","line-width":"0px"},operation:{class:"operation-element","font-color":"white",fill:"#1890ff","line-width":"0px"},inputoutput:{class:"inputoutput-element","font-color":"white",fill:"#1890ff","line-width":"0px"},subroutine:{class:"subroutine-element","font-color":"white",fill:"#FF485E","element-color":"#fff","line-color":"red"},condition:{class:"condition-element","font-color":"white",fill:"#FF485E","line-width":"0px"},parallel:{class:"parallel-element","font-color":"white",fill:"#1890ff","line-width":"0px"}}}),vue:Object.assign({},Ce,{symbols:{start:{class:"start-element","font-color":"white",fill:"#2F495F","line-width":"0px"},end:{class:"end-element","font-color":"white",fill:"#2F495F","line-width":"0px"},operation:{class:"operation-element","font-color":"white",fill:"#00BC7D","line-width":"0px"},inputoutput:{class:"inputoutput-element","font-color":"white",fill:"#EB4D5D","line-width":"0px"},subroutine:{class:"subroutine-element","font-color":"white",fill:"#937AC4","element-color":"#fff","line-color":"red"},condition:{class:"condition-element","font-color":"white",fill:"#FFB500","line-width":"0px"},parallel:{class:"parallel-element","font-color":"white",fill:"#2F495F","line-width":"0px"}}})},Ee={name:"flowchart",components:{Loading:ke},props:{id:{type:String,required:!0},code:{type:String,required:!0},preset:{type:String,default:"vue"}},data:function(){return{loading:!0}},mounted:function(){var t=this,e=Se[this.preset];if(e){var r=this.code;this.$el.setAttribute("id",this.id);Promise.all([n.e(3).then(n.t.bind(null,250,7)),new Promise((function(t){return setTimeout(t,500)}))]).then((function(n){(0,Object(Oe.a)(n,1)[0].default.parse)(r).drawSVG(t.id,e),t.loading=!1}))}else console.warn("[vuepress-plugin-flowchart] Unknown preset: ".concat(this.preset))}},Ae=(n(140),Object(le.a)(Ee,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vuepress-flowchart",class:{loading:this.loading}},[this.loading?e("Loading",{staticClass:"vuepress-flowchart-loading-icon"}):this._e()],1)}),[],!1,null,null,null).exports),$e=[function(t){var e=t.Vue,r=t.isServer,o=t.router;try{document&&he(o)}catch(t){console.error(t.message)}r||n.e(4).then(n.t.bind(null,249,7)).then((function(t){e.use(t.default)}))},{},function(t){t.Vue.mixin({computed:{$dataBlock:function(){return this.$options.__data__block__}}})},{},{},({Vue:t,router:e})=>{e.options.scrollBehavior=(e,n,r)=>{if(r)return window.scrollTo({top:r.y,behavior:"smooth"});if(e.hash){if(t.$vuepress.$get("disableScrollBehavior"))return!1;const n=document.querySelector(e.hash);return!!n&&window.scrollTo({top:ve(n).y,behavior:"smooth"})}return window.scrollTo({top:0,behavior:"smooth"})}},({Vue:t})=>{t.component("BackToTop",ye)},({router:t,isServer:e})=>{t.onReady(()=>{e||ge("/service-worker.js",{registrationOptions:{},ready(){console.log("[vuepress:sw] Service worker is active."),xe.a.$emit("sw-ready")},cached(t){console.log("[vuepress:sw] Content has been cached for offline use."),xe.a.$emit("sw-cached",new we(t))},updated(t){console.log("[vuepress:sw] Content updated."),xe.a.$emit("sw-updated",new we(t))},offline(){console.log("[vuepress:sw] No internet connection found. App is running in offline mode."),xe.a.$emit("sw-offline")},error(t){console.error("[vuepress:sw] Error during service worker registration:",t),xe.a.$emit("sw-error",t),ga("send","exception",{exDescription:t.message,exFatal:!1})}})})},({router:t})=>{var e,n,r,o,i,a;"undefined"!=typeof window&&(e=window,n=document,r="script",o="ga",e.GoogleAnalyticsObject=o,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,i=n.createElement(r),a=n.getElementsByTagName(r)[0],i.async=1,i.src="https://www.google-analytics.com/analytics.js",a.parentNode.insertBefore(i,a),ga("create","UA-158536766-1","auto"),ga("set","anonymizeIp",!0),t.afterEach((function(t){ga("set","page",t.fullPath),ga("send","pageview")})))},function(t){const{Vue:e}=t;e.component("FlowChart",Ae)}],je=["BackToTop"];n(141),n(93),n(95);var Te=n(80),ze=n.n(Te);function Pe(t,e){for(var n=0;nt.path.toLowerCase()===e.toLowerCase()).length>0}var Re={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return Object(Ut.h)("pageKey",e),r.a.component(e)||r.a.component(e,Object(Ut.d)(e)),r.a.component(e)?t(e):t("")}},Ne={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:[`content__${e.slotKey}`]},n()[e.slotKey])},De=(n(146),Object(le.a)({},(function(t,e){var n=e._c;return n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),e._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])}),[],!0,null,null,null).exports),Fe={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};r.a.config.productionTip=!1,r.a.use(Ft),r.a.use(Me),r.a.mixin(function(t,e,n=r.a){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const o=new(t(n.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(i).reduce((t,e)=>(e.startsWith("$")&&(t[e]=i[e].get),t),a),{computed:a}}((function(t){return function(){function e(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e)}var n,r,o;return n=e,(r=[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||""}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;nn||(t.hash?!r.a.$vuepress.$get("disableScrollBehavior")&&{selector:t.hash}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Ie(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Ie(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Ie(t,o)?r(o):Ie(t,n)?r(n):r()}})}(n);const o={};try{$e.forEach(e=>{"function"==typeof e&&e({Vue:r.a,options:o,router:n,siteData:de,isServer:t})})}catch(t){console.error(t)}return{app:new r.a(Object.assign(o,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},je.map(e=>t(e)))])})),router:n}}(!1);window.__VUEPRESS__={version:"1.3.0",hash:"29055b8"},Be.onReady(()=>{Ue.$mount("#app")})}]); \ No newline at end of file diff --git a/db/postgresql/postgresql-01.png b/db/postgresql/postgresql-01.png new file mode 100644 index 0000000..e8ee296 Binary files /dev/null and b/db/postgresql/postgresql-01.png differ diff --git a/db/postgresql/postgresql-02.png b/db/postgresql/postgresql-02.png new file mode 100644 index 0000000..65afc43 Binary files /dev/null and b/db/postgresql/postgresql-02.png differ diff --git a/index.html b/index.html index 02e209a..35d8215 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ - + @@ -119,6 +119,6 @@

- + diff --git a/service-worker.js b/service-worker.js index f572970..31a98c8 100644 --- a/service-worker.js +++ b/service-worker.js @@ -27,7 +27,7 @@ self.addEventListener('message', (event) => { self.__precacheManifest = [ { "url": "404.html", - "revision": "0bc59f6271a35919e8fd4a3c027c8a55" + "revision": "4b49a7a628f51024ae26e3716431f6aa" }, { "url": "architecture.png", @@ -78,8 +78,8 @@ self.__precacheManifest = [ "revision": "ec3ac35925e27c05249678dae39f399e" }, { - "url": "assets/js/19.1f71a0e2.js", - "revision": "e66eb3b1e4c4cb6a3979639feabef19e" + "url": "assets/js/19.2aa38084.js", + "revision": "d569ff51a63f3059ebdeb41ad83b584d" }, { "url": "assets/js/20.0a44368a.js", @@ -102,8 +102,8 @@ self.__precacheManifest = [ "revision": "56df2757105168d6989f41af98dd0f49" }, { - "url": "assets/js/25.e734f04f.js", - "revision": "daa557ff7488ec00d5fd9c84f6b64358" + "url": "assets/js/25.9165907b.js", + "revision": "cbdb1a9c20e0c65e46931ef7c746c828" }, { "url": "assets/js/26.0c6371a4.js", @@ -198,8 +198,8 @@ self.__precacheManifest = [ "revision": "c1f319c99acdf47265e5e17c04b1c431" }, { - "url": "assets/js/app.58b94fd8.js", - "revision": "4e1107a31cafade314c8427182da0f02" + "url": "assets/js/app.317b3400.js", + "revision": "d30ffa44ce4db023da63a84aeeb60048" }, { "url": "assets/js/vendors~docsearch.87ae9561.js", @@ -241,6 +241,14 @@ self.__precacheManifest = [ "url": "db/mysql/mysql-07.jpg", "revision": "416a1b17f4bc9055db554500393f6e2c" }, + { + "url": "db/postgresql/postgresql-01.png", + "revision": "67635cd276286d0b14aa3917466ec08f" + }, + { + "url": "db/postgresql/postgresql-02.png", + "revision": "ac0a50769fd3d8ee4cec55d9a8a71ce2" + }, { "url": "hero.png", "revision": "a77336361b60cc149e9ace8b8b4b0e0f" @@ -299,7 +307,7 @@ self.__precacheManifest = [ }, { "url": "index.html", - "revision": "34cbc30053164906b6aeaa459bbfe5c8" + "revision": "465af8e5411f931a505507612ba027b6" }, { "url": "line-numbers-desktop.png", @@ -383,103 +391,103 @@ self.__precacheManifest = [ }, { "url": "zh/db/clickhouse.html", - "revision": "cacefa1586ffcc3eba61a471a81dbcd3" + "revision": "0b719590fff4f7f9a313542fe97cbd2a" }, { "url": "zh/db/hbase.html", - "revision": "8fb68528b4e984da9482d1b035dfc432" + "revision": "70aa429513f9de8477590f63687295fd" }, { "url": "zh/db/index.html", - "revision": "d3ca30e9753d5c52935731adac1d46ca" + "revision": "1313119f0bc34f206e0e8558042c00ca" }, { "url": "zh/db/mongodb.html", - "revision": "05e8896fac09defd6ee260a6bc3c54e0" + "revision": "6abc2468d6089a7fcd9d779f21c42bc4" }, { "url": "zh/db/mysql.html", - "revision": "f21f91a9da7c988154d71f4da66739ec" + "revision": "733e55d8ee6e551259902f6ca983ccaa" }, { "url": "zh/db/neo4j.html", - "revision": "eecd96852e59f5432d658279415ba3e7" + "revision": "28a0e9e42d7f1e3bd0f524fcc95ad34b" }, { "url": "zh/db/postgreSQL.html", - "revision": "a2747e2dfe7be1d6844f0ddba3c32edc" + "revision": "1e052f09686d7d4422c833ccca3bb377" }, { "url": "zh/db/redis.html", - "revision": "81ba66d1177193625a855059fddea266" + "revision": "e1b318ca2bc8176baf6789e16ae3df26" }, { "url": "zh/devops/index.html", - "revision": "7eb109df22de9c8701f57d911cc1bc84" + "revision": "316c5fc5e74f9d05e47afe3918524cd1" }, { "url": "zh/distributed/index.html", - "revision": "ff3e5c5440f670e5496c708c98136cd9" + "revision": "fe09771504970e3f4db9d46447107df4" }, { "url": "zh/guide/index.html", - "revision": "f6a36567f90e2c433a53bbd30d0e5d62" + "revision": "2249f3a2bc9937f71ada603299dbeee7" }, { "url": "zh/index.html", - "revision": "83b3d8b931dfe27d1f64abd53a62a8ee" + "revision": "ccdd9d59a4793605d90d7258c1446599" }, { "url": "zh/os/coroutines.html", - "revision": "7610b1e9024beb045c0b379ebebf4813" + "revision": "49c674a49b5f49eed0fb7d0888a43058" }, { "url": "zh/os/cpu.html", - "revision": "d3b93d8d3c154cc6636ba39375f5bf79" + "revision": "39d7ef8a295621a637f4569c55338de8" }, { "url": "zh/os/index.html", - "revision": "b0c0c48566d4c7b4ba1b4f296daf1c9e" + "revision": "3db5cf3ff66ede35418e431285ad4211" }, { "url": "zh/os/io.html", - "revision": "946e3bd876f6f9d834e370ee730724cc" + "revision": "f07bf4849a35274a59a708781d25cff7" }, { "url": "zh/os/linux.html", - "revision": "7c1181da14d3a8ff39a9ec26dfc5b177" + "revision": "1951a3d409aa5883ea4633ee63b04b0a" }, { "url": "zh/os/process.html", - "revision": "ffb2a7e62c92eb3ea914d02363188d37" + "revision": "0975225c059c8e742797ee1c28d07dd4" }, { "url": "zh/os/thread.html", - "revision": "800cba2b1d4ccfcf5da6b7e757865a4c" + "revision": "f4e7160861559b43c52241264df98f06" }, { "url": "zh/program/c.html", - "revision": "1ac1075131d06c2b7dddc9558634195c" + "revision": "0936a914faabe5a63e0259caa89110d5" }, { "url": "zh/program/golang.html", - "revision": "93d4f57180c3ac37762046d38fcc5b78" + "revision": "6661e04edebf9636fbc1addc7da8dd84" }, { "url": "zh/program/index.html", - "revision": "482d5844e17e798b842c2d6ebb1bc2ca" + "revision": "3bc8f310ed7623f28b714a46d483c986" }, { "url": "zh/program/javascript.html", - "revision": "931b3a3b15cf24e2b4cb4c5c28c6f4e6" + "revision": "497e6f99fbe1bba3d9949b3ca7ab9bb9" }, { "url": "zh/program/php.html", - "revision": "11750cf08ee5f39c37047ece72e583d7" + "revision": "cd812ebe292061b854804f9c981741e9" }, { "url": "zh/program/python.html", - "revision": "87347787ffa0cd62306e4e09ba49bc66" + "revision": "ed19a0f38f5e63c3c9d7c8a0a6b917bc" } ].concat(self.__precacheManifest || []); workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); diff --git a/zh/db/clickhouse.html b/zh/db/clickhouse.html index 3caf863..ff1b744 100644 --- a/zh/db/clickhouse.html +++ b/zh/db/clickhouse.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/db/hbase.html b/zh/db/hbase.html index bb9680e..d4ebc56 100644 --- a/zh/db/hbase.html +++ b/zh/db/hbase.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/db/index.html b/zh/db/index.html index 30413e2..b73265d 100644 --- a/zh/db/index.html +++ b/zh/db/index.html @@ -16,7 +16,7 @@ - + @@ -112,7 +112,7 @@ English GitHub -

# 数据库 🔎

数据库不是凭空产生的,它们是为了解决实际使用中提出的问题,在RDBMS(关系数据库管理系统)出现的环境中,数据库插叙你的灵活性比灵活的模式更重要

# 数据库概述

本节包含了9种数据库的信息

MongoDB counchDB Riak Redis PostgreSQL Neo4J HBase Mysql Clickhouse
类型 文档 文档 键-值 键-值 关系 关系
数据类型 有类型 有类型 Blob 半类型 预定义且有类型 无类型 预定义且有类型
数据关系 自由定义的(链接) 预定义 预定义的(边)
标准对象 JSON JSON 文本 字符串 哈希
编写语言 C++ Erlang Erlang C/C++ C JAVA JAVA
接口协议 TCP上自定义 HTTP HTTP-Protobuf TCP上的简单文本 TCP上自定义 HTTP Thrift-HTTP
HTTP/REST
二级索引
版本化
Build Load mongoimport Bulk Doc API COPY命令
非常大的文件 GridFS 附件 Luwak(已弃用) BLOB
自由定义的查询 命令mapreduce 临时视图 弱支持Lucene 命令 SQL 图遍历,Cypher,搜索
mapreduce JavaScript JavaScript JavaScript,Erlang Hadoop
伸缩性 数据中心 数据中心 数据中心 集群(主-从) 集群(通过一些扩展) 集群(通过HA) 数据中心
耐久性 写前日志安全模式 只在崩溃时 写入法定数则耐久 仅追加的日志 ACID ACID 写前日志
请求压缩 文件重写 快照
复制 主-从(通过复集) 主-主 基于对等主-主 主-从 主-从 主-从(在企业版中) 主-从
并发 写锁 无锁的MVCC 向量锁 表/行写锁 写锁 每行一段
分片 锁(通过BigCouch过滤器) 插件(客户端) 扩展(PL/Proxy) 通过HDFS
事务 多操作队列 ACID ACID
触发器 更新验证或改变API 提交前后 事物事件处理程序
安全性 用户 用户 口令 用户/群 Kerberos,通过Hadoop的安全性
一主机多实例
主要区别 容易查询大量数据 耐久的可嵌入的集群 高可用性 非常非常快 最好的OSS RDBMS模型 灵活的图 规模非常大,Hadoop基础设施
不足 嵌入能力 查询能力 查询能力 负责数据 分布式高可用性 Blob或TB级数据 灵活增长查询能力

# 附录

- +

# 数据库 🔎

数据库不是凭空产生的,它们是为了解决实际使用中提出的问题,在RDBMS(关系数据库管理系统)出现的环境中,数据库插叙你的灵活性比灵活的模式更重要

# 数据库概述

本节包含了9种数据库的信息

MongoDB counchDB Riak Redis PostgreSQL Neo4J HBase Mysql Clickhouse
类型 文档 文档 键-值 键-值 关系 关系
数据类型 有类型 有类型 Blob 半类型 预定义且有类型 无类型 预定义且有类型
数据关系 自由定义的(链接) 预定义 预定义的(边)
标准对象 JSON JSON 文本 字符串 哈希
编写语言 C++ Erlang Erlang C/C++ C JAVA JAVA
接口协议 TCP上自定义 HTTP HTTP-Protobuf TCP上的简单文本 TCP上自定义 HTTP Thrift-HTTP
HTTP/REST
二级索引
版本化
Build Load mongoimport Bulk Doc API COPY命令
非常大的文件 GridFS 附件 Luwak(已弃用) BLOB
自由定义的查询 命令mapreduce 临时视图 弱支持Lucene 命令 SQL 图遍历,Cypher,搜索
mapreduce JavaScript JavaScript JavaScript,Erlang Hadoop
伸缩性 数据中心 数据中心 数据中心 集群(主-从) 集群(通过一些扩展) 集群(通过HA) 数据中心
耐久性 写前日志安全模式 只在崩溃时 写入法定数则耐久 仅追加的日志 ACID ACID 写前日志
请求压缩 文件重写 快照
复制 主-从(通过复集) 主-主 基于对等主-主 主-从 主-从 主-从(在企业版中) 主-从
并发 写锁 无锁的MVCC 向量锁 表/行写锁 写锁 每行一段
分片 锁(通过BigCouch过滤器) 插件(客户端) 扩展(PL/Proxy) 通过HDFS
事务 多操作队列 ACID ACID
触发器 更新验证或改变API 提交前后 事物事件处理程序
安全性 用户 用户 口令 用户/群 Kerberos,通过Hadoop的安全性
一主机多实例
主要区别 容易查询大量数据 耐久的可嵌入的集群 高可用性 非常非常快 最好的OSS RDBMS模型 灵活的图 规模非常大,Hadoop基础设施
不足 嵌入能力 查询能力 查询能力 负责数据 分布式高可用性 Blob或TB级数据 灵活增长查询能力

# 附录

+ diff --git a/zh/db/mongodb.html b/zh/db/mongodb.html index 04e306d..a027a71 100644 --- a/zh/db/mongodb.html +++ b/zh/db/mongodb.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/db/mysql.html b/zh/db/mysql.html index 872f33b..475e500 100644 --- a/zh/db/mysql.html +++ b/zh/db/mysql.html @@ -16,7 +16,7 @@ - + @@ -141,6 +141,6 @@ →

- + diff --git a/zh/db/neo4j.html b/zh/db/neo4j.html index 24db032..d5f1357 100644 --- a/zh/db/neo4j.html +++ b/zh/db/neo4j.html @@ -16,7 +16,7 @@ - + @@ -117,6 +117,6 @@

- + diff --git a/zh/db/postgreSQL.html b/zh/db/postgreSQL.html index 2922575..26ac5f0 100644 --- a/zh/db/postgreSQL.html +++ b/zh/db/postgreSQL.html @@ -16,7 +16,7 @@ - + @@ -112,7 +112,34 @@ English GitHub -

# PostgreSQL

- + diff --git a/zh/db/redis.html b/zh/db/redis.html index d8129d5..899b9a6 100644 --- a/zh/db/redis.html +++ b/zh/db/redis.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/devops/index.html b/zh/devops/index.html index 72d5fcd..8686f5e 100644 --- a/zh/devops/index.html +++ b/zh/devops/index.html @@ -16,7 +16,7 @@ - + @@ -113,6 +113,6 @@ GitHub

README.md

- + diff --git a/zh/distributed/index.html b/zh/distributed/index.html index 1fc9140..0ebeaaf 100644 --- a/zh/distributed/index.html +++ b/zh/distributed/index.html @@ -16,7 +16,7 @@ - + @@ -113,6 +113,6 @@ GitHub

README.md

- + diff --git a/zh/guide/index.html b/zh/guide/index.html index 4939eff..880741c 100644 --- a/zh/guide/index.html +++ b/zh/guide/index.html @@ -16,7 +16,7 @@ - + @@ -113,6 +113,6 @@ GitHub

# 要怎样努力,才能成为很厉害的人

foo

我以前啊,和你一样,很想成为一个很厉害很厉害很厉害的人。

喜欢看热血的东西,幻想自己是屠龙的勇士,登塔的先锋,我左手有剑,右手有光,没头没脑的燃烧自己,敌人的骑军来了,我说你们何人堪与之战,我的女人在等我。

后来我现实了一点,我觉得我要成为那种说走就走,说日就日的男人,我梳大背头,流浪在欧洲或者新几内亚的,我拍孩子,拍野兽,拍流浪的雏妓,与罗伯特德尼罗握手,说嘿,我给你写了愤怒的公牛2。

再后来,我觉得我人生的梦想,是在城市中心买上一间顶层公寓,把一整面墙都改造成钢化玻璃,在灯火通明的夜晚,我就要端着酒站在巨大的窗前,看整个城市在呼吸,然后我的朋友叩门,他带来了一打嫩模,我们就玩一些成年人的游戏

现在,我发现龙并不存在,我不会骑马,不会用单反,家住2楼,我能做的,就是把眼前的事儿做好,赚到足够的钱,这样我可以给我的姑娘一个地球仪,然后用飞镖扎它,扎到哪儿,就去哪儿玩。

这样看来,虽然我的想法随着生殖器的发育,始终在变,但那个很厉害很厉害的人,一直离我很远,甚至越来越远。

我心中曾经执剑的少年,此刻也混迹在市井之间。

血似乎都凉了。

我也不是没有惶恐过,是不是我这一生,都不能左手持剑,右手握着罗伯特德尼罗,说这里的嫩模随便你玩但是你他妈别从窗户上掉下去。

这样一看,我逊得不行,我的朋友都是一些凡人,比我还逊,业余生活就是推塔、中单、跪。

我心想,我是不是这辈子都要做一个逊逼,直到我的坟墓上写好墓志铭,我甚至都想好了:

我来,我见,我挂了。

最后我给了自己一个否定的答复,我不要。

我喜欢我的朋友们,喜欢我现在的生活,首先我希望你明白,没有厉害与逊逼得区分,只有血的凉与热,有的人觉得生活就这样吧,我算了,现在没什么不好。

有的人觉得生活这样挺好,但是我还要更好。

这种只要剧情稍微热血一点就会热泪盈眶的傻逼,已经不多了,一刻也不要停留。

所以现在,我和你不一样了,我仍然想成为一个很厉害很厉害很厉害的人,像我们这种剧情稍微热血一点就会热泪盈眶的傻逼,要好好珍惜自己。

很多人坐下来了,跟你说你不行,说你省点儿心吧,说你请静一静。

汹涌的人群就把你这样的少年淹没了,人群散去的时候,你也不见了,你那些承诺,谁也听不见,这个世界对于你,就再不可能有什么更有趣更漂亮的女朋友。

你就失约了,小逼崽子。

这么跟你说。

虽然随着年龄的增长,我趋于现实,不能像你那样分分钟冲动的燃烧,然而我每时每刻都有想做的事,有想达成的目标。

不排除以后的某一年,我会握着罗伯特德尼罗的手,他说这是你写得吗,愤怒的公牛2,只要他还没死。

故事里拳王拉莫塔忍着伤,他举着铁拳,挥汗如雨,要和命运斗争,他说我怎么能失约呢,我是那个要成为很厉害很厉害的拳王拉莫塔!

小伙儿,成为很厉害很厉害的人,最重要的,就是要热血,永远也不要让你的血凉下去,你凉下去了,就再也不能找到一个更有趣更漂亮的女友,你就失约了,于是那天她踏梦而来,就成了一个彻头彻尾的笑话。

当有一天你成为你讨厌的那种人,浑浑噩噩,你走在街上,看见那些更有趣更漂亮的女孩,你会不会想起多年以前,你说我答应你,在一个承诺就是永远的年纪。

读书,交友,美容,都不如你这一腔狗血,滚烫,灼人,你要燃上大半辈子,才对得起你现在说的这些话。

我听闻最美的故事,是公主死去了,屠龙的少年还在燃烧。

火苗再小,你都要反复的点燃。

所谓热血的少年,青涩的爱恋,死亡与梦之约。

这么好的故事。

你可别演砸了。

最后我给你点个人建议:

  1. 读书,读到倦,网上有很多方法,但你从来沉不下心看。
  2. 学习,学到疼,网上有很多方法,但你从来沉不下心看。
  3. 开口说话,冷场也要说话,脸皮薄也要说话,挨打也要说话。
  4. 如果你现在不知道做什么,至少你还可以先从做一个牛逼的学生开始。
  5. 更漂亮更有趣的女孩,五年以后再找。
  6. 承诺是鞭子,不是兴奋剂。
  7. 年纪大了,也不要说什么心如死灰。

改变自己是非常,非常,非常痛苦的,我能看出来你一腔热血的优点,自然知道你孤僻懒散自以为是的缺点,方法很多,不过我不确定你吃不吃得了苦,我和你共勉吧。

在成为最厉害最厉害最厉害的道路上。

- + diff --git a/zh/index.html b/zh/index.html index 284bddd..674bed1 100644 --- a/zh/index.html +++ b/zh/index.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@

简洁至上

以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。

- + diff --git a/zh/os/coroutines.html b/zh/os/coroutines.html index e7ca15a..dec0caa 100644 --- a/zh/os/coroutines.html +++ b/zh/os/coroutines.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/os/cpu.html b/zh/os/cpu.html index 516d7c4..b912f1a 100644 --- a/zh/os/cpu.html +++ b/zh/os/cpu.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/os/index.html b/zh/os/index.html index c1ea73e..85c6abe 100644 --- a/zh/os/index.html +++ b/zh/os/index.html @@ -16,7 +16,7 @@ - + @@ -113,6 +113,6 @@ GitHub

# 操作系统

- + diff --git a/zh/os/io.html b/zh/os/io.html index 59036b6..8e9076e 100644 --- a/zh/os/io.html +++ b/zh/os/io.html @@ -16,7 +16,7 @@ - + @@ -279,6 +279,6 @@ →

- + diff --git a/zh/os/linux.html b/zh/os/linux.html index 1875ad7..f6cebd4 100644 --- a/zh/os/linux.html +++ b/zh/os/linux.html @@ -16,7 +16,7 @@ - + @@ -117,6 +117,6 @@

- + diff --git a/zh/os/process.html b/zh/os/process.html index 293e5d8..f35ae8b 100644 --- a/zh/os/process.html +++ b/zh/os/process.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/os/thread.html b/zh/os/thread.html index 19c413c..e05ec0a 100644 --- a/zh/os/thread.html +++ b/zh/os/thread.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/program/c.html b/zh/program/c.html index a637679..d40b744 100644 --- a/zh/program/c.html +++ b/zh/program/c.html @@ -16,7 +16,7 @@ - + @@ -117,6 +117,6 @@

- + diff --git a/zh/program/golang.html b/zh/program/golang.html index c81687c..8f85cfa 100644 --- a/zh/program/golang.html +++ b/zh/program/golang.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/program/index.html b/zh/program/index.html index f953575..da28819 100644 --- a/zh/program/index.html +++ b/zh/program/index.html @@ -16,7 +16,7 @@ - + @@ -129,6 +129,6 @@ 中间码依赖jvm,而不依赖于平台(操作系统),只要jvm支持中间码,中间就能运行,不同平台的兼容性,就由jvm来解决,开发者可以专注于开发业务逻辑,这解决了编译语言的跨平台问题。

但如果你代码发生了改变,仍然需要再次编译。

# 完全解释

PHP是完全解释,它一次编译都省了,直接由解释器加载源代码,就开始逐行翻译并运行。 那么,调试程序的时候,更改代码就能直接再次运行,不存在编译的步骤,它在跨平台的基础上,又为开发调试提供了便利。 但这不一定是好事,这将导致php每一次运行,都需要先解释,再执行,运行效率上比不上java的直接由jvm运行中间码。

当然,java半编译半解释,虽然通过jvm解决了跨平台问题,但运行效率上,也是比不上编译型语言的,因为编译型语言开发的程序运行时,计算机只需要关注程序本身的流程就好了,但java,jvm也是对计算机资源的一种开销,不过这种开销非常小,几乎可以忽略。

- + diff --git a/zh/program/javascript.html b/zh/program/javascript.html index c2e8217..b8ebdf8 100644 --- a/zh/program/javascript.html +++ b/zh/program/javascript.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- + diff --git a/zh/program/php.html b/zh/program/php.html index f7521ad..11a9e60 100644 --- a/zh/program/php.html +++ b/zh/program/php.html @@ -16,7 +16,7 @@ - + @@ -345,6 +345,6 @@ →

- + diff --git a/zh/program/python.html b/zh/program/python.html index cf4b77a..c620bda 100644 --- a/zh/program/python.html +++ b/zh/program/python.html @@ -16,7 +16,7 @@ - + @@ -121,6 +121,6 @@ →

- +