{"id":478803,"date":"2026-05-06T14:30:11","date_gmt":"2026-05-06T14:30:11","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=478803"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=478803","title":{"rendered":"\u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435, \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 LSM-\u0434\u0432\u0438\u0436\u043e\u043a \u0441 MVCC, \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438 \u0438 Value Log \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Go"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a class=\"anchor\" name=\"intro\" id=\"intro\"><\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435: \u041d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u0437\u0430\u0434 \u044f \u043d\u0435 \u0434\u0443\u043c\u0430\u043b\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0441\u00a0\u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u0430\u0440\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u0435\u043a.\u00a0\u041b\u0438\u0441\u0442\u0430\u043b\u0430 \u0441\u0430\u0439\u0442\u044b \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u00a0\u0440\u0435\u0437\u044e\u043c\u0435\u00a0\u0431\u044b\u043b\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u043f\u043e\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f\u00a0\u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438. \u041d\u0430\u0442\u043a\u043d\u0443\u043b\u0430\u0441\u044c \u043d\u0430\u00a0\u0438\u0434\u0435\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c KV\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u0438\u0437\u00a0\u0441\u0435\u0431\u044f \u044d\u0442\u043e \u0447\u0443\u0434\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043a\u0430\u043a\u0438\u0435 \u043e\u043d\u0438 \u0432\u043e\u043e\u0431\u0449\u0435\u00a0\u0431\u044b\u0432\u0430\u044e\u0442. \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435.<\/p>\n<p>\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043c\u043e\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0411\u0414\u00a0\u2014 \u044d\u0442\u043e <strong><abbr class=\"habraabbr\" title=\"C\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438: \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c (MemTable), \u043f\u043e\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a \u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b (SSTable). \u0421\u0442\u0430\u0440\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f (\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043a\u043e\u043f\u0438\u043b\u0438\u0441\u044c \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435.\" data-title=\"&lt;p&gt;C\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438: \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c (MemTable), \u043f\u043e\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a \u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b (SSTable). \u0421\u0442\u0430\u0440\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f (\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043a\u043e\u043f\u0438\u043b\u0438\u0441\u044c \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\" LSM-Tree(Log-Structured Merge-Tree) \">LSM\u2011Tree<\/abbr><\/strong>, \u0435\u0441\u0442\u044c <strong><abbr class=\"habraabbr\" title=\"WriteBatch \u2014 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u043f\u0430\u0447\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u0438: \u043b\u0438\u0431\u043e \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u0447\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u0441\u044f, \u043b\u0438\u0431\u043e \u043d\u0438 \u043e\u0434\u043d\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u0438 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0432 WAL \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.\" data-title=\"&lt;p&gt;WriteBatch \u2014 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u043f\u0430\u0447\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u0438: \u043b\u0438\u0431\u043e \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u0447\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u0441\u044f, \u043b\u0438\u0431\u043e \u043d\u0438 \u043e\u0434\u043d\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u0438 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0432 WAL \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\">\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439<\/abbr><\/strong>, <strong>\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/strong> \u0441 <strong><abbr class=\"habraabbr\" title=\"\u041f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c: \u043c\u044b \u043d\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0430 \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0415\u0441\u043b\u0438 \u0443\u0441\u043f\u0435\u043b \u2014 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c.\" data-title=\"&lt;p&gt;\u041f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c: \u043c\u044b \u043d\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0430 \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0415\u0441\u043b\u0438 \u0443\u0441\u043f\u0435\u043b \u2014 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c.&lt;\/p&gt;\" data-abbr=\"\u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u043d\u0430\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \">\u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439<\/abbr><\/strong>,  <strong><abbr class=\"habraabbr\" title=\"\u0422\u0435\u0445\u043d\u0438\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u044e\u0447 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043a\u0430\u043c\u0438. \u0427\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u0432\u0438\u0434\u044f\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044f \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439.\" data-title=\"&lt;p&gt;\u0422\u0435\u0445\u043d\u0438\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u044e\u0447 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043a\u0430\u043c\u0438. \u0427\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u0432\u0438\u0434\u044f\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044f \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439.&lt;\/p&gt;\" data-abbr=\"MVCC (Multi-Version Concurrency Control)\">MVCC<\/abbr><\/strong> (\u0441 <abbr class=\"habraabbr\" title=\"\u0422\u0440\u044e\u043a \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u043a\u0438: \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 ^commitTS. \u0422\u043e\u0433\u0434\u0430 \u0441\u0432\u0435\u0436\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.\" data-title=\"&lt;p&gt;\u0422\u0440\u044e\u043a \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u043a\u0438: \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 ^commitTS. \u0422\u043e\u0433\u0434\u0430 \u0441\u0432\u0435\u0436\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430\">\u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043a\u0430\u043c\u0438 <\/abbr>, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432, <strong><abbr class=\"habraabbr\" title=\"\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439: \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432\u0438\u0434\u0438\u0442 \u0431\u0430\u0437\u0443 \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a\u043e\u0439 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (\u0441\u043d\u0430\u043f\u0448\u043e\u0442). \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u00ab\u043f\u043e\u0434 \u043d\u043e\u0441\u043e\u043c\u00bb \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f.\" data-title=\"&lt;p&gt;\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439: \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432\u0438\u0434\u0438\u0442 \u0431\u0430\u0437\u0443 \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a\u043e\u0439 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (\u0441\u043d\u0430\u043f\u0448\u043e\u0442). \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u00ab\u043f\u043e\u0434 \u043d\u043e\u0441\u043e\u043c\u00bb \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\" snapshot isolation\">snapshot isolation<\/abbr><\/strong> \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 <strong>\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438<\/strong>), <strong><abbr class=\"habraabbr\" title=\"\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 LSM\u2011\u0434\u0435\u0440\u0435\u0432\u043e \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 + \u0434\u043b\u0438\u043d\u0430). \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435.\" data-title=\"&lt;p&gt;\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 LSM\u2011\u0434\u0435\u0440\u0435\u0432\u043e \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 + \u0434\u043b\u0438\u043d\u0430). \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\" Value Log (WiscKey)\">Value Log<\/abbr><\/strong> , <strong><abbr class=\"habraabbr\" title=\"\u0416\u0443\u0440\u043d\u0430\u043b \u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0446 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a MemTable. \u041d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u043c \u043a\u0440\u0430\u0445\u0435.\" data-title=\"&lt;p&gt;\u0416\u0443\u0440\u043d\u0430\u043b \u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0446 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a MemTable. \u041d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u043c \u043a\u0440\u0430\u0445\u0435.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"WAL\">WAL<\/abbr><\/strong>, <strong><abbr class=\"habraabbr\" title=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 SSTable-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u041f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\" data-title=\"&lt;p&gt;\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 SSTable-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u041f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"Compaction\">Compaction<\/abbr><\/strong>, <strong><abbr class=\"habraabbr\" title=\"\u0416\u0443\u0440\u043d\u0430\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0430\u0437\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b.\" data-title=\"&lt;p&gt;\u0416\u0443\u0440\u043d\u0430\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0430\u0437\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b.&lt;\/p&gt;\" data-abbr=\"Manifest\">\u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442<\/abbr><\/strong> \u0438 \u0434\u0430\u0436\u0435 <strong><abbr class=\"habraabbr\" title=\"\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 Value Log \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 VLog, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f. \u0411\u0435\u0437 GC \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0440\u0430\u0441\u0442\u0438.\" data-title=\"&lt;p&gt;\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 Value Log \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 VLog, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f. \u0411\u0435\u0437 GC \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0440\u0430\u0441\u0442\u0438.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\" GC\">GC<\/abbr><\/strong>. \u0418 \u0435\u0441\u043b\u0438 \u0435\u0451 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u00a0\u0441\u0435\u0440\u0432\u0435\u0440, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CLI (\u0441\u043a\u043e\u0440\u043e \u0438 \u0432\u0435\u0431), \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0431\u0430\u0437\u0430 \u0438\u0437\u00a0\u0432\u0441\u0435\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 gRPC (12+). \u0410\u00a0\u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u0435\u0449\u0451 \u043e\u0433\u043e\u2011\u0433\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e!<\/p>\n<p>\u042f \u0441\u043b\u044b\u0448\u0430\u043b\u0430, \u0447\u0442\u043e\u00a0\u0435\u0441\u0442\u044c <strong>B\u2011tree<\/strong> \u0438 <strong>LSM<\/strong>, \u043d\u043e, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435\u00a0\u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0434\u0432\u0443\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445. \u0421\u0430\u043c\u044b\u043c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u043c \u0441\u0442\u0430\u043b\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 NoSQL\u2011\u0440\u0435\u0448\u0435\u043d\u0438\u0439: \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u0430\u043a\u00a0\u0441\u043f\u0430\u0441\u0442\u0438\u0441\u044c \u043e\u0442\u00a0\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u042f \u0437\u0430\u0433\u043e\u0440\u0435\u043b\u0430\u0441\u044c, \u043f\u043e\u043d\u0438\u043c\u0430\u044f, \u0447\u0442\u043e\u00a0\u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044e \u0441\u0432\u043e\u0439 \u043f\u0435\u0442\u2011\u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u043e\u043d\u0430\u0434\u0435\u043b\u0430\u044e \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u0434\u0435\u043b\u0430\u043b\u0430 \u0442\u0430\u043a\u043e\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430, \u043f\u0440\u0438\u043d\u044f\u043b\u0430\u0441\u044c \u0437\u0430\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0430. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 <strong>22\u00a0\u0430\u043f\u0440\u0435\u043b\u044f<\/strong>. \u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u0443\u00a0\u043c\u0435\u043d\u044f \u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u044f\u0434\u0440\u043e: <strong><abbr class=\"habraabbr\" title=\"in\u2011memory \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 (\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0435), \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u0412\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e \u043a\u043b\u044e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a.\" data-title=\"&lt;p&gt;&lt;\/p&gt;&lt;p&gt; in\u2011memory \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 (\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0435), \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u0412\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e \u043a\u043b\u044e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a.&lt;\/p&gt;\" data-abbr=\"MemTable\">MemTable<\/abbr><\/strong>, WAL, <strong><abbr class=\"habraabbr\" title=\"\u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u044b \u043a\u043b\u044e\u0447\u2011\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0431\u043b\u043e\u043a\u0438.\" data-title=\"&lt;p&gt;\u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u044b \u043a\u043b\u044e\u0447\u2011\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0431\u043b\u043e\u043a\u0438.&lt;\/p&gt;\" data-abbr=\"SSTable (Sorted String Table) \">SSTable<\/abbr><\/strong>, Compaction, MVCC, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, <strong><abbr class=\"habraabbr\" title=\"\u0433\u0440\u0443\u043f\u043f\u044b \u043a\u043b\u044e\u0447\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0436\u0438\u0432\u0443\u0442 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 LSM\u2011\u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u044b. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (\u0440\u0430\u0437\u043c\u0435\u0440 MemTable, \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d) \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445\" data-title=\"&lt;p&gt;\u0433\u0440\u0443\u043f\u043f\u044b \u043a\u043b\u044e\u0447\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0436\u0438\u0432\u0443\u0442 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 LSM\u2011\u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u044b. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (\u0440\u0430\u0437\u043c\u0435\u0440 MemTable, \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d) \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445&lt;\/p&gt;\" data-abbr=\"Column Families\">Column Families<\/abbr><\/strong>. \u0415\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439\u00a0\u2014 gRPC, REST, WebSocket, CLI, Docker \u0438 CI\/CD.<\/p>\n<h3>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><a href=\"#intro\" rel=\"noopener noreferrer nofollow\">\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u0445\u043e\u0442\u0435\u043b\u0430 \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435, \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#architecture\" rel=\"noopener noreferrer nofollow\">\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ScoriaDB: \u043a\u0430\u043a \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#problems\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a: \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#works\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u0447\u0442\u043e \u0435\u0449\u0451 \u043d\u0435\u0442<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#lessons\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e \u044f \u0432\u044b\u043d\u0435\u0441\u043b\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#try\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0443 \u0441\u0435\u0431\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#cli-demo\" rel=\"noopener noreferrer nofollow\">\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f CLI<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#docs\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conclusion\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a>  <\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<p><a class=\"anchor\" name=\"architecture\" id=\"architecture\"><\/a><\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ScoriaDB: \u043a\u0430\u043a\u00a0\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/h2>\n<p>\u042f \u043d\u0435\u00a0\u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u043b\u0430 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u044d\u0442\u043e \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u00a0\u0441\u0435\u0431\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432, \u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b LevelDB, RocksDB, BadgerDB, TiKV, \u044f \u0432\u0437\u044f\u043b\u0430 \u0443\u00a0\u043d\u0438\u0445 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0435\u0438. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0433\u0438\u0431\u0440\u0438\u0434.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6de\/ec6\/a69\/6deec6a69c82178b97a88e64e72b5b7c.png\" alt=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \" title=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \" width=\"3637\" height=\"3082\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6de\/ec6\/a69\/6deec6a69c82178b97a88e64e72b5b7c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6de\/ec6\/a69\/6deec6a69c82178b97a88e64e72b5b7c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <\/figcaption><\/div>\n<\/figure>\n<h4>MemTable: \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0451\u2011\u0442\u0430\u043a\u0438 B\u2011tree, \u0430\u00a0\u043d\u0435\u00a0skip list (\u0438 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439)<\/h4>\n<p>\u041c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430\u00a0\u0431\u044b\u043b\u0430 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f in\u2011memory \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u0414\u043b\u044f\u00a0\u0447\u0435\u0433\u043e? \u0427\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0430\u043d \u043f\u043e\u00a0\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0443 \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0SSTable.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a\u00a0\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><strong>\u0425\u0435\u0448\u2011\u0442\u0430\u0431\u043b\u0438\u0446\u0430<\/strong>? \u043d\u0435\u0442, \u043e\u043d\u0430 \u043d\u0435\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043a\u043b\u044e\u0447\u0435\u0439, \u0441\u043a\u0430\u043d \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>sync.Map<\/strong>? \u0422\u043e\u0436\u0435 \u043d\u0435\u0442, \u043d\u0435\u00a0\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u0430, \u043f\u043e\u0434\u00a0write\u2011heavy \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Skip list<\/strong>\u00a0\u2014 \u0425\u043c, \u044d\u0442\u043e \u0437\u043e\u043b\u043e\u0442\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 LSM (LevelDB, RocksDB, BadgerDB), lock\u2011free \u0438\u043b\u0438\u00a0\u0445\u043e\u0442\u044f\u00a0\u0431\u044b \u0441\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438. \u041d\u043e\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e skiplist \u0432\u00a0Go\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u043e\u0442\u0432\u043b\u0435\u0447\u044c \u043e\u0442\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 mvp.<\/p>\n<\/li>\n<li>\n<p><strong>B\u2011tree<\/strong>\u00a0\u2014 \u0432\u0437\u044f\u043b\u0430 <code>github.com\/google\/btree<\/code>. \u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439, \u0435\u0441\u0442\u044c <strong>copy\u2011on\u2011write<\/strong>,\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. <\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u044f\u0441\u043d\u044e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442, \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u043d\u0430\u00a0\u0432\u0441\u044e MemTable (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f B\u2011tree) \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0441\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0414\u043b\u044f\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u044f \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e \u043f\u043e\u0448\u043b\u0430 \u043d\u0430\u00a0\u044d\u0442\u043e, \u0432\u044b\u0438\u0433\u0440\u0430\u0432 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439. \u0412\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u043d\u0430\u00a0v0.3.0\u00a0\u2014 <strong>\u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0430\u00a0lock\u2011free skip list<\/strong> \u0441\u00a0\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u0430\u0437\u0430 \u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443.<\/p>\n<h4>SSTable \u0438 Bloom\u2011\u0444\u0438\u043b\u044c\u0442\u0440<\/h4>\n<p>\u041a\u043e\u0433\u0434\u0430 MemTable \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043e\u043d\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u00a0\u0444\u0430\u0439\u043b\u00a0\u2014 SSTable. \u0412\u043e\u0442 \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430:<\/p>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502   Header    \u2502  \u2190 magic, \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\u2502 Block index \u2502  \u2190 \u043c\u0430\u0441\u0441\u0438\u0432 \u00ab\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0431\u043b\u043e\u043a\u0430 \u2192 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u00bb\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\u2502Bloom filter \u2502\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\u2502  Block 1    \u2502  \u2190 \u0434\u0430\u043d\u043d\u044b\u0435 + CRC32 \u0431\u043b\u043e\u043a\u0430\u2502  Block 2    \u2502\u2502  ...        \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ul>\n<li>\n<p><strong>\u0411\u043b\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441<\/strong>\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 SSTable \u0445\u0440\u0430\u043d\u0438\u0442 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u00a0\u0444\u0430\u0439\u043b\u0435. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c, \u043d\u0435\u00a0\u0447\u0438\u0442\u0430\u044f \u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0435 \u0441\u0436\u0430\u0442\u0438\u0435<\/strong>\u00a0\u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0432\u00a0SSTable: \u0435\u0441\u043b\u0438 \u043a\u043b\u044e\u0447\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>user:100<\/code>, <code>user:101<\/code>), \u0442\u043e \u043e\u0431\u0449\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0430\u00a0\u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u044b\u00a0\u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>Bloom\u2011\u0444\u0438\u043b\u044c\u0442\u0440<\/strong>\u00a0\u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u043a\u043b\u044e\u0447\u0430 \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0442\u00bb, \u043e\u0442\u0441\u0435\u043a\u0430\u044f\u00a0\u043b\u0438\u0448\u043d\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u00a0\u0434\u0438\u0441\u043a\u0430. \u041b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b, \u043d\u043e\u00a0\u043e\u043d\u0438\u00a0\u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a\u00a0\u0445\u043e\u043b\u043e\u0441\u0442\u043e\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u0443 \u0432\u00a0\u0431\u043b\u043e\u043a\u0435, \u043d\u0435\u00a0\u043d\u0430\u0440\u0443\u0448\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b<\/strong>\u00a0\u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0441\u043d\u0430\u0431\u0436\u0451\u043d <strong><abbr class=\"habraabbr\" title=\"\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e), \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0443\u043c\u043c\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u044b.\" data-title=\"&lt;p&gt;\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e), \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438: \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0443\u043c\u043c\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u044b.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"CRC32\">CRC32<\/abbr><\/strong>. \u041f\u0440\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u0430 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0441\u0443\u043c\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0431\u0438\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u00a0\u0434\u0438\u0441\u043a\u0435. \u0411\u0435\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u043c\u043e\u043b\u0447\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0443\u0441\u043e\u0440, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d.<\/p>\n<\/li>\n<\/ul>\n<h4>WriteBatch: \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439<\/h4>\n<p>\u0418\u0434\u0435\u044f \u0438\u0437\u00a0RocksDB. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u00a0\u2014\u00a0\u043b\u0438\u0431\u043e \u0432\u0441\u0435,\u00a0\u043b\u0438\u0431\u043e \u043d\u0438\u0447\u0435\u0433\u043e. \u0412\u00a0ScoriaDB WriteBatch \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u0443\u0444\u0435\u0440 \u0438 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0432\u00a0WAL \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e. \u041f\u0440\u0438\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0451 \u0434\u043e\u00a0\u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u043a\u043e\u043d\u0446\u0430. \u0415\u0441\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043e\u0431\u0440\u044b\u0432\u00a0\u2014 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0442\u0447\u0430 \u043d\u0435\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b2\/2ef\/55e\/1b22ef55eface08d3bb3b11836b1c936.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438\" title=\"\u0421\u0445\u0435\u043c\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438\" width=\"3503\" height=\"653\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1b2\/2ef\/55e\/1b22ef55eface08d3bb3b11836b1c936.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b2\/2ef\/55e\/1b22ef55eface08d3bb3b11836b1c936.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0438\u0441\u0438<\/figcaption><\/div>\n<\/figure>\n<h4>WiscKey \u0438 Value Log: \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u00a0\u0430\u043c\u043f\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438<\/h4>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 LSM \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 <strong><span>\u0430\u043c\u043f\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/span><\/strong><span> <\/span>: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 1\u00a0\u041c\u0411 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435. \u0414\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0438 \u0443\u0436\u0435 10\u00a0\u041c\u0411 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430\u00a0\u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c\u00a0\u2014 20\u00a0\u041c\u0411. \u0423\u00a0Badger \u044f \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Value Log (WiscKey\u2011\u0441\u0442\u0438\u043b\u044c). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f &gt;64\u00a0\u0431\u0430\u0439\u0442 \u0432\u044b\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0430\u00a0\u0432\u00a0LSM\u2011\u0434\u0435\u0440\u0435\u0432\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438.<\/p>\n<p>CRC32\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u00a0\u2014 \u0432\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 VLog. \u0422\u0430\u043a \u0447\u0442\u043e\u00a0\u043f\u043e\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u044f \u043c\u043e\u0433\u0443\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c.<\/p>\n<h4>mmap \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 zero\u2011copy \u0432\u00a0Go\u00a0\u2014 \u043d\u0435\u00a0\u0442\u043e, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f<\/h4>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <abbr class=\"habraabbr\" title=\"\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043a\u0430\u043a \u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 read() \u0438 write().\" data-title=\"&lt;p&gt;\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043a\u0430\u043a \u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 read() \u0438 write().&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"MMAP (Memory Map)\u00a0\">mmap<\/abbr> \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 VLog \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u044c. \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 <code>syscall.Munmap<\/code> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u00a0\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u0411\u0414) \u0441\u043b\u0430\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u00a0\u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d, \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f <strong><abbr class=\"habraabbr\" title=\"\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0436\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d\u043d\u0443\u044e \u0438\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 mmap \u2014 \u0441\u043b\u0430\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u00bb \u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u043e \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u0442 \u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0430. \u041b\u044e\u0431\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 segfault.\" data-title=\"&lt;p&gt;\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0436\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d\u043d\u0443\u044e \u0438\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 mmap \u2014 \u0441\u043b\u0430\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u00bb \u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u043e \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u0442 \u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0430. \u041b\u044e\u0431\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 segfault.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u0412\u0438\u0441\u044f\u0447\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c (dangling pointer)\">\u0432\u0438\u0441\u044f\u0447\u0438\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438<\/abbr><\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u00a0\u043d\u0438\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <abbr class=\"habraabbr\" title=\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u043b\u0435 munmap). \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e.\" data-title=\"&lt;p&gt;\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u043b\u0435&amp;nbsp;&lt;code data-mark=&quot;code&quot;&gt;munmap&lt;\/code&gt;). \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e.&lt;\/p&gt;\" data-abbr=\"SIGSEGV\">SIGSEGV<\/abbr>.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u0437\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0430\u0439\u0441\u043e\u0432 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0432\u0430\u0440\u0438\u044e: \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e\u00a0\u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0441\u043b\u0430\u0439\u0441\u0443, \u043f\u043e\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043a\u0440\u044b\u043b \u0444\u0430\u0439\u043b \u0438 \u0441\u0434\u0435\u043b\u0430\u043b <code>Munmap<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/strong> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0mmap\u2011\u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u00a0\u043d\u043e\u0432\u0443\u044e \u043a\u0443\u0447\u0443, \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438 \u043e\u0434\u043d\u043e\u00a0\u043b\u0438\u0448\u043d\u0435\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u00a0\u0441\u044b\u0433\u0440\u0430\u0435\u0442. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 <strong><abbr class=\"habraabbr\" title=\"\u0442\u0435\u0445\u043d\u0438\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 (\u0434\u0438\u0441\u043a \u2192 \u043f\u0430\u043c\u044f\u0442\u044c \u2192 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c), \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0438\u0437 mmap\u2011\u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0421\u043d\u0438\u0436\u0430\u0435\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b, \u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.\" data-title=\"&lt;p&gt;\u0442\u0435\u0445\u043d\u0438\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 (\u0434\u0438\u0441\u043a \u2192 \u043f\u0430\u043c\u044f\u0442\u044c \u2192 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c), \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0438\u0437 mmap\u2011\u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0421\u043d\u0438\u0436\u0430\u0435\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b, \u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\" zero\u2011copy\">zero\u2011copy<\/abbr><\/strong> \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u00a0\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430\u00a0\u0440\u0435\u0433\u0438\u043e\u043d\u044b mmap \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u0447\u0442\u043e\u00a0\u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0430\u0439\u0441 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f VLog. \u041f\u043e\u043a\u0430 \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u043d\u0430\u00a0v0.3.0.<\/p>\n<h4>MVCC \u0438 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430<\/h4>\n<p><strong>MVCC (Multi\u2011Version Concurrency Control)<\/strong> \u0434\u0430\u0451\u0442 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u043a\u043e\u0439 <code>commitTS<\/code>. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 <code>startTS<\/code> \u0438 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 <code>commitTS &lt;= startTS<\/code>. \u0413\u043b\u0430\u0432\u043d\u043e\u0435: <strong>\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439<\/strong>. \u0415\u0441\u043b\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 (\u043a\u0442\u043e\u2011\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043b\u044e\u0447 \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u0430), \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0438 \u0432\u044b\u0437\u043e\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e\u00a0\u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u0446\u0438\u043a\u043b\u0435 \u0441\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c\u0438.<\/p>\n<p><strong>\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430<\/strong>\u00a0\u2014 \u0442\u0440\u044e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0430 \u0432\u00a0TiKV. \u041e\u0431\u044b\u0447\u043d\u043e timestamp \u0440\u0430\u0441\u0442\u0451\u0442, \u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432\u00a0\u043a\u043e\u043d\u0446\u0435 \u0434\u0435\u0440\u0435\u0432\u0430. \u041f\u0440\u0438\u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0435\u00a0\u0441\u0430\u043c timestamp, \u0430\u00a0\u0435\u0433\u043e \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 (<code>^uint64(now)<\/code>\u00a0\u0432\u00a0Go\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0431\u0438\u0442\u043e\u0432). \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u0435\u0436\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 (\u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u00a0<code>commitTS<\/code>) \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0434\u0451\u0442 \u043e\u0442\u00a0\u043d\u043e\u0432\u044b\u0445 \u043a\u00a0\u0441\u0442\u0430\u0440\u044b\u043c.<\/p>\n<h4>Column Families: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435<\/h4>\n<p>\u0418\u0434\u0435\u044f \u0438\u0437\u00a0Bigtable \u0438 Cassandra. <strong>\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 LSM\u2011\u0434\u0435\u0440\u0435\u0432\u044c\u044f<\/strong> \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u044b. \u0423\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e CF \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \u0440\u0430\u0437\u043c\u0435\u0440 MemTable, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430, \u0430\u00a0\u0432\u00a0\u0431\u0443\u0434\u0443\u0449\u0435\u043c\u00a0\u2014 <strong><abbr class=\"habraabbr\" title=\"\u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438: \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u043b\u0430\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043a\u0435\u0448\u0435\u0439 \u0438 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\" data-title=\"&lt;p&gt;\u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438: \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u043b\u0430\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043a\u0435\u0448\u0435\u0439 \u0438 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"TTL (Time To Live)\">TTL<\/abbr><\/strong>.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u0438\u0434\u0435 <code>map[string]*Engine<\/code> \u0438 <strong>\u043e\u0431\u0449\u0435\u0433\u043e WAL<\/strong> \u0434\u043b\u044f\u00a0\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 CF. \u0411\u0435\u0437\u00a0\u043e\u0431\u0449\u0435\u0433\u043e WAL \u043f\u0440\u0438\u00a0\u0441\u0431\u043e\u0435 \u0447\u0430\u0441\u0442\u044c CF \u043c\u043e\u0433\u043b\u0430 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u0430\u00a0\u0434\u0440\u0443\u0433\u0430\u044f\u00a0\u2014 \u043d\u0435\u0442. \u042d\u0442\u043e\u00a0\u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u043f\u0435\u0440\u0432\u044b\u0445 \u0433\u0440\u0443\u0431\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043d\u0430\u0448\u043b\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0430\u0436 \u043f\u0440\u0438\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043b\u043e\u0433\u043e\u0432 \u043d\u0430\u00a0\u044d\u0442\u043e\u0439 \u0431\u0434.<\/p>\n<h4>Leveled Compaction: \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430<\/h4>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u0437\u00a0LevelDB: \u0443\u0440\u043e\u0432\u043d\u0438 <strong>L0\u00a0\u2192 L1\u00a0\u2192 L2\u00a0\u2192 L3<\/strong>. \u041d\u0430\u00a0L0\u00a0\u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u043a\u043b\u044e\u0447\u0430\u043c, \u043d\u0430\u00a0L1\u00a0\u0438 \u043d\u0438\u0436\u0435\u00a0\u2014 \u043d\u0435\u0442.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ece\/1b3\/ca6\/ece1b3ca6f03feb4ebcd170220d11c5c.png\" alt=\"\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0 \u0432 ScoriaDB (v0.1.0). \u0422\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c, \u0441\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0443\u0440\u043e\u0432\u043d\u044f 1 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0441\u043b\u0438\u044f\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f multi\u2011way merge \u0441 min\u2011heap. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b (\u0447\u0435\u0440\u0435\u0437 minActiveSnapshotTS), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043e\u043b\u0433\u0438\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c 0 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f.\" title=\"\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0 \u0432 ScoriaDB (v0.1.0). \u0422\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c, \u0441\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0443\u0440\u043e\u0432\u043d\u044f 1 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0441\u043b\u0438\u044f\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f multi\u2011way merge \u0441 min\u2011heap. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b (\u0447\u0435\u0440\u0435\u0437 minActiveSnapshotTS), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043e\u043b\u0433\u0438\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c 0 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f.\" width=\"2498\" height=\"653\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ece\/1b3\/ca6\/ece1b3ca6f03feb4ebcd170220d11c5c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ece\/1b3\/ca6\/ece1b3ca6f03feb4ebcd170220d11c5c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0 \u0432 ScoriaDB (v0.1.0). \u0422\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c, \u0441\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0443\u0440\u043e\u0432\u043d\u044f 1 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0441\u043b\u0438\u044f\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f multi\u2011way merge \u0441 min\u2011heap. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b (\u0447\u0435\u0440\u0435\u0437 <\/em><code><em>minActiveSnapshotTS<\/em><\/code><em>), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043e\u043b\u0433\u0438\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c 0 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f.<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430\u00a0\u0431\u044b\u043b\u0430 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043f\u043e\u0442\u043e\u043c \u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 <strong><abbr class=\"habraabbr\" title=\"\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435: \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u043a\u043b\u044e\u0447 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0444\u0430\u0439\u043b\u043e\u0432. Min\u2011heap (\u043a\u0443\u0447\u0430) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0437\u0430 O(log N), \u0433\u0434\u0435 N \u2014 \u0447\u0438\u0441\u043b\u043e \u0444\u0430\u0439\u043b\u043e\u0432.\" data-title=\"&lt;p&gt;\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435: \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u043a\u043b\u044e\u0447 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0444\u0430\u0439\u043b\u043e\u0432. &lt;strong&gt;Min\u2011heap&lt;\/strong&gt; (\u043a\u0443\u0447\u0430) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0437\u0430 O(log N), \u0433\u0434\u0435 N \u2014 \u0447\u0438\u0441\u043b\u043e \u0444\u0430\u0439\u043b\u043e\u0432.&lt;\/p&gt;\" data-abbr=\"multi\u2011way merge \u0441 min\u2011heap\">multi\u2011way merge \u0441\u00a0min\u2011heap<\/abbr><\/strong>. \u0412\u00a0\u043f\u043b\u0430\u043d\u0430\u0445\u00a0\u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c <strong><abbr class=\"habraabbr\" title=\"\u0442\u043e\u0440\u043c\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0443. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0433\u043e\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d: \u0443\u0440\u043e\u0432\u043d\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u0430 \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e. \u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u043b\u044f LSM \u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0443\u0440\u043e\u0432\u043d\u0435\u0439.\" data-title=\"&lt;p&gt;\u0442\u043e\u0440\u043c\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0443. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0433\u043e\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d: \u0443\u0440\u043e\u0432\u043d\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u0430 \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e. \u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u043b\u044f LSM \u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0443\u0440\u043e\u0432\u043d\u0435\u0439.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\" write stall \">write stall<\/abbr><\/strong>, \u043a\u043e\u0433\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u043f\u0435\u0440\u0435\u0436\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u043d.<\/p>\n<h4>Manifest: \u0436\u0443\u0440\u043d\u0430\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f SSTable, \u043d\u0443\u0436\u043d\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<p>\u042f \u0432\u0437\u044f\u043b\u0430 \u0438\u0434\u0435\u044e \u0438\u0437\u00a0RocksDB: \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432\u00a0\u0436\u0443\u0440\u043d\u0430\u043b <strong>MANIFEST<\/strong>. \u0421\u0435\u0439\u0447\u0430\u0441 \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c\u00a0\u2014 \u044d\u0442\u043e <code>VersionEdit<\/code> \u0432 <strong>JSON<\/strong> (\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c fsync). \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043d\u043e \u043d\u0435\u00a0\u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430\u00a0. \u0412\u00a0v0.2.0\u00a0\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439<strong> \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 <\/strong>\u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u0438:<\/p>\n<pre><code class=\"json\">{  \"level\": 1,  \"add\": [\"sstable_000123.sst\"],  \"delete\": [\"sstable_000045.sst\"]}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>Fail\u2011safe VLog: \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0Value Log \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u0431\u043e\u0439, \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442\u044c\u0441\u044f (magic mismatch\u00a0\u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435). \u042f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u043a\u0430\u043a\u00a0\u0432\u00a0BadgerDB: \u043f\u0440\u0438\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e magic. \u0415\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442\u00a0\u2014 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e \u0432 <code>.corrupt<\/code>, \u0441\u043e\u0437\u0434\u0430\u044e \u043d\u043e\u0432\u044b\u0439, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0WAL. \u0417\u0430\u043f\u0438\u0441\u0438 \u0441\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430\u00a0\u0441\u0442\u0430\u0440\u044b\u0439 VLog \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f (\u043e\u043d\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b), \u043d\u043e\u00a0\u0431\u0430\u0437\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0439.<\/p>\n<h4>VFS\u2011\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0438 \u0434\u0438\u0441\u043a\u0430, \u044f \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <strong><abbr class=\"habraabbr\" title=\"A\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u043d\u0430\u0434 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0432 \u043a\u043e\u0434\u0435: \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0431\u043e\u0435\u0432 \u0431\u0435\u0437 \u0440\u0438\u0441\u043a\u0430 \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.\" data-title=\"&lt;p&gt;A\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u043d\u0430\u0434 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0432 \u043a\u043e\u0434\u0435: \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0431\u043e\u0435\u0432 \u0431\u0435\u0437 \u0440\u0438\u0441\u043a\u0430 \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.&lt;\/p&gt;\" data-abbr=\"VFS (Virtual File System) \">VFS<\/abbr><\/strong>:<\/p>\n<pre><code class=\"go\">type VFS interface {    Open(name string) (File, error)    Create(name string) (File, error)    Rename(old, new string) error    Remove(name string) error}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u00a0production\u00a0\u2014 <code>DefaultVFS<\/code> (\u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 <code>os<\/code>), \u0432\u00a0\u0442\u0435\u0441\u0442\u0430\u0445\u00a0\u2014 \u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u043b\u0438\u00a0\u043e\u0442\u043a\u0430\u0437\u044b. \u041f\u0440\u0430\u0432\u0434\u0430, \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044c: \u0434\u043b\u044f mmap \u043d\u0443\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 (<code>*os.File<\/code>), \u0430 \u043d\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439\u00a0<code>vfs.File<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445, \u0433\u0434\u0435 \u044f \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043a\u043e\u043c, VLog \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c mmap \u2014 \u0438 \u043c\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c fail\u2011safe VLog \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u043c\u043e\u043a\u0430\u0445 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442. \u042d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 v0.3.0, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u0432 mmap \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u043d\u0430\u00a0<code>pread<\/code>\u00a0\u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<h4>\u0427\u0438\u0441\u0442\u044b\u0439 Go \u0431\u0435\u0437\u00a0cgo \u0438 gRPC \u043a\u0430\u043a\u00a0\u0443\u00a0etcd<\/h4>\n<p>RocksDB \u0442\u0440\u0435\u0431\u0443\u0435\u0442 C++ \u0438 <strong>cgo<\/strong>\u00a0\u2014 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u00a0\u043a\u0440\u043e\u0441\u0441\u2011\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439. BadgerDB\u00a0\u2014 \u0447\u0438\u0441\u0442\u044b\u0439 Go, \u043d\u043e\u00a0\u0431\u0435\u0437\u00a0\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u042f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u0441\u0442\u0430\u0432\u043a\u0443 \u043d\u0430 <strong>\u0447\u0438\u0441\u0442\u044b\u0439 Go<\/strong>: <code>go build<\/code> \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u00a0\u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445. \u0410\u00a0gRPC\u2011\u0441\u0435\u0440\u0432\u0435\u0440 (\u043a\u0430\u043a \u0432\u00a0etcd \u0438 TiKV) \u0434\u0430\u0451\u0442 \u0441\u0442\u0440\u043e\u0433\u0443\u044e \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e, HTTP\/2\u00a0\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043d\u0430 12+ \u044f\u0437\u044b\u043a\u0430\u0445. REST \u0438 WebSocket \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0440\u0430\u0434\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430; \u0432\u00a0\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0438\u043b\u0438\u00a0\u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p><a class=\"anchor\" name=\"problems\" id=\"problems\"><\/a><\/p>\n<h2>\u0427\u0442\u043e\u00a0\u043f\u043e\u0448\u043b\u043e \u043d\u0435\u00a0\u0442\u0430\u043a: \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041e\u0445 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u043e \u0447\u0430\u0441\u043e\u0432 \u0443\u0436\u0435 \u0441 \u0443\u0441\u0442\u0430\u0432\u0448\u0438\u043c\u0438, \u0431\u043e\u043b\u044e\u0447\u0438\u043c\u0438 \u0433\u043b\u0430\u0437\u0430\u043c\u0438, \u043d\u043e \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u0430\u043a \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c, \u043d\u0430\u0434\u043e \u0434\u043e\u0434\u0435\u043b\u0430\u0442\u044c, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0438\u0442 \u0438 \u0441\u043f\u0430\u0442\u044c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0444\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0437\u043c \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u0436\u0435 \u0441\u044b\u0433\u0440\u0430\u043b \u0441\u0432\u043e\u044e \u0440\u043e\u043b\u044c.<\/p>\n<h4>1. WAL \u0431\u0435\u0437\u00a0\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u2192 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u043b\u0435\u0442\u0430\u043b\u0438 \u0432\u00a0\u0431\u0443\u0444\u0435\u0440, \u0430\u00a0\u043d\u0435\u00a0\u043d\u0430\u00a0\u0434\u0438\u0441\u043a<\/h4>\n<p><strong>\u041a\u0430\u043a\u00a0\u0431\u044b\u043b\u043e:<\/strong> \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 WAL \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>f.Write()<\/code>. \u0414\u0430\u043d\u043d\u044b\u0435 \u0443\u0445\u043e\u0434\u0438\u043b\u0438 \u0432\u00a0\u0431\u0443\u0444\u0435\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u0447\u0435\u0437\u0430\u043b\u0438.<\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c:<\/strong> \u043f\u0440\u043e\u0432\u0435\u043b\u0430 \u0441\u0442\u0440\u0435\u0441\u0441\u2011\u0442\u0435\u0441\u0442: \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0430 10\u202f000\u00a0\u043a\u043b\u044e\u0447\u0435\u0439, \u0443\u0431\u0438\u043b\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0435\u0440\u0435\u0437 <code>kill -9<\/code>, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0431\u0430\u0437\u0443\u2026 \u043f\u0443\u0441\u0442\u043e.<\/p>\n<p><strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 <abbr class=\"habraabbr\" title=\"\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u041e\u0421 \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0438\u0441\u043a. \u041c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f.\" data-title=\"&lt;p&gt;\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u041e\u0421 \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0438\u0441\u043a. \u041c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"fSync\">f.Sync()<\/abbr> \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0430\u0442\u0447\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p><strong>\u0426\u0435\u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430:<\/strong> \u0437\u0430\u043c\u0435\u0440\u044b \u043d\u0430\u00a0Intel Core i3\u20111215U:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u043d\u0430\u00a0\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>BenchmarkPut_WithoutSync-8<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">5000<\/p>\n<\/td>\n<td>\n<p align=\"left\">300\u202f456\u00a0ns\/op<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>BenchmarkPut_WithSync-8<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1000<\/p>\n<\/td>\n<td>\n<p align=\"left\">1\u202f523\u202f400\u00a0ns\/op<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u043b\u0430\u0441\u044c <strong>\u0432 5\u00a0\u0440\u0430\u0437<\/strong>. \u041d\u043e\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 <code>kill -9<\/code> \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u00a0\u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p><em>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u044d\u0442\u043e \u0442\u0435\u0441\u0442\u044b \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u00a0\u0447\u0435\u0441\u0442\u043d\u044b\u043c fsync \u043d\u0430\u00a0\u0434\u0438\u0441\u043a. \u0412\u00a0\u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u0431\u0435\u0437\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 ~1\u00a0\u043c\u043a\u0441\u00a0\u2014 \u043d\u043e\u00a0\u0442\u0430\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b \u043d\u0435\u00a0\u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u044c.<\/em><\/p>\n<p><strong>\u0427\u0442\u043e\u00a0\u0434\u0430\u043b\u044c\u0448\u0435:<\/strong> \u0432\u00a0v0.2.0\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u044e <strong><abbr class=\"habraabbr\" title=\"\u0413\u0440\u0443\u043f\u043f\u043e\u0432\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d fsync. \u0421\u043d\u0438\u0436\u0430\u0435\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438.\" data-title=\"&lt;p&gt;\u0413\u0440\u0443\u043f\u043f\u043e\u0432\u0430\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d fsync. \u0421\u043d\u0438\u0436\u0430\u0435\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438.&lt;\/p&gt;\" data-abbr=\"Group Commit\">Group Commit<\/abbr><\/strong>\u00a0\u2014 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u0443\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u0434\u0435\u043b\u0430\u044e \u043e\u0434\u0438\u043d fsync \u043d\u0430\u00a0\u0433\u0440\u0443\u043f\u043f\u0443. \u0414\u043e\u043b\u0436\u043d\u043e \u0441\u0442\u0430\u0442\u044c \u0438\u00a0\u0431\u044b\u0441\u0442\u0440\u043e, \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e.<\/p>\n<h4>2. \u0413\u043e\u043d\u043a\u0430 \u0432\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u043c\u0435\u0442\u043e\u043a (\u0438 \u043a\u0430\u043a\u00a0\u0435\u0451 \u043d\u0430\u0448\u0451\u043b \u2011race)<\/h4>\n<p><strong>\u0411\u044b\u043b\u043e:<\/strong> \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u0435\u0442\u043e\u043a\u00a0\u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e <code>lastTS++<\/code>. \u0411\u0435\u0437\u00a0\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a.<\/p>\n<p>\u0418 \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430 100\u00a0\u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 <code>NextTimestamp()<\/code>. \u041d\u0430\u0447\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f <strong>\u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u043c\u0435\u0442\u043e\u043a, MVCC \u043b\u043e\u043c\u0430\u043b\u0441\u044f<\/strong>, \u0442\u0435\u0441\u0442\u044b <strong>\u043f\u0430\u0434\u0430\u043b\u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.<\/strong><\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u043d\u0430\u0448\u043b\u0430:<\/strong> \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0430 <code>go test -race<\/code>. \u0411\u0435\u0437\u00a0\u043d\u0435\u0433\u043e \u044f\u00a0\u0431\u044b \u0438\u0441\u043a\u0430\u043b\u0430 \u044d\u0442\u043e\u0442 \u0431\u0430\u0433 \u043d\u0435\u0434\u0435\u043b\u044e.<\/p>\n<p><strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u043f\u0435\u0440\u0432\u043e\u0435):<\/strong><\/p>\n<pre><code class=\"go\">\/\/ \u0411\u044b\u043b\u043efunc (g *TimestampGenerator) Next() uint64 {    g.lastTS++    return g.lastTS}\/\/ \u0421\u0442\u0430\u043b\u043efunc (g *TimestampGenerator) Next() uint64 {    return atomic.AddUint64(&amp;g.lastTS, 1)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041d\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043c\u0430\u043b\u043e.<\/strong> \u041f\u0440\u0438\u00a0\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0431\u0430\u0437\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a <code>lastTS<\/code> \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043b\u0441\u044f \u0432 1, \u0438 \u043d\u043e\u0432\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0443\u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0SSTable. \u042d\u0442\u043e \u043b\u043e\u043c\u0430\u043b\u043e \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<p><strong>\u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong> \u0442\u0435\u043f\u0435\u0440\u044c \u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 <strong>Manifest<\/strong> (\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e), \u0430\u00a0\u043f\u0440\u0438\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0431\u0430\u0437\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u0435\u0433\u043e \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442. \u041c\u0435\u0442\u043a\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b \u0434\u0430\u0436\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438.<\/p>\n<p><strong>\u0411\u043e\u043d\u0443\u0441:<\/strong> \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 <strong><abbr class=\"habraabbr\" title=\"\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f in\u2011memory \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u043a\u043b\u044e\u0447\u0435\u0439. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u0431\u0435\u0437 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e LSM.\" data-title=\"&lt;p&gt;\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f in\u2011memory \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u043a\u043b\u044e\u0447\u0435\u0439. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u0431\u0435\u0437 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e LSM.&lt;\/p&gt;\" data-abbr=\"\u043a\u044d\u0448 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \">\u043a\u044d\u0448 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439<\/abbr><\/strong><code>(lastCommitCache<\/code>), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0437\u0430\u00a0O(1) \u0431\u0435\u0437\u00a0\u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f LSM.<\/p>\n<h4>3. Value Log \u0431\u0435\u0437\u00a0CRC32\u00a0\u2192 \u043c\u0443\u0441\u043e\u0440 \u0432\u043c\u0435\u0441\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/h4>\n<p>\u042f \u043f\u0438\u0441\u0430\u043b\u0430 \u0432 VLog \u0438 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0438 CRC32 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u043e \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0430 CRC32 \u043d\u0435\u0442. <\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c:<\/strong> \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u0448\u0430 VLog \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u043b\u0441\u044f (\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043d\u0435\u00a0\u0441\u043e\u0432\u043f\u0430\u043b\u043e). \u0414\u0432\u0438\u0436\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043b \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b, \u0430\u00a0\u0441\u0442\u0430\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0438\u0437\u00a0WAL \u0432\u0435\u043b\u0438 \u0432\u00a0\u043f\u0443\u0441\u0442\u043e\u0442\u0443. \u0411\u0430\u0437\u0430 \u043c\u043e\u043b\u0447\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u043c\u0443\u0441\u043e\u0440 \u0432\u043c\u0435\u0441\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p><strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0415\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442\u00a0\u2014 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e \u0444\u0430\u0439\u043b \u0432 <code>.corrupt<\/code>, \u0441\u043e\u0437\u0434\u0430\u044e \u043d\u043e\u0432\u044b\u0439, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0WAL.<\/p>\n<\/li>\n<li>\n<p>\u0412\u00a0\u043c\u0435\u0442\u043e\u0434\u0435 <code>Get<\/code> \u043f\u0435\u0440\u0435\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u044f\u044e CRC32 \u0431\u043b\u043e\u043a\u0430 \u0441\u00a0\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<h4>4. \u041a\u043e\u043c\u043f\u0430\u043a\u0448\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0431\u0438\u0432\u0430\u043b \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b<\/h4>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043d \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u0430 \u0432\u0441\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u0443\u0434\u0430\u043b\u044f\u043b\u0438\u0441\u044c \u0431\u0435\u0437\u00a0\u0440\u0430\u0437\u0431\u043e\u0440\u0430.<\/p>\n<p>\u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c <strong>\u0434\u043e\u043b\u0433\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/strong>. \u041e\u043d\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430\u00a0\u0441\u0432\u043e\u0439 <code>startTS<\/code>, \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0430 \u0438\u0445 \u043d\u0435\u0442! \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u043d \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0435\u0435 \u043d\u0430\u0434\u043e \u0443\u0431\u0440\u0430\u0442\u044c.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432 (<code>minActiveSnapshotTS<\/code>), \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u0412\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435 \u043f\u0435\u0440\u0435\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f: \u0435\u0441\u043b\u0438 <code>commitTS<\/code> \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c <code>minActiveSnapshotTS<\/code>, \u0442\u043e <strong>\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e<\/strong>.<\/p>\n<h4>5. WriteBatch \u0442\u0435\u0440\u044f\u043b \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c<\/h4>\n<p><strong>\u0420\u0430\u043d\u044c\u0448\u0435:<\/strong> \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u00a0\u0431\u0430\u0442\u0447\u0430 \u043f\u0438\u0441\u0430\u043b\u0430\u0441\u044c \u0432\u00a0WAL \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430\u00a0\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u0438 \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0441\u043d\u043e \u0437\u0430\u0447\u0435\u043c)<\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u043f\u0440\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c:<\/strong> \u0442\u0435\u0441\u0442\u044b \u043d\u0430\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u043c\u0438\u0440\u0430\u043b \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 3 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438\u0437\u00a010, \u043f\u0440\u0438\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 3. <\/p>\n<p><strong>\u0422\u0435\u043f\u0435\u0440\u044c:<\/strong> \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e \u0432\u0435\u0441\u044c WriteBatch \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u0443\u0444\u0435\u0440, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432\u00a0WAL \u0441\u00a0\u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430. \u041f\u0440\u0438\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438: \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043c\u0430\u0440\u043a\u0435\u0440 \u043a\u043e\u043d\u0446\u0430\u00a0\u2014 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u0432\u0441\u0451; \u0435\u0441\u043b\u0438 \u043d\u0435\u0442\u00a0\u2014 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<h4>6. Column Families \u0442\u0435\u0440\u044f\u043b\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 CF<\/h4>\n<p><strong><em>\u041a\u0430\u043a \u0431\u044b\u043b\u043e<\/em><\/strong><em>: \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e CF \u0431\u044b\u043b \u0441\u0432\u043e\u0439 WAL. \u041c\u043d\u0435 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u0438 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0435\u0435<\/em><\/p>\n<p><em>\u041a\u00a0\u0447\u0435\u043c\u0443 \u043f\u0440\u0438\u0432\u0435\u043b\u043e: \u043a\u043e\u0433\u0434\u0430 \u0431\u0430\u0442\u0447 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b \u0434\u0432\u0430 CF, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0451\u043b \u0441\u0431\u043e\u0439, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0WAL \u043f\u0435\u0440\u0432\u043e\u0433\u043e CF \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0441\u044f (\u0438 \u0434\u0430\u0436\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b fsync), \u043d\u043e\u00a0<\/em><strong><em>\u0434\u043e\u00a0\u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u0432\u0442\u043e\u0440\u043e\u0439 CF \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0437\u0430\u043f\u0438\u0441\u044c. <\/em><\/strong><em>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 CF \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0430\u00a0\u0432\u0442\u043e\u0440\u043e\u0439\u00a0\u2014 \u043d\u0435\u0442. \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 CF\u00a0\u0431\u044b\u043b\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u0430.<\/em><\/p>\n<p><strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong> \u0441\u0434\u0435\u043b\u0430\u043b\u0430 <strong>\u043e\u0431\u0449\u0438\u0439 WAL \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 CF<\/strong>. WriteBatch \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u00a0\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 CF. \u041f\u0440\u0438\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0438 \u0442\u043e\u0447\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<h4>7. ScanCF \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438<\/h4>\n<p><strong>\u0427\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e:<\/strong> \u0432\u00a0\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c API <code>ScanCF<\/code> \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 Column Family \u043d\u0435\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b. <\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435:<\/strong> \u0432\u00a0\u0434\u0435\u043c\u043e\u2011\u043f\u0440\u043e\u0435\u043a\u0442\u0435 Scorix (\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043b\u043e\u0433\u043e\u0432) \u0438\u043c\u043f\u043e\u0440\u0442\u0451\u0440 \u0437\u0430\u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c CF <code>raw<\/code>. <code>ScanCF<\/code> \u043c\u043e\u043b\u0447\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0435\u043b \u00abNo logs found\u00bb \u0438 \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<p><strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong> \u0441\u043e\u0437\u0434\u0430\u043b\u0430 <code>errorIterator<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 <code>Next()<\/code> \u0438\u043b\u0438 <code>Err()<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 <code>CF not found<\/code>. \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435\u00a0\u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c, \u043d\u043e\u00a0\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u0438\u0434\u0438\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443.<\/p>\n<h4>8. Manifest \u0431\u0435\u0437\u00a0fsync \u2192 \u0431\u0430\u0437\u0430 \u0437\u0430\u0431\u044b\u0432\u0430\u043b\u0430 \u0441\u0432\u0435\u0436\u0438\u0435 SSTable<\/h4>\n<p><strong>\u0427\u0442\u043e\u00a0\u0431\u044b\u043b\u043e:<\/strong> <code>VersionEdit<\/code> \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0432\u00a0JSON\u2011\u0444\u0430\u0439\u043b, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u043b <code>fsync<\/code>. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e\u2026 <\/p>\n<p><strong>\u041a\u00a0\u0447\u0435\u043c\u0443 \u043f\u0440\u0438\u0432\u0435\u043b\u043e:<\/strong> \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u044f \u0431\u0430\u0437\u0430 \u043d\u0435\u00a0\u0432\u0438\u0434\u0435\u043b\u0430 SSTable, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430. \u0424\u0430\u0439\u043b\u044b \u043d\u0430\u00a0\u0434\u0438\u0441\u043a\u0435 \u043b\u0435\u0436\u0430\u043b\u0438, \u0430\u00a0\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u00a0\u043d\u0438\u0445\u00a0\u043a\u0430\u043a\u00a0\u0441\u043b\u0435\u0434 \u043f\u0440\u043e\u0441\u0442\u044b\u043b.<\/p>\n<p><strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 <code>f.Sync()<\/code> \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0Manifest.<\/p>\n<p>\u0418 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d fsync, \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u043d.<\/p>\n<h4>9. SSTable \u043d\u0435\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b CRC \u0431\u043b\u043e\u043a\u043e\u0432<\/h4>\n<p><strong>\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043d\u0430\u0438\u0432\u043d\u043e\u0441\u0442\u044c:<\/strong> \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a SSTable, \u0441\u0447\u0438\u0442\u0430\u044f, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0446\u0435\u043b\u00a0\u2014 \u0442\u043e \u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p><strong>\u041a\u0430\u043a\u00a0\u043f\u0440\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c:<\/strong> \u0432\u00a0\u0442\u0435\u0441\u0442\u0430\u0445 \u0441\u00a0\u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c (\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0442\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430) \u0431\u0430\u0437\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0430 \u0447\u0438\u0442\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u043c\u0443\u0441\u043e\u0440.<\/p>\n<p><strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 <strong>CRC32\u00a0\u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a<\/strong> SSTable. \u041f\u0440\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443. \u0415\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u043e\u0448\u043b\u0430\u0441\u044c\u00a0\u2014 \u0431\u043b\u043e\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u044b\u043c.<\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"works\" id=\"works\"><\/a><\/p>\n<h2>\u0427\u0442\u043e\u00a0\u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430\u00a0\u0447\u0442\u043e\u00a0\u0435\u0449\u0451 \u043d\u0435\u0442<\/h2>\n<h4>\u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (v0.1.0)<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0442\u0430\u0442\u0443\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">LSM\u2011\u0434\u0432\u0438\u0436\u043e\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">MemTable, SSTable (\u0441 CRC), Bloom, \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Value Log + mmap<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">CRC32, fail\u2011safe, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u043a\u0443\u0447\u0443 (zero\u2011copy \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0437\u0436\u0435)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">WAL + fsync + recovery<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0441\u043b\u0435 <code>kill -9<\/code> \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">MVCC + Snapshot Isolation<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c lastTS<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Column Families<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 CF \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0449\u0438\u0439 WAL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">gRPC \/ REST \/ CLI<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">JWT, \u0440\u043e\u043b\u0438 (admin, readwrite, readonly)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Docker + CI\/CD<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0\u2014 \u0438 \u0431\u0430\u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0442\u0440\u0435\u0441\u0441\u2011\u0442\u0435\u0441\u0442\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">20+ \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0441 <code>-race<\/code>, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043d\u044b\u0439 \u0442\u0435\u0441\u0442<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0427\u0442\u043e\u00a0\u043f\u043e\u043a\u0430 \u043d\u0430\u00a0\u043a\u043e\u0441\u0442\u044b\u043b\u044f\u0445 \u0438\u043b\u0438\u00a0\u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445<\/h4>\n<ul>\n<li>\n<p><strong>MemTable:<\/strong> B\u2011tree \u0441\u00a0\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u2192 \u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0430\u00a0lock\u2011free skip list <strong>(v0.3.0)<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>WAL:<\/strong> Group Commit <strong>(v0.2.0)<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>Manifest:<\/strong> \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 <strong>(v0.2.0)<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>Value Log GC:<\/strong> \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0435\u0441\u0442\u044c (<code>scoria gc<\/code>), \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 (\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439) \u2192 <strong>v0.3.0<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435<\/strong> \u2192 <strong>v0.3.0<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>TTL \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/strong> \u2192 <strong>v0.2.0<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>Raft, \u0448\u0430\u0440\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, Sorted Sets, JSON\u2011\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b<\/strong> \u2192 \u043f\u043e\u0441\u043b\u0435 v1.0\u00a0(\u0431\u0435\u0437 \u0442\u043e\u0447\u043d\u044b\u0445 \u0434\u0430\u0442).<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"lessons\" id=\"lessons\"><\/a><\/p>\n<h2>\u0427\u0442\u043e\u00a0\u044f \u0432\u044b\u043d\u0435\u0441\u043b\u0430 \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<ol>\n<li>\n<p><strong>\u041d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0431\u043e\u044f\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c.<\/strong> \u0422\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430, \u0434\u0432\u0430\u00a0\u2014 WAL, \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 MVCC. \u041c\u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u0447\u0442\u043e\u00a0\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f\u2011\u0442\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u0432\u0435\u0434\u044c \u0434\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0440\u0430\u043b\u0430\u0441\u044c \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u044f\u043c \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u043c\u0435\u043d\u044f\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0435\u0441\u0442\u044b \u0441 <\/strong><code><strong>-race<\/strong><\/code><strong>\u00a0\u2014 \u0441\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f.<\/strong> \u0413\u043e\u043d\u043a\u0443 \u0432\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u043c\u0435\u0442\u043e\u043a \u044f \u043d\u0430\u0448\u043b\u0430\u00a0\u0431\u044b \u0437\u0430\u00a0\u0434\u0435\u043d\u044c, \u0430\u00a0\u043d\u0435\u00a0\u0437\u0430\u00a0\u043d\u0435\u0434\u0435\u043b\u044e, \u0435\u0441\u043b\u0438\u00a0\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0430 <code>-race<\/code> \u0440\u0430\u043d\u044c\u0448\u0435. \u0412\u00a0\u043c\u043e\u0451\u043c CI \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043e\u00a0\u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u043e\u0440 \u044f \u043e\u0431\u00a0\u044d\u0442\u043e\u043c \u043d\u0435\u00a0\u0434\u0443\u043c\u0430\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p><code><strong>fsync<\/strong><\/code><strong>\u00a0\u2014 \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430.<\/strong> \u0417\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u043b\u0430\u0441\u044c \u0432 5\u00a0\u0440\u0430\u0437 (\u0432\u0441\u0435\u0433\u043e\u00a0\u043b\u0438\u0448\u044c), \u043d\u043e\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 <code>kill -9<\/code> \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f. \u041f\u043e\u0437\u0436\u0435 Group Commit \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>LSM\u00a0\u2014 \u044d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0438\u043d\u0443\u0442\u044c \u043d\u0430\u00a0\u0434\u0438\u0441\u043a.<\/strong> Bloom\u2011\u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442\u00a0\u043b\u0438\u0448\u043d\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f. \u0411\u043b\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 CRC \u0431\u043b\u043e\u043a\u043e\u0432\u00a0\u2014 \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u043c\u0435\u043b\u043e\u0447\u0435\u0439, \u043d\u043e\u00a0\u0431\u0435\u0437\u00a0\u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435\u00a0\u043b\u0438\u0431\u043e \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f,\u00a0\u043b\u0438\u0431\u043e \u0438\u0449\u0443\u0442\u0441\u044f \u0432\u0435\u0447\u043d\u043e\u0441\u0442\u044c. \u041f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0435 \u0441\u0436\u0430\u0442\u0438\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u044c. Value log \u0432\u00a0\u043f\u043e\u043c\u043e\u0449\u044c LSM. \u0412\u00a0\u0441\u0443\u043c\u043c\u0435 \u044d\u0442\u0438 \u043c\u0435\u043b\u043e\u0447\u0438 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435\u00a0\u2014 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435.<\/strong> MemTable \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, SSTable \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, WAL \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438\u00a0\u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u041d\u043e\u00a0\u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u043d\u0435 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438, \u0432\u044b\u043b\u0435\u0437\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u044b \u0438 \u043d\u0435\u00a0\u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u043b\u0430\u0441\u044c. \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0438 \u0441\u0442\u0440\u0435\u0441\u0441\u2011\u0442\u0435\u0441\u0442\u044b\u00a0\u2014 \u0432\u043e\u0442 \u0433\u0434\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0431\u043e\u043b\u044c \u0438 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<p><a class=\"anchor\" name=\"try\" id=\"try\"><\/a><\/p>\n<h2>\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0443\u00a0\u0441\u0435\u0431\u044f <\/h2>\n<p>ScoriaDB \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u043f\u043e\u0434\u00a0\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 <strong>Apache 2.0<\/strong>.<\/p>\n<pre><code class=\"bash\"># \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044cgit clone https:\/\/github.com\/f4ga\/ScoriaDB.gitcd ScoriaDB# \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u0447\u0435\u0440\u0435\u0437 Dockerdocker compose -f deployments\/docker-compose.yml up --build# \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 :50051 (gRPC) \u0438 :8080 (HTTP)# \u041b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435: admin\/admin# \u0418\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044ego build -o scoria-server .\/cmd\/servergo build -o scoria-cli .\/cmd\/cli.\/scoria-server &amp;TOKEN=$(.\/scoria-cli admin auth admin admin).\/scoria-cli --token \"$TOKEN\" set hello world.\/scoria-cli --token \"$TOKEN\" get hello# \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441 -race!)go test -race .\/...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"cli-demo\" id=\"cli-demo\"><\/a><\/p>\n<h4>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f CLI &lt;3<\/h4>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1cf\/557\/c0b\/1cf557c0bda37d96cdd61a200de53159.png\" alt=\"\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043b\u044e\u0431\u0432\u0438 \" title=\"\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043b\u044e\u0431\u0432\u0438 \" width=\"720\" height=\"720\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1cf\/557\/c0b\/1cf557c0bda37d96cdd61a200de53159.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1cf\/557\/c0b\/1cf557c0bda37d96cdd61a200de53159.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043b\u044e\u0431\u0432\u0438 <\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"docs\" id=\"docs\"><\/a><\/p>\n<h3>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f ScoriaDB \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u043f\u0430\u043f\u043a\u0435 <a href=\"https:\/\/github.com\/f4ga\/ScoriaDB\/tree\/main\/docs\" rel=\"noopener noreferrer nofollow\">[docs\/]<\/a> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0430 GitHub c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 CLI, Column Families, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u0430\u0434\u043c\u0438\u043d \u043f\u0440\u0430\u0432 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u042f\u0437\u044b\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0440<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Go (\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/f4ga\/ScoriaDB\/blob\/main\/docs\/README.md#go-embedded-api\" rel=\"noopener noreferrer nofollow\">Go-Embedded<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/f4ga\/ScoriaDB\/tree\/main\/pkg\/scoria\" rel=\"noopener noreferrer nofollow\">pkg\/scoria<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Python<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"http:\/\/python-doc.md\" rel=\"noopener noreferrer nofollow\">python-doc.md<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"http:\/\/example.py\" rel=\"noopener noreferrer nofollow\">example.py<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Java<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"http:\/\/java-doc.md\" rel=\"noopener noreferrer nofollow\">java-doc.md<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"http:\/\/example.java\" rel=\"noopener noreferrer nofollow\">example.java<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>C++<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"http:\/\/cpp-doc.md\" rel=\"noopener noreferrer nofollow\">cpp-doc.md<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/f4ga\/ScoriaDB\/blob\/main\/docs\/c%2B%2B\/example.cpp\" rel=\"noopener noreferrer nofollow\">example.cpp<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><a class=\"anchor\" name=\"conclusion\" id=\"conclusion\"><\/a><\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>ScoriaDB \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u0432 \u0440\u0435\u0437\u044e\u043c\u0435, \u0430 \u0441\u0442\u0430\u043b\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0432\u043e\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u0421\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 LSM-\u0434\u0432\u0438\u0436\u043e\u043a \u0441 MVCC, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438, Column Families \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c Value Log\u00a0\u2014 \u0432\u0441\u0451 \u043d\u0430\u00a0\u0447\u0438\u0441\u0442\u043e\u043c Go, \u0431\u0435\u0437\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0441\u00a0gRPC\u2011\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 CLI \u0438\u0437\u00a0\u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u041e\u043d \u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u043d\u0438\u0442 Redis \u0432\u00a0\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u043d\u0435\u0433\u043e \u0432\u0435\u0449\u0430\u0445, \u043d\u043e\u00a0\u0434\u043b\u044f\u00a0embedded\u2011\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043b\u043e\u0433\u043e\u0432 \u0438\u043b\u0438\u00a0\u0443\u0447\u0435\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0443\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441, \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0433\u043e\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u043a\u0430 \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0442\u044c\u0438, \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u0440\u0438\u0448\u043b\u043e \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0434\u0435\u0439, \u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0434\u0430\u0436\u0435 \u0444\u0438\u0447\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u0436\u0438\u0432\u0451\u0442 \u0441\u0432\u043e\u0435\u0439 \u0436\u0438\u0437\u043d\u044c\u044e: \u0434\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u0432\u043f\u0435\u0440\u0451\u0434, issues \u043e\u0442\u043a\u0440\u044b\u0442\u044b, \u0442\u0435\u0441\u0442\u044b \u0433\u043e\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u00a0<code>-race<\/code>\u00a0\u0432\u00a0CI. \u0418 \u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043b\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0438 \u0434\u043d\u0438 \u0431\u044b\u043b\u0438 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c\u0438&#8230;<\/p>\n<hr\/>\n<blockquote>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430\u00a0<a href=\"https:\/\/github.com\/f4ga\/ScoriaDB\" rel=\"noopener noreferrer nofollow\">GitHub<\/a><\/p>\n<\/blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0436\u0435 \u043f\u0438\u0448\u0435\u0442\u0435 \u0441\u0432\u043e\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a\u00a0\u043f\u043e\u043c\u043e\u0447\u044c \u0441\u043e\u0432\u0435\u0442\u043e\u043c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0432\u00a0issues\u00a0\u2014 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u044f \u0442\u043e\u0436\u0435 \u0447\u0438\u0442\u0430\u044e.<\/p>\n<p><strong>\u0410\u00a0\u0432\u044b \u043a\u043e\u0433\u0434\u0430\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0447\u0438\u0441\u0442\u043e \u0434\u043b\u044f\u00a0\u0440\u0435\u0437\u044e\u043c\u0435, \u0430\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e\u2011\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435?<\/strong><\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1032208\/\">https:\/\/habr.com\/ru\/articles\/1032208\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435: \u041d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u0437\u0430\u0434 \u044f \u043d\u0435 \u0434\u0443\u043c\u0430\u043b\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445\u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0441\u00a0\u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u0430\u0440\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u0435\u043a.\u00a0\u041b\u0438\u0441\u0442\u0430\u043b\u0430 \u0441\u0430\u0439\u0442\u044b \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u00a0\u0440\u0435\u0437\u044e\u043c\u0435\u00a0\u0431\u044b\u043b\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u043f\u043e\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f\u00a0\u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438. \u041d\u0430\u0442\u043a\u043d\u0443\u043b\u0430\u0441\u044c \u043d\u0430\u00a0\u0438\u0434\u0435\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c KV\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u0438\u0437\u00a0\u0441\u0435\u0431\u044f \u044d\u0442\u043e \u0447\u0443\u0434\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043a\u0430\u043a\u0438\u0435 \u043e\u043d\u0438 \u0432\u043e\u043e\u0431\u0449\u0435\u00a0\u0431\u044b\u0432\u0430\u044e\u0442. \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435.\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043c\u043e\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0411\u0414\u00a0\u2014 \u044d\u0442\u043e LSM\u2011Tree, \u0435\u0441\u0442\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439,  MVCC (\u0441 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043a\u0430\u043c\u0438 , \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432, snapshot isolation \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438), Value Log , WAL, Compaction, \u041c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0438 \u0434\u0430\u0436\u0435 GC. \u0418 \u0435\u0441\u043b\u0438 \u0435\u0451 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u00a0\u0441\u0435\u0440\u0432\u0435\u0440, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CLI (\u0441\u043a\u043e\u0440\u043e \u0438 \u0432\u0435\u0431), \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0431\u0430\u0437\u0430 \u0438\u0437\u00a0\u0432\u0441\u0435\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 gRPC (12+). \u0410\u00a0\u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u0435\u0449\u0451 \u043e\u0433\u043e\u2011\u0433\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e!\u042f \u0441\u043b\u044b\u0448\u0430\u043b\u0430, \u0447\u0442\u043e\u00a0\u0435\u0441\u0442\u044c B\u2011tree \u0438 LSM, \u043d\u043e, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435\u00a0\u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0434\u0432\u0443\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445. \u0421\u0430\u043c\u044b\u043c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u043c \u0441\u0442\u0430\u043b\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 NoSQL\u2011\u0440\u0435\u0448\u0435\u043d\u0438\u0439: \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u0430\u043a\u00a0\u0441\u043f\u0430\u0441\u0442\u0438\u0441\u044c \u043e\u0442\u00a0\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u042f \u0437\u0430\u0433\u043e\u0440\u0435\u043b\u0430\u0441\u044c, \u043f\u043e\u043d\u0438\u043c\u0430\u044f, \u0447\u0442\u043e\u00a0\u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044e \u0441\u0432\u043e\u0439 \u043f\u0435\u0442\u2011\u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u043e\u043d\u0430\u0434\u0435\u043b\u0430\u044e \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u0434\u0435\u043b\u0430\u043b\u0430 \u0442\u0430\u043a\u043e\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430, \u043f\u0440\u0438\u043d\u044f\u043b\u0430\u0441\u044c \u0437\u0430\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 22\u00a0\u0430\u043f\u0440\u0435\u043b\u044f. \u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u0443\u00a0\u043c\u0435\u043d\u044f \u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u044f\u0434\u0440\u043e: MemTable, WAL, SSTable, Compaction, MVCC, \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, Column Families. \u0415\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439\u00a0\u2014 gRPC, REST, WebSocket, CLI, Docker \u0438 CI\/CD.\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u0445\u043e\u0442\u0435\u043b\u0430 \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435, \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ScoriaDB: \u043a\u0430\u043a \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0427\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a: \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0427\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u0447\u0442\u043e \u0435\u0449\u0451 \u043d\u0435\u0442\u0427\u0442\u043e \u044f \u0432\u044b\u043d\u0435\u0441\u043b\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0443 \u0441\u0435\u0431\u044f\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f CLI\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435  \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ScoriaDB: \u043a\u0430\u043a\u00a0\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u042f \u043d\u0435\u00a0\u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u043b\u0430 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u044d\u0442\u043e \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u00a0\u0441\u0435\u0431\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432, \u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b LevelDB, RocksDB, BadgerDB, TiKV, \u044f \u0432\u0437\u044f\u043b\u0430 \u0443\u00a0\u043d\u0438\u0445 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0435\u0438. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0433\u0438\u0431\u0440\u0438\u0434.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 MemTable: \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0451\u2011\u0442\u0430\u043a\u0438 B\u2011tree, \u0430\u00a0\u043d\u0435\u00a0skip list (\u0438 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439)\u041c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430\u00a0\u0431\u044b\u043b\u0430 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f in\u2011memory \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u0414\u043b\u044f\u00a0\u0447\u0435\u0433\u043e? \u0427\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0430\u043d \u043f\u043e\u00a0\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0443 \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0SSTable.\u0412\u043e\u0442 \u043a\u0430\u043a\u00a0\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b:\u0425\u0435\u0448\u2011\u0442\u0430\u0431\u043b\u0438\u0446\u0430? \u043d\u0435\u0442, \u043e\u043d\u0430 \u043d\u0435\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043a\u043b\u044e\u0447\u0435\u0439, \u0441\u043a\u0430\u043d \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.sync.Map? \u0422\u043e\u0436\u0435 \u043d\u0435\u0442, \u043d\u0435\u00a0\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u0430, \u043f\u043e\u0434\u00a0write\u2011heavy \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f.Skip list\u00a0\u2014 \u0425\u043c, \u044d\u0442\u043e \u0437\u043e\u043b\u043e\u0442\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 LSM (LevelDB, RocksDB, BadgerDB), lock\u2011free \u0438\u043b\u0438\u00a0\u0445\u043e\u0442\u044f\u00a0\u0431\u044b \u0441\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438. \u041d\u043e\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e skiplist \u0432\u00a0Go\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u043e\u0442\u0432\u043b\u0435\u0447\u044c \u043e\u0442\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 mvp.B\u2011tree\u00a0\u2014 \u0432\u0437\u044f\u043b\u0430 github.com\/google\/btree. \u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439, \u0435\u0441\u0442\u044c copy\u2011on\u2011write,\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u044f\u0441\u043d\u044e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442, \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u043d\u0430\u00a0\u0432\u0441\u044e MemTable (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f B\u2011tree) \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0441\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0414\u043b\u044f\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u044f \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e \u043f\u043e\u0448\u043b\u0430 \u043d\u0430\u00a0\u044d\u0442\u043e, \u0432\u044b\u0438\u0433\u0440\u0430\u0432 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439. \u0412\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u043d\u0430\u00a0v0.3.0\u00a0\u2014 \u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0430\u00a0lock\u2011free skip list \u0441\u00a0\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u0430\u0437\u0430 \u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443.SSTable \u0438 Bloom\u2011\u0444\u0438\u043b\u044c\u0442\u0440\u041a\u043e\u0433\u0434\u0430 MemTable \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043e\u043d\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u00a0\u0444\u0430\u0439\u043b\u00a0\u2014 SSTable. \u0412\u043e\u0442 \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430:\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502   Header    \u2502  \u2190 magic, \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\u2502 Block index \u2502  \u2190 \u043c\u0430\u0441\u0441\u0438\u0432 \u00ab\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0431\u043b\u043e\u043a\u0430 \u2192 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u00bb\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\u2502Bloom filter \u2502\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\u2502  Block 1    \u2502  \u2190 \u0434\u0430\u043d\u043d\u044b\u0435 + CRC32 \u0431\u043b\u043e\u043a\u0430\u2502  Block 2    \u2502\u2502  &#8230;        \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u0411\u043b\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 SSTable \u0445\u0440\u0430\u043d\u0438\u0442 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u00a0\u0444\u0430\u0439\u043b\u0435. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c, \u043d\u0435\u00a0\u0447\u0438\u0442\u0430\u044f \u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b.\u041f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0435 \u0441\u0436\u0430\u0442\u0438\u0435\u00a0\u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0432\u00a0SSTable: \u0435\u0441\u043b\u0438 \u043a\u043b\u044e\u0447\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, user:100, user:101), \u0442\u043e \u043e\u0431\u0449\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0430\u00a0\u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u044b\u00a0\u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.Bloom\u2011\u0444\u0438\u043b\u044c\u0442\u0440\u00a0\u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u043a\u043b\u044e\u0447\u0430 \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0442\u00bb, \u043e\u0442\u0441\u0435\u043a\u0430\u044f\u00a0\u043b\u0438\u0448\u043d\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u00a0\u0434\u0438\u0441\u043a\u0430. \u041b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b, \u043d\u043e\u00a0\u043e\u043d\u0438\u00a0\u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a\u00a0\u0445\u043e\u043b\u043e\u0441\u0442\u043e\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u0443 \u0432\u00a0\u0431\u043b\u043e\u043a\u0435, \u043d\u0435\u00a0\u043d\u0430\u0440\u0443\u0448\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438.\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b\u00a0\u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0441\u043d\u0430\u0431\u0436\u0451\u043d CRC32. \u041f\u0440\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u0430 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0441\u0443\u043c\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0431\u0438\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u00a0\u0434\u0438\u0441\u043a\u0435. \u0411\u0435\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u043c\u043e\u043b\u0447\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0443\u0441\u043e\u0440, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d.WriteBatch: \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\u0418\u0434\u0435\u044f \u0438\u0437\u00a0RocksDB. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u00a0\u2014\u00a0\u043b\u0438\u0431\u043e \u0432\u0441\u0435,\u00a0\u043b\u0438\u0431\u043e \u043d\u0438\u0447\u0435\u0433\u043e. \u0412\u00a0ScoriaDB WriteBatch \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u0443\u0444\u0435\u0440 \u0438 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0432\u00a0WAL \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e. \u041f\u0440\u0438\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0451 \u0434\u043e\u00a0\u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u043a\u043e\u043d\u0446\u0430. \u0415\u0441\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043e\u0431\u0440\u044b\u0432\u00a0\u2014 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0442\u0447\u0430 \u043d\u0435\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.\u0421\u0445\u0435\u043c\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0438\u0441\u0438WiscKey \u0438 Value Log: \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u00a0\u0430\u043c\u043f\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 LSM \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u0430\u043c\u043f\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 : \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 1\u00a0\u041c\u0411 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435. \u0414\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0438 \u0443\u0436\u0435 10\u00a0\u041c\u0411 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430\u00a0\u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c\u00a0\u2014 20\u00a0\u041c\u0411. \u0423\u00a0Badger \u044f \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Value Log (WiscKey\u2011\u0441\u0442\u0438\u043b\u044c). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f &gt;64\u00a0\u0431\u0430\u0439\u0442 \u0432\u044b\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0430\u00a0\u0432\u00a0LSM\u2011\u0434\u0435\u0440\u0435\u0432\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438.CRC32\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u00a0\u2014 \u0432\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 VLog. \u0422\u0430\u043a \u0447\u0442\u043e\u00a0\u043f\u043e\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u044f \u043c\u043e\u0433\u0443\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c.mmap \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 zero\u2011copy \u0432\u00a0Go\u00a0\u2014 \u043d\u0435\u00a0\u0442\u043e, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e mmap \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 VLog \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u044c. \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442:\u041f\u043e\u0441\u043b\u0435 syscall.Munmap (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u00a0\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u0411\u0414) \u0441\u043b\u0430\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u00a0\u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d, \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0438\u0441\u044f\u0447\u0438\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u00a0\u043d\u0438\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 SIGSEGV.\u0411\u0435\u0437\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0430\u0439\u0441\u043e\u0432 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0432\u0430\u0440\u0438\u044e: \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e\u00a0\u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0441\u043b\u0430\u0439\u0441\u0443, \u043f\u043e\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043a\u0440\u044b\u043b \u0444\u0430\u0439\u043b \u0438 \u0441\u0434\u0435\u043b\u0430\u043b Munmap.\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0mmap\u2011\u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u00a0\u043d\u043e\u0432\u0443\u044e \u043a\u0443\u0447\u0443, \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438 \u043e\u0434\u043d\u043e\u00a0\u043b\u0438\u0448\u043d\u0435\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u00a0\u0441\u044b\u0433\u0440\u0430\u0435\u0442. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 zero\u2011copy \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u00a0\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430\u00a0\u0440\u0435\u0433\u0438\u043e\u043d\u044b mmap \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u0447\u0442\u043e\u00a0\u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0430\u0439\u0441 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f VLog. \u041f\u043e\u043a\u0430 \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u043d\u0430\u00a0v0.3.0.MVCC \u0438 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430MVCC (Multi\u2011Version Concurrency Control) \u0434\u0430\u0451\u0442 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u043a\u043e\u0439 commitTS. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 startTS \u0438 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 commitTS &lt;= startTS. \u0413\u043b\u0430\u0432\u043d\u043e\u0435: \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u0415\u0441\u043b\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 (\u043a\u0442\u043e\u2011\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043b\u044e\u0447 \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u0430), \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0438 \u0432\u044b\u0437\u043e\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e\u00a0\u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u0446\u0438\u043a\u043b\u0435 \u0441\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c\u0438.\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430\u00a0\u2014 \u0442\u0440\u044e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0430 \u0432\u00a0TiKV. \u041e\u0431\u044b\u0447\u043d\u043e timestamp \u0440\u0430\u0441\u0442\u0451\u0442, \u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432\u00a0\u043a\u043e\u043d\u0446\u0435 \u0434\u0435\u0440\u0435\u0432\u0430. \u041f\u0440\u0438\u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0435\u00a0\u0441\u0430\u043c timestamp, \u0430\u00a0\u0435\u0433\u043e \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 (^uint64(now)\u00a0\u0432\u00a0Go\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0431\u0438\u0442\u043e\u0432). \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u0435\u0436\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 (\u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u00a0commitTS) \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0434\u0451\u0442 \u043e\u0442\u00a0\u043d\u043e\u0432\u044b\u0445 \u043a\u00a0\u0441\u0442\u0430\u0440\u044b\u043c.Column Families: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435\u0418\u0434\u0435\u044f \u0438\u0437\u00a0Bigtable \u0438 Cassandra. \u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 LSM\u2011\u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u044b. \u0423\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e CF \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \u0440\u0430\u0437\u043c\u0435\u0440 MemTable, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430, \u0430\u00a0\u0432\u00a0\u0431\u0443\u0434\u0443\u0449\u0435\u043c\u00a0\u2014 TTL.\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u0438\u0434\u0435 map[string]*Engine \u0438 \u043e\u0431\u0449\u0435\u0433\u043e WAL \u0434\u043b\u044f\u00a0\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 CF. \u0411\u0435\u0437\u00a0\u043e\u0431\u0449\u0435\u0433\u043e WAL \u043f\u0440\u0438\u00a0\u0441\u0431\u043e\u0435 \u0447\u0430\u0441\u0442\u044c CF \u043c\u043e\u0433\u043b\u0430 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u0430\u00a0\u0434\u0440\u0443\u0433\u0430\u044f\u00a0\u2014 \u043d\u0435\u0442. \u042d\u0442\u043e\u00a0\u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u043f\u0435\u0440\u0432\u044b\u0445 \u0433\u0440\u0443\u0431\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043d\u0430\u0448\u043b\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0430\u0436 \u043f\u0440\u0438\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043b\u043e\u0433\u043e\u0432 \u043d\u0430\u00a0\u044d\u0442\u043e\u0439 \u0431\u0434.Leveled Compaction: \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u0437\u00a0LevelDB: \u0443\u0440\u043e\u0432\u043d\u0438 L0\u00a0\u2192 L1\u00a0\u2192 L2\u00a0\u2192 L3. \u041d\u0430\u00a0L0\u00a0\u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u043a\u043b\u044e\u0447\u0430\u043c, \u043d\u0430\u00a0L1\u00a0\u0438 \u043d\u0438\u0436\u0435\u00a0\u2014 \u043d\u0435\u0442.\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0 \u0432 ScoriaDB (v0.1.0). \u0422\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u0443\u0440\u043e\u0432\u043d\u044f 0, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c, \u0441\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0443\u0440\u043e\u0432\u043d\u044f 1 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0441\u043b\u0438\u044f\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f multi\u2011way merge \u0441 min\u2011heap. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b (\u0447\u0435\u0440\u0435\u0437 minActiveSnapshotTS), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043e\u043b\u0433\u0438\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c 0 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f.\u0421\u043d\u0430\u0447\u0430\u043b\u0430\u00a0\u0431\u044b\u043b\u0430 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043f\u043e\u0442\u043e\u043c \u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 multi\u2011way merge \u0441\u00a0min\u2011heap. \u0412\u00a0\u043f\u043b\u0430\u043d\u0430\u0445\u00a0\u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c write stall, \u043a\u043e\u0433\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u043f\u0435\u0440\u0435\u0436\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0448\u043d.Manifest: \u0436\u0443\u0440\u043d\u0430\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0448\u0435\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f SSTable, \u043d\u0443\u0436\u043d\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.\u042f \u0432\u0437\u044f\u043b\u0430 \u0438\u0434\u0435\u044e \u0438\u0437\u00a0RocksDB: \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432\u00a0\u0436\u0443\u0440\u043d\u0430\u043b MANIFEST. \u0421\u0435\u0439\u0447\u0430\u0441 \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c\u00a0\u2014 \u044d\u0442\u043e VersionEdit \u0432 JSON (\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c fsync). \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043d\u043e \u043d\u0435\u00a0\u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430\u00a0. \u0412\u00a0v0.2.0\u00a0\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430\u00a0\u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u0438:{  &#171;level&#187;: 1,  &#171;add&#187;: [&#171;sstable_000123.sst&#187;],  &#171;delete&#187;: [&#171;sstable_000045.sst&#187;]}Fail\u2011safe VLog: \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u0415\u0441\u043b\u0438 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0Value Log \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u0431\u043e\u0439, \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442\u044c\u0441\u044f (magic mismatch\u00a0\u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435). \u042f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u043a\u0430\u043a\u00a0\u0432\u00a0BadgerDB: \u043f\u0440\u0438\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e magic. \u0415\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442\u00a0\u2014 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e \u0432 .corrupt, \u0441\u043e\u0437\u0434\u0430\u044e \u043d\u043e\u0432\u044b\u0439, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0WAL. \u0417\u0430\u043f\u0438\u0441\u0438 \u0441\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430\u00a0\u0441\u0442\u0430\u0440\u044b\u0439 VLog \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f (\u043e\u043d\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b), \u043d\u043e\u00a0\u0431\u0430\u0437\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0439.VFS\u2011\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u0427\u0442\u043e\u0431\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0438 \u0434\u0438\u0441\u043a\u0430, \u044f \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 VFS:type VFS interface {    Open(name string) (File, error)    Create(name string) (File, error)    Rename(old, new string) error    Remove(name string) error}\u0412\u00a0production\u00a0\u2014 DefaultVFS (\u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 os), \u0432\u00a0\u0442\u0435\u0441\u0442\u0430\u0445\u00a0\u2014 \u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u043b\u0438\u00a0\u043e\u0442\u043a\u0430\u0437\u044b. \u041f\u0440\u0430\u0432\u0434\u0430, \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044c: \u0434\u043b\u044f mmap \u043d\u0443\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 (*os.File), \u0430 \u043d\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439\u00a0vfs.File. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445, \u0433\u0434\u0435 \u044f \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043a\u043e\u043c, VLog \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c mmap \u2014 \u0438 \u043c\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c fail\u2011safe VLog \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u043c\u043e\u043a\u0430\u0445 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442. \u042d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 v0.3.0, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u0432 mmap \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u043d\u0430\u00a0pread\u00a0\u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.\u0427\u0438\u0441\u0442\u044b\u0439 Go \u0431\u0435\u0437\u00a0cgo \u0438 gRPC \u043a\u0430\u043a\u00a0\u0443\u00a0etcdRocksDB \u0442\u0440\u0435\u0431\u0443\u0435\u0442 C++ \u0438 cgo\u00a0\u2014 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u00a0\u043a\u0440\u043e\u0441\u0441\u2011\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439. BadgerDB\u00a0\u2014 \u0447\u0438\u0441\u0442\u044b\u0439 Go, \u043d\u043e\u00a0\u0431\u0435\u0437\u00a0\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-478803","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/478803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=478803"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/478803\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=478803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=478803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=478803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}