blob: e3ea138c24e8939370f1ae08aac46dec6b029acf [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[308],{872:function(e,t,a){"use strict";a.r(t);var r=a(68),s=Object(r.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"存储引擎"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#存储引擎"}},[e._v("#")]),e._v(" 存储引擎")]),e._v(" "),a("img",{staticStyle:{width:"100%","max-width":"800px","max-height":"600px","margin-left":"auto","margin-right":"auto",display:"block"},attrs:{src:"https://user-images.githubusercontent.com/19167280/73625255-03fe2680-467f-11ea-91ae-64407ef1125c.png"}}),e._v(" "),a("h2",{attrs:{id:"设计思想"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#设计思想"}},[e._v("#")]),e._v(" 设计思想")]),e._v(" "),a("p",[e._v("存储引擎基于 LSM 设计。数据首先写入内存缓冲区 memtable 中,再刷到磁盘。内存中为每个设备维护当前持久化的(包括已经落盘的和正在持久化的)最大时间戳,根据这个时间戳将数据区分为顺序数据和乱序数据,不同种类的数据通过不同的 memtable 和 TsFile 管理。")]),e._v(" "),a("p",[e._v("每个数据文件 TsFile 在内存中对应一个文件索引信息 TsFileResource,供查询使用。")]),e._v(" "),a("p",[e._v("此外,存储引擎还包括异步持久化和文件合并机制。")]),e._v(" "),a("h2",{attrs:{id:"写入流程"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#写入流程"}},[e._v("#")]),e._v(" 写入流程")]),e._v(" "),a("h3",{attrs:{id:"相关代码"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#相关代码"}},[e._v("#")]),e._v(" 相关代码")]),e._v(" "),a("ul",[a("li",[a("p",[e._v("org.apache.iotdb.db.engine.StorageEngine")]),e._v(" "),a("p",[e._v("负责一个 IoTDB 实例的写入和访问,管理所有的 StorageGroupProsessor。")])]),e._v(" "),a("li",[a("p",[e._v("org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor")]),e._v(" "),a("p",[e._v("负责一个存储组一个时间分区内的数据写入和访问。管理所有分区的TsFileProcessor。")])]),e._v(" "),a("li",[a("p",[e._v("org.apache.iotdb.db.engine.storagegroup.TsFileProcessor")]),e._v(" "),a("p",[e._v("负责一个 TsFile 文件的数据写入和访问。")])])]),e._v(" "),a("h2",{attrs:{id:"数据写入"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据写入"}},[e._v("#")]),e._v(" 数据写入")]),e._v(" "),a("p",[e._v("详见:")]),e._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/zh/SystemDesign/StorageEngine/DataManipulation.html"}},[e._v("数据写入")])],1)]),e._v(" "),a("h2",{attrs:{id:"数据访问"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据访问"}},[e._v("#")]),e._v(" 数据访问")]),e._v(" "),a("ul",[a("li",[e._v("总入口(StorageEngine): public QueryDataSource query(SingleSeriesExpression seriesExpression, QueryContext context,\n​ QueryFileManager filePathsManager)\n​\n"),a("ul",[a("li",[e._v("找到所有包含这个时间序列的顺序和乱序的 TsFileResource 进行返回,供查询引擎使用。")])])])]),e._v(" "),a("h2",{attrs:{id:"相关文档"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#相关文档"}},[e._v("#")]),e._v(" 相关文档")]),e._v(" "),a("ul",[a("li",[a("p",[a("RouterLink",{attrs:{to:"/zh/SystemDesign/StorageEngine/WAL.html"}},[e._v("写前日志 (WAL)")])],1)]),e._v(" "),a("li",[a("p",[a("RouterLink",{attrs:{to:"/zh/SystemDesign/StorageEngine/FlushManager.html"}},[e._v("memtable 持久化")])],1)]),e._v(" "),a("li",[a("p",[a("RouterLink",{attrs:{to:"/zh/SystemDesign/StorageEngine/MergeManager.html"}},[e._v("文件合并机制")])],1)])])])}),[],!1,null,null,null);t.default=s.exports}}]);