{"id":5585,"date":"2025-09-15T05:49:42","date_gmt":"2025-09-15T05:49:42","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=5585"},"modified":"2025-09-15T05:49:42","modified_gmt":"2025-09-15T05:49:42","slug":"github-davidliedle-driftdb-driftdb-an-experimental-append-only-database-with-built-in-time-travel-query-any-point-in-history-guaranteed-data-integrity-and-immutable-audit-trails-written-in-ru","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/5585\/","title":{"rendered":"GitHub &#8211; DavidLiedle\/DriftDB: DriftDB &#8211; An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust."},"content":{"rendered":"\n<\/p>\n<div id=\"\">\n<p dir=\"auto\">An experimental append-only database with time-travel queries.<\/p>\n<ul dir=\"auto\">\n<li><strong>Append-only storage<\/strong>: All changes are immutable drift events<\/li>\n<li><strong>Time travel<\/strong>: Query any historical state with <code>AS OF<\/code> clauses<\/li>\n<li><strong>CRC-verified segments<\/strong>: Data integrity with checksummed records<\/li>\n<li><strong>Secondary indexes<\/strong>: Fast lookups on indexed columns<\/li>\n<li><strong>Snapshots &amp; compaction<\/strong>: Optimize query performance<\/li>\n<li><strong>Crash-safe<\/strong>: Atomic writes with fsync on segment boundaries<\/li>\n<li><strong>Simple query language<\/strong>: DriftQL for easy interaction<\/li>\n<\/ul>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Clone and build&#10;git clone https:\/\/github.com\/driftdb\/driftdb&#10;cd driftdb&#10;make build\">\n<pre><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Clone and build<\/span>\ngit clone https:\/\/github.com\/driftdb\/driftdb\n<span class=\"pl-c1\">cd<\/span> driftdb\nmake build<\/pre>\n<\/div>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Run the full demo (creates sample data and runs queries)&#10;make demo\">\n<pre><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Run the full demo (creates sample data and runs queries)<\/span>\nmake demo<\/pre>\n<\/div>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Initialize a database&#10;driftdb init .\/mydata&#10;&#10;# Create a table&#10;driftdb sql -d .\/mydata -e 'CREATE TABLE users (pk=id, INDEX(email, status))'&#10;&#10;# Insert data&#10;driftdb sql -d .\/mydata -e 'INSERT INTO users {&quot;id&quot;: &quot;user1&quot;, &quot;email&quot;: &quot;alice@example.com&quot;, &quot;status&quot;: &quot;active&quot;}'&#10;&#10;# Query data&#10;driftdb select -d .\/mydata --table users --where 'status=&quot;active&quot;'&#10;&#10;# Time travel query&#10;driftdb select -d .\/mydata --table users --as-of &quot;@seq:100&quot;&#10;&#10;# Show row history&#10;driftdb drift -d .\/mydata --table users --key &quot;user1&quot;&#10;&#10;# Create snapshot for faster queries&#10;driftdb snapshot -d .\/mydata --table users&#10;&#10;# Compact storage&#10;driftdb compact -d .\/mydata --table users\">\n<pre><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Initialize a database<\/span>\ndriftdb init .\/mydata\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Create a table<\/span>\ndriftdb sql -d .\/mydata -e <span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>CREATE TABLE users (pk=id, INDEX(email, status))<span class=\"pl-pds\">'<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Insert data<\/span>\ndriftdb sql -d .\/mydata -e <span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>INSERT INTO users {\"id\": \"user1\", \"email\": \"alice@example.com\", \"status\": \"active\"}<span class=\"pl-pds\">'<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Query data<\/span>\ndriftdb <span class=\"pl-k\">select<\/span> <span class=\"pl-smi\">-d<\/span> .\/mydata --table users --where <span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>status=\"active\"<span class=\"pl-pds\">'<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Time travel query<\/span>\ndriftdb <span class=\"pl-k\">select<\/span> <span class=\"pl-smi\">-d<\/span> .\/mydata --table users --as-of <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>@seq:100<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Show row history<\/span>\ndriftdb drift -d .\/mydata --table users --key <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>user1<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Create snapshot for faster queries<\/span>\ndriftdb snapshot -d .\/mydata --table users\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Compact storage<\/span>\ndriftdb compact -d .\/mydata --table users<\/pre>\n<\/div>\n<div class=\"highlight highlight-source-sql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"-- Create table with indexes&#10;CREATE TABLE orders (pk=id, INDEX(status, customer_id))&#10;&#10;-- Insert full document&#10;INSERT INTO orders {&quot;id&quot;: &quot;order1&quot;, &quot;status&quot;: &quot;pending&quot;, &quot;amount&quot;: 100}&#10;&#10;-- Partial update&#10;PATCH orders KEY &quot;order1&quot; SET {&quot;status&quot;: &quot;paid&quot;}&#10;&#10;-- Soft delete (data remains for audit)&#10;SOFT DELETE FROM orders KEY &quot;order1&quot;&#10;&#10;-- Query with time travel&#10;SELECT * FROM orders WHERE status=&quot;paid&quot; AS OF &quot;2025-01-01T00:00:00Z&quot;&#10;SELECT * FROM orders WHERE customer_id=&quot;cust1&quot; AS OF &quot;@seq:1000&quot;&#10;&#10;-- Show drift history&#10;SHOW DRIFT orders KEY &quot;order1&quot;&#10;&#10;-- Maintenance&#10;SNAPSHOT orders&#10;COMPACT orders\">\n<pre><span class=\"pl-c\"><span class=\"pl-c\">--<\/span> Create table with indexes<\/span>\n<span class=\"pl-k\">CREATE<\/span> <span class=\"pl-k\">TABLE<\/span> <span class=\"pl-en\">orders<\/span> (pk<span class=\"pl-k\">=<\/span>id, INDEX(status, customer_id))\n\n<span class=\"pl-c\"><span class=\"pl-c\">--<\/span> Insert full document<\/span>\n<span class=\"pl-k\">INSERT INTO<\/span> orders {<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>id<span class=\"pl-pds\">\"<\/span><\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>order1<span class=\"pl-pds\">\"<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>status<span class=\"pl-pds\">\"<\/span><\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>pending<span class=\"pl-pds\">\"<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>amount<span class=\"pl-pds\">\"<\/span><\/span>: <span class=\"pl-c1\">100<\/span>}\n\n<span class=\"pl-c\"><span class=\"pl-c\">--<\/span> Partial update<\/span>\nPATCH orders KEY <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>order1<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">SET<\/span> {<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>status<span class=\"pl-pds\">\"<\/span><\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>paid<span class=\"pl-pds\">\"<\/span><\/span>}\n\n<span class=\"pl-c\"><span class=\"pl-c\">--<\/span> Soft delete (data remains for audit)<\/span>\nSOFT <span class=\"pl-k\">DELETE<\/span> <span class=\"pl-k\">FROM<\/span> orders KEY <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>order1<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">--<\/span> Query with time travel<\/span>\n<span class=\"pl-k\">SELECT<\/span> <span class=\"pl-k\">*<\/span> <span class=\"pl-k\">FROM<\/span> orders <span class=\"pl-k\">WHERE<\/span> status<span class=\"pl-k\">=<\/span><span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>paid<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">AS<\/span> OF <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>2025-01-01T00:00:00Z<span class=\"pl-pds\">\"<\/span><\/span>\n<span class=\"pl-k\">SELECT<\/span> <span class=\"pl-k\">*<\/span> <span class=\"pl-k\">FROM<\/span> orders <span class=\"pl-k\">WHERE<\/span> customer_id<span class=\"pl-k\">=<\/span><span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>cust1<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">AS<\/span> OF <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>@seq:1000<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">--<\/span> Show drift history<\/span>\nSHOW DRIFT orders KEY <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>order1<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">--<\/span> Maintenance<\/span>\nSNAPSHOT orders\nCOMPACT orders<\/pre>\n<\/div>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"data\/&#10;  tables\/&lt;table&gt;\/&#10;    schema.yaml           # Table schema definition&#10;    segments\/            # Append-only event logs&#10;      00000001.seg&#10;      00000002.seg&#10;    snapshots\/           # Materialized states&#10;      00000100.snap&#10;    indexes\/             # Secondary B-tree indexes&#10;      status.idx&#10;      customer_id.idx&#10;    meta.json           # Table metadata\">\n<pre class=\"notranslate\"><code>data\/\n  tables\/<div class=\"s_table\"><table>\/\n    schema.yaml           # Table schema definition\n    segments\/            # Append-only event logs\n      00000001.seg\n      00000002.seg\n    snapshots\/           # Materialized states\n      00000100.snap\n    indexes\/             # Secondary B-tree indexes\n      status.idx\n      customer_id.idx\n    meta.json           # Table metadata\n\n\n<ul dir=\"auto\">\n<li><strong>INSERT<\/strong>: Add new row with full document<\/li>\n<li><strong>PATCH<\/strong>: Partial update by primary key<\/li>\n<li><strong>SOFT_DELETE<\/strong>: Mark row as deleted (audit trail preserved)<\/li>\n<\/ul>\n\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"[u32 length][u32 crc32][varint seq][u64 unix_ms][u8 event_type][msgpack payload]\"><pre class=\"notranslate\"><code>[u32 length][u32 crc32][varint seq][u64 unix_ms][u8 event_type][msgpack payload]\n<\/code><\/pre>\n<\/div>\n<ul dir=\"auto\">\n<li><strong>Single writer<\/strong>: Process-global lock prevents concurrent writes<\/li>\n<li><strong>Multi-reader<\/strong>: Readers never block, use snapshots + replay<\/li>\n<li><strong>Crash recovery<\/strong>: CRC verification + truncate corrupt tail<\/li>\n<li><strong>Atomic operations<\/strong>: fsync on segment rotation and snapshots<\/li>\n<\/ul>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Run tests&#10;make test&#10;&#10;# Run benchmarks&#10;make bench&#10;&#10;# Format code&#10;make fmt&#10;&#10;# Run linter&#10;make clippy&#10;&#10;# Full CI checks&#10;make ci\">\n<pre><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Run tests<\/span>\nmake <span class=\"pl-c1\">test<\/span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Run benchmarks<\/span>\nmake bench\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Format code<\/span>\nmake fmt\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Run linter<\/span>\nmake clippy\n\n<span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Full CI checks<\/span>\nmake ci<\/pre>\n<\/div>\n<ul dir=\"auto\">\n<li>Snapshot every 100k events or 128MB (configurable)<\/li>\n<li>Compaction rewrites minimal segments with latest state<\/li>\n<li>Indexed columns use B-tree for O(log n) lookups<\/li>\n<li>Zstd compression for snapshots<\/li>\n<li>MessagePack for efficient event serialization<\/li>\n<\/ul>\n<p dir=\"auto\">MIT<\/p>\n<p dir=\"auto\">Experimental MVP - suitable for development and testing, not production use.<\/p>\n<p> <!-- --> <!-- --> <\/p>\n<p>      <input type=\"hidden\" data-csrf=\"true\" value=\"PecOA9rkpW8lwGvZZwUc4NDwXeps54UbOGxaNk3sNfHQu9AotbZQZkdVodveTpyYCQE6Pm3v+2sT5U2\/XKN3VA==\"\/><\/p>\n<footer class=\"footer pt-8 pb-6 f6 color-fg-muted p-responsive\" role=\"contentinfo\">\n<h2 class=\"sr-only\">Footer<\/h2>\n<\/footer>\n<p>    <ghcc-consent id=\"ghcc\" class=\"position-fixed bottom-0 left-0\" style=\"z-index: 999999\" data-locale=\"en\" data-initial-cookie-consent-allowed=\"\" data-cookie-consent-required=\"false\"\/><\/p>\n<div id=\"ajax-error-message\" class=\"ajax-error-message flash flash-error\" hidden=\"\">\n    <svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\/>\n<\/svg><br \/>\n    <button type=\"button\" class=\"flash-close js-ajax-error-dismiss\" aria-label=\"Dismiss error\"><br \/>\n      <svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x\">\n    <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"\/>\n<\/svg><br \/>\n    <\/button><br \/>\n    You can\u2019t perform that action at this time.\n  <\/div>\n<p>    <template id=\"site-details-dialog\"><\/p>\n<details class=\"details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm\" open=\"\">\n<summary role=\"button\" aria-label=\"Close dialog\"\/>\n    <details-dialog class=\"Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal\">\n      <button class=\"Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0\" type=\"button\" aria-label=\"Close dialog\" data-close-dialog=\"\"><br \/>\n        <svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x\">\n    <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"\/>\n<\/svg><br \/>\n      <\/button><\/p>\n<\/details-dialog>\n  <\/details>\n<p><\/template><\/p>\n<p>    <template id=\"snippet-clipboard-copy-button\"><\/p>\n<p><\/template><br \/>\n<template id=\"snippet-clipboard-copy-button-unpositioned\"><\/p>\n<p><\/template><\/p>\n<\/table><\/div>\n<p><\/code><\/div>\n<\/div>\n\n<br \/><a href=\"https:\/\/github.com\/DavidLiedle\/DriftDB\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"An experimental append-only database with time-travel queries. Append-only storage: All changes are immutable  [&hellip;]","protected":false},"author":1,"featured_media":5586,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-5585","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GitHub - DavidLiedle\/DriftDB: DriftDB - An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust. - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/github.com\/DavidLiedle\/DriftDB\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GitHub - DavidLiedle\/DriftDB: DriftDB - An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust. - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"An experimental append-only database with time-travel queries. Append-only storage: All changes are immutable [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.com\/DavidLiedle\/DriftDB\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-15T05:49:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/DriftDB.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"2\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5585\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"GitHub &#8211; DavidLiedle\\\/DriftDB: DriftDB &#8211; An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust.\",\"datePublished\":\"2025-09-15T05:49:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5585\\\/\"},\"wordCount\":172,\"image\":{\"@id\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/DriftDB.png\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5585\\\/\",\"url\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB\",\"name\":\"GitHub - DavidLiedle\\\/DriftDB: DriftDB - An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust. - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/DriftDB.png\",\"datePublished\":\"2025-09-15T05:49:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/DriftDB.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/DriftDB.png\",\"width\":1200,\"height\":600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.com\\\/DavidLiedle\\\/DriftDB#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GitHub &#8211; DavidLiedle\\\/DriftDB: DriftDB &#8211; An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GitHub - DavidLiedle\/DriftDB: DriftDB - An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust. - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/github.com\/DavidLiedle\/DriftDB","og_locale":"ja_JP","og_type":"article","og_title":"GitHub - DavidLiedle\/DriftDB: DriftDB - An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust. - \u30dd\u30b1\u30b3\u30f3","og_description":"An experimental append-only database with time-travel queries. Append-only storage: All changes are immutable [&hellip;]","og_url":"https:\/\/github.com\/DavidLiedle\/DriftDB","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-09-15T05:49:42+00:00","og_image":[{"width":1200,"height":600,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/DriftDB.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"2\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/github.com\/DavidLiedle\/DriftDB#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/5585\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"GitHub &#8211; DavidLiedle\/DriftDB: DriftDB &#8211; An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust.","datePublished":"2025-09-15T05:49:42+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/5585\/"},"wordCount":172,"image":{"@id":"https:\/\/github.com\/DavidLiedle\/DriftDB#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/DriftDB.png","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/5585\/","url":"https:\/\/github.com\/DavidLiedle\/DriftDB","name":"GitHub - DavidLiedle\/DriftDB: DriftDB - An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust. - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.com\/DavidLiedle\/DriftDB#primaryimage"},"image":{"@id":"https:\/\/github.com\/DavidLiedle\/DriftDB#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/DriftDB.png","datePublished":"2025-09-15T05:49:42+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/github.com\/DavidLiedle\/DriftDB#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.com\/DavidLiedle\/DriftDB"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/github.com\/DavidLiedle\/DriftDB#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/DriftDB.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/DriftDB.png","width":1200,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/github.com\/DavidLiedle\/DriftDB#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"GitHub &#8211; DavidLiedle\/DriftDB: DriftDB &#8211; An experimental append-only database with built-in time travel. Query any point in history, guaranteed data integrity, and immutable audit trails. Written in Rust."}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=5585"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5585\/revisions"}],"predecessor-version":[{"id":5587,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5585\/revisions\/5587"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/5586"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=5585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=5585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=5585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}