{"id":155575,"date":"2012-10-22T00:37:04","date_gmt":"2012-10-21T20:37:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=155575"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=155575","title":{"rendered":"<span class=\"post_title\">\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c TarantoolBox \u0432 Java \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t&nbsp;&nbsp;&nbsp;&nbsp;\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0438\u0436\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 TarantoolBox \u0438 \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0430 Java. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u043e \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0435, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 xlog \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 snap \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  <a name=\"habracut\"><\/a><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<a href=\"http:\/\/tarantool.org\">Tarantool Box<\/a> &mdash; \u044d\u0442\u043e \u043a\u043b\u044e\u0447-\u043a\u043e\u0440\u0442\u0435\u0436 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u0440\u0442\u0435\u0436, \u0434\u0430\u043b\u0435\u0435 <b>tuple<\/b>, \u043a\u043e\u0440\u0442\u0435\u0436\u0438 &mdash; \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0434\u0430\u043b\u0435\u0435 <b>space<\/b>, \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 &mdash; \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f 3 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: 32 \u0431\u0438\u0442\u043d\u043e\u0435 \u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043ee, 64 \u0431\u0438\u0442\u043d\u043e\u0435 \u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0434\u0430\u043b\u0435\u0435 <b>NUM<\/b>, <b>NUM64<\/b> \u0438 <b>STR<\/b> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0414\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0442\u0438\u043f \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: HASH \u043f\u043e \u043f\u043e\u043b\u044f\u043c 1,2 \u0433\u0434\u0435 1 &mdash; NUM, \u0430 2 &mdash; NUM64. \u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435. <a href=\"http:\/\/ru.wikipedia.org\/wiki\/DML\">DML<\/a> \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u0440\u0442\u0435\u0436\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443. \u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u044f\u0437\u044b\u043a <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Lua\">Lua<\/a>. \u0421\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043d\u0438\u043c\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0434\u0430\u043b\u0435\u0435 <b>snapshot<\/b>, \u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0430, \u0434\u0430\u043b\u0435\u0435 <b>xlog<\/b>. \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Slab\">slab<\/a>. <\/p>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043d\u0438\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f java connector, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"http:\/\/dgreenru.github.com\/tarantool-java\/\">dgreenru.github.com\/tarantool-java\/<\/a>. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 <b>0.1.2<\/b>. \u041d\u0438\u0436\u0435 \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u043c\u0438. <\/p>\n<h4>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b MySQL \u0432 Tarantool Box:<\/h4>\n<pre><code>mysql&gt; desc user; +------------+--------------+------+-----+-------------------+----------------+ | Field      | Type         | Null | Key | Default           | Extra          | +------------+--------------+------+-----+-------------------+----------------+ | id         | int(11)      | NO   | PRI | NULL              | auto_increment | | username   | varchar(255) | NO   | UNI | NULL              |                | | email      | varchar(255) | NO   | UNI | NULL              |                | | enabled    | tinyint(1)   | NO   |     | 1                 |                | | registered | timestamp    | NO   |     | CURRENT_TIMESTAMP |                | +------------+--------------+------+-----+-------------------+----------------+ 5 rows in set <\/code><\/pre>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 id \u0438 2 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0445 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 username \u0438 email. \u0418\u0437 \u043d\u0435\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u044b\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u0435\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c <i>auto_increment<\/i> \u0438 <i>timestamp<\/i>. \u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043c\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 <b>box.auto_increment<\/b>, \u0430 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <i>yyyyMMddhhmmss<\/i> \u0438\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u0415\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 user \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 mysql \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 Tarantool Box, \u043d\u0430 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u044f \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0430 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0442.\u0435. \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043f\u0443\u0441\u0442\u044c \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 \u0444\u043e\u0440\u043c\u0430\u0442, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<pre><code class=\"bash\">mysql&gt; select * into outfile '\/tmp\/user' from user; Query OK, 73890541 rows affected  $ head -1 \/tmp\/user 1\tusername\temail@domain.tld\t1\t2012-10-14 01:27:05 <\/code><\/pre>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0432 \u0444\u0430\u0439\u043b \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 Tarantool Box. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435, \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u044d\u0441\u043a\u0435\u0439\u043f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043a\u0430\u0440\u0435\u0442\u043a\u0438, \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0441\u043b\u044d\u0448 \u0438\u043b\u0438 \u043f\u043e\u043b\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 NULL \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. <\/p>\n<pre><code class=\"java\">BufferedReader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(&quot;\/tmp\/user.gz&quot;)), &quot;utf-8&quot;)); SnapshotWriter writer = new SnapshotWriter(new FileOutputStream(&quot;\/tmp\/user.snap&quot;).getChannel()); String line = null; DateFormat indf = new SimpleDateFormat(&quot;yyyy-MM-dd hh:mm:ss&quot;); DateFormat outdf = new SimpleDateFormat(&quot;yyyyMMddhhmmss&quot;); Pattern pattern = Pattern.compile(&quot;\\t&quot;); while ((line = reader.readLine()) != null) { \ttry { \t\tString[] values = pattern.split(line); \t\tif (values.length == 5) { \t\t\tInteger id = Integer.parseInt(values[0]); \t\t\tString username = values[1]; \t\t\tString email = values[2]; \t\t\tbyte[] enabled = { Byte.valueOf(values[3]) }; \t\t\tLong registered = Long.parseLong(outdf.format(indf.parse(values[4])));  \t\t\tTuple tuple = new Tuple(5).setInt(0, id).setString(1, username, &quot;UTF-8&quot;) \t\t\t.setString(2, email, &quot;UTF-8&quot;).setBytes(3, enabled).setLong(4, registered);  \t\t\twriter.writeRow(0, tuple); \t\t} else { \t\t\tSystem.err.println(&quot;Line should be splited in 5 parts, but has &quot; + values.length + &quot; for &quot; + line); \t\t} \t} catch (Exception e) { \t\tSystem.err.println(&quot;Can't parse line &quot; + line); \t\te.printStackTrace(); \t} } writer.close(); reader.close(); <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043c\u0435\u0435\u043c \u0444\u0430\u0439\u043b<\/p>\n<pre><code class=\"bash\">$ ls -sh \/tmp\/user.snap 16.1G \/tmp\/user.snap <\/code><\/pre>\n<p>  \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c space 0 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<pre><code class=\"bash\"># \u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434 slab \u0431\u043b\u043e\u043a\u0438.  # \u0418\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u043d\u0435 slab,  # \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e 2\u0445 \u0431\u043e\u043b\u044c\u0448\u0435. # \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0434\u0435\u0441\u044c 24 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430. slab_alloc_arena = 24  # \u0422\u0430\u043a \u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043e\u0442\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c xlog \u0444\u0430\u0439\u043b\u0435. rows_per_wal = 500000  # \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 space 0 space[0].enabled = 1 # id. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c box.auto_increment \u0442\u0438\u043f \u0434\u0435\u0440\u0435\u0432\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c TREE.  space[0].index[0].type = &quot;TREE&quot; space[0].index[0].unique = 1 space[0].index[0].key_field[0].fieldno = 0 space[0].index[0].key_field[0].type = &quot;NUM&quot;  #username space[0].index[1].type = &quot;HASH&quot; space[0].index[1].unique = 1 space[0].index[1].key_field[0].fieldno = 1 space[0].index[1].key_field[0].type = &quot;STR&quot;  #password space[0].index[2].type = &quot;HASH&quot; space[0].index[2].unique = 1 space[0].index[2].key_field[0].fieldno = 2 space[0].index[2].key_field[0].type = &quot;STR&quot; <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c 00000000000000000001.snap \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 work_dir \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0444\u0430\u0439\u043b.<\/p>\n<pre><code class=\"bash\">$ mv \/tmp\/user.snap \/var\/lib\/tarantool\/00000000000000000001.snap <\/code><\/pre>\n<p>  \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<pre><code class=\"bash\">$ tarantool_box --background    $ ps -C tarantool_box -o pid=,cmd=  8853 tarantool_box: primary pri: 33013 sec: 33014 adm: 33015 <\/code><\/pre>\n<p>  \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b tarantool.log, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435, \u0444 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u044b \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0443.<\/p>\n<pre><code class=\"bash\">1350504007.249 7127 1\/sched _ I&gt; Space 0: done 1350504007.249 7127 101\/33013\/primary _ I&gt; bound to port 33013 1350504007.249 7127 101\/33013\/primary _ I&gt; I am primary 1350504007.249 7127 102\/33014\/secondary _ I&gt; bound to port 33014 1350504007.250 7127 103\/33015\/admin _ I&gt; bound to port 33015 1350504007.251 7127 1\/sched _ C&gt; log level 4 1350504007.251 7127 1\/sched _ C&gt; entering event loop\t\t\t\t\t <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c<\/p>\n<pre><code class=\"bash\">$ tarantool -a 127.0.0.1 127.0.0.1&gt; select * from t0 where k0 = 1 Select OK, 1 rows affected [1, 'username', 'email@domain.tld', '\\x01', '\\x21\\x8b\\xe4\\xc9\\x4c\\x12'] 127.0.0.1&gt; select * from t0 where k1 = 'username' Select OK, 1 rows affected [1, 'username', 'email@domain.tld', '\\x01', '\\x21\\x8b\\xe4\\xc9\\x4c\\x12'] 127.0.0.1&gt; select * from t0 where k2 = 'email@domain.tld' Select OK, 1 rows affected [1, 'username', 'email@domain.tld', '\\x01', '\\x21\\x8b\\xe4\\xc9\\x4c\\x12'] <\/code><\/pre>\n<p>  \u0442.\u0435. \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e 3-\u043c \u043a\u043b\u044e\u0447\u0430\u043c, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043d\u0430\u043c\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435. \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u043e\u0442\u0447\u0451\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <b>show slab<\/b> \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Tarantool Box.<\/p>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;Tarantool Box \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b MySQL \u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0435\u0451 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 ReplicationClient. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u0443\u044e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e xlog \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e slave \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 MySQL \u0431\u0435\u0437 \u0437\u0430\u0442\u0440\u0430\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c <b>replication_port<\/b> \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439. \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435 \u043a\u043b\u0430\u0441\u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u043b\u043e\u0433\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u043f\u043e 50 \u0442\u044b\u0441. \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<br \/>  1. \u043f\u043e\u0438\u0441\u043a \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043b\u043e\u0433\u043e\u0432 <br \/>  2. \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e lsn <br \/>  3. \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <br \/>  4. \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u043c \u0432 \u0444\u0430\u0439\u043b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<br \/>  \u041b\u043e\u0433\u0438\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f MySQL \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u0435\u0451 \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0446\u0438\u043a\u043b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main. \u0421\u043b\u043e\u0436\u043d\u044b\u043c \u043c\u0435\u0441\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <b>ReplicationClient<\/b> \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043b\u043e\u0433, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044f \u0438\u0445 \u0434\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 xlog. \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u0442.\u043a. \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043a\u043e\u0440\u0435\u0435 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0447\u0435\u043c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"java\">public class Backup { \tprotected DecimalFormat xlogNameFormat = new DecimalFormat(&quot;00000000000000000000&quot;); \tprotected String folder; \tprotected FileChannel xlogChannel; \tprotected int row; \tprotected int limit = 50000; \tprotected long lsn = 0L; \tprotected ReplicationClient client; \tprotected XLogWriter writer;  \tpublic void setLimit(int limit) { \t\tthis.limit = limit; \t}  \tpublic Backup(String folder, String host, int port) throws IOException { \t\tthis.folder = folder;  \t}  \tprotected void getLatestLSN(String folder) throws IOException, FileNotFoundException { \t\tfinal File backupFolder = new File(folder); \t\tString[] xlogs = backupFolder.list(new FilenameFilter() {  \t\t\t@Override \t\t\tpublic boolean accept(File dir, String name) { \t\t\t\treturn name.endsWith(&quot;.xlog&quot;); \t\t\t} \t\t}); \t\tboolean hasLogs = xlogs != null && xlogs.length &gt; 0; \t\tif (hasLogs) { \t\t\tArrays.sort(xlogs); \t\t\tXLogReader reader = new XLogReader(new FileInputStream(folder + &quot;\/&quot; + xlogs[xlogs.length - 1]).getChannel()); \t\t\tXLogEntry xlogEntry = null; \t\t\twhile ((xlogEntry = reader.nextEntry()) != null) { \t\t\t\tlsn = xlogEntry.header.lsn; \t\t\t} \t\t\treader.close(); \t\t} \t}  \tpublic void start() throws IOException { \t\tgetLatestLSN(folder); \t\tSystem.out.println(&quot;Planning to start from lsn: &quot; + lsn); \t\tRuntime.getRuntime().addShutdownHook(new Thread(new Runnable() {  \t\t\t@Override \t\t\tpublic void run() { \t\t\t\ttry { \t\t\t\t\tsynchronized (this) { \t\t\t\t\t\tclose(); \t\t\t\t\t} \t\t\t\t} catch (IOException e) { \t\t\t\t\tthrow new IllegalStateException(&quot;Can't close xlog&quot;, e); \t\t\t\t} \t\t\t} \t\t}));  \t\tfinal ByteBuffer rowStartMarker = ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(Const.ROW_START_MARKER); \t\tclient = new ReplicationClient(SocketChannel.open(new InetSocketAddress(&quot;127.0.0.1&quot;, 33016)), lsn + 1L) {  \t\t\t@Override \t\t\tprotected ByteBuffer readBody(Header header) throws IOException { \t\t\t\tif (Backup.this.xlogChannel == null) { \t\t\t\t\tBackup.this.xlogChannel = nextFile(folder); \t\t\t\t} \t\t\t\tByteBuffer body = super.readBody(header); \t\t\t\tthis.header.flip(); \t\t\t\trowStartMarker.flip(); \t\t\t\tsynchronized (Backup.this) { \t\t\t\t\twhile (rowStartMarker.hasRemaining()) \t\t\t\t\t\tBackup.this.xlogChannel.write(rowStartMarker); \t\t\t\t\twhile (this.header.hasRemaining()) \t\t\t\t\t\tBackup.this.xlogChannel.write(this.header); \t\t\t\t\twhile (body.hasRemaining()) \t\t\t\t\t\tBackup.this.xlogChannel.write(body); \t\t\t\t\tBackup.this.xlogChannel.force(false); \t\t\t\t\tbody.flip(); \t\t\t\t} \t\t\t\treturn body; \t\t\t}  \t\t};  \t}  \tpublic XLogEntry nextEntry() throws IOException { \t\tXLogEntry entry = client.nextEntry(); \t\tlsn = entry.header.lsn; \t\tif (++row &gt;= limit) { \t\t\tclose(); \t\t\txlogChannel = nextFile(folder); \t\t\trow = 0; \t\t} \t\treturn entry; \t}  \tprotected FileChannel nextFile(String folder) throws IOException { \t\tString fileName = folder + &quot;\/&quot; + xlogNameFormat.format(lsn + 1L) + &quot;.xlog&quot;; \t\tnew File(fileName).createNewFile(); \t\tFileChannel channel = new FileOutputStream(fileName, true).getChannel(); \t\twriter = new XLogWriter(channel); \t\treturn channel; \t}  \tpublic void close() throws IOException { \t\tif (writer != null) { \t\t\twriter.close(); \t\t} \t}  \tpublic static void main(String[] args) throws IOException { \t\tfinal Backup backup = new Backup(&quot;\/home\/dgreen\/backup&quot;, &quot;localhost&quot;, 33016); \t\tbackup.start(); \t\tXLogEntry entry = null; \t\twhile ((entry = backup.nextEntry()) != null) { \t\t\tStringBuilder pk = new StringBuilder(); \t\t\tfor (int i = 0; i &lt; entry.tuple.size(); i++) { \t\t\t\tif (pk.length() &gt; 0) { \t\t\t\t\tpk.append(&quot; - &quot;); \t\t\t\t} \t\t\t\tswitch (entry.tuple.getBytes(i).length) { \t\t\t\tcase 4: \t\t\t\t\tpk.append(String.valueOf(entry.tuple.getInt(i))); \t\t\t\t\tbreak; \t\t\t\tcase 8: \t\t\t\t\tpk.append(String.valueOf(entry.tuple.getLong(i))); \t\t\t\t\tbreak; \t\t\t\tdefault: \t\t\t\t\tpk.append(entry.tuple.getString(i, &quot;UTF-8&quot;)); \t\t\t\t}  \t\t\t} \t\t\tswitch (entry.op) { \t\t\tcase Update.OP_CODE: \t\t\t\tSystem.out.println(&quot;Got update on #&quot; + pk.toString()); \t\t\t\tbreak; \t\t\tcase Insert.OP_CODE: \t\t\t\tSystem.out.println(&quot;Got insert &quot; + pk.toString()); \t\t\t\tbreak; \t\t\tcase Delete.OP_CODE: \t\t\t\tSystem.out.println(&quot;Got delete of #&quot; + pk.toString()); \t\t\t\tbreak; \t\t\tdefault: \t\t\t\tSystem.out.println(&quot;Got unknown op &quot; + entry.op + &quot; &quot; + pk.toString()); \t\t\t\tbreak; \t\t\t}  \t\t} \t} } <\/code><\/pre>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u0422\u0430\u043a \u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 xlog \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u043a\u043e\u0440\u0442\u0435\u0436 \u0438\u043b\u0438 \u043e\u0447\u0438\u0441\u0442\u0438\u043b\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c space, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043b\u0430\u0441\u0441\u044b <b>XLogReader<\/b> \u0438 <b>XLogWriter<\/b> \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c xlog. <\/p>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u041d\u0430 \u044d\u0442\u043e\u043c \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0432\u0441\u0451, \u0435\u0449\u0451 \u0440\u0430\u0437 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"http:\/\/dgreenru.github.com\/tarantool-java\">dgreenru.github.com\/tarantool-java<\/a>, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435.    \t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/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=\"http:\/\/habrahabr.ru\/post\/155575\/\"> http:\/\/habrahabr.ru\/post\/155575\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t&nbsp;&nbsp;&nbsp;&nbsp;\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0438\u0436\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 TarantoolBox \u0438 \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0430 Java. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u043e \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0435, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 xlog \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 snap \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-155575","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/155575","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=155575"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/155575\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=155575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=155575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=155575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}