世界を動かす技術を、日本語で。

/dev/nullはACID準拠のデータベースです

概要

/dev/null の特性をACIDトランザクションの観点から解説 Atomicity, Consistency, Isolation, Durability すべてを満たす点を強調 ストレージ容量 は常に0バイトであることをユーモラスに言及 並列書き込みや障害後の状態についても説明 エンタープライズ向けの拡張はジョークとして紹介

/dev/nullはWebスケールなACID対応ストレージ

  • Atomicity(原子性)

    • 全てか無か の書き込み操作
    • /dev/null に書き込んだデータは完全に消失
    • 部分的な書き込み問題 が発生しない設計
  • Consistency(一貫性)

    • システム状態は常に 有効な状態 を維持
    • /dev/null は常に「空」であり続ける
    • どんな内容を書き込んでも 不変条件 は「ファイルは何も含まない」
  • Isolation(独立性)

    • 同時実行トランザクション 間の干渉が発生しない
    • 複数プロセスが同時に書き込んでも 出力が競合しない
    • 何も保存されないため 衝突なし
  • Durability(永続性)

    • トランザクションが コミット後も状態が維持
    • クラッシュや再起動後も /dev/null は常に「空」
    • データは永遠に存在しない ことが保証
  • 唯一の問題点

    • ストレージ容量は常に0バイト
    • 追加容量が必要な場合は エンタープライズ営業担当(私) まで連絡

まとめ

  • /dev/null はACID特性を 完璧に満たす「空のストレージ」
  • 実用的なデータ保存 には適さないが、 理論的には最強の一貫性
  • 容量拡張はジョーク として楽しむユーモア

Hackerたちの意見

常に一貫していて、いつでも利用可能で、パーティショニングにも完璧に耐えられる。まさに、無限のノードにスケールできて、完全にCAPを維持できる唯一のデータベースだね。

それに、めっちゃ速いしね。

ここに完璧なバポウェアのアイデアがあるね。(ダジャレのつもり)今、マーケティングの帽子をかぶってるよ。

いつでも利用可能?明らかに/devがマウントされてない状況を経験したことないね。

企業のDBAは、企業ポリシーに従って/dev/null0と/dev/null1のデバイスを別々に用意するんだ。障害が発生した場合、nullからのシンボリックリンクは承認されたランブックに従って手動で更新されるよ。このランブックは、sarbox監査の一環として毎年再検証しなきゃいけないから、そうしないとnullデバイスは本番環境での使用が認められなくなって削除しなきゃならない。

一台のマシンで瞬時に一貫性があるだけじゃなくて、宇宙全体にグローバルにシャーディングされてるんだ。

/dev/nullが失敗するケースってあるの?

俺はまさにこの目的のために/dev/nullを使ってる。出力がどこかに行く必要があって、そのどこかがそれを処理できるか心配したくないんだ。デプロイ後には、ちゃんと処理できる場所に行く予定だし。だから、/dev/nullはストレージにとって、trueが実行にとってのようなものなんだよ。単にうまくいく。

バグのないソフトウェアなんて夢のまた夢だけど、今までバグに出会ったことがないものの中で、/dev/nullとtrueは確実にトップ3に入るね。

でも、/dev/nullはウェブスケールなの?

そう、/dev/nullはzombo.comみたいなサイトも動かせるんだ。

知らない人のための参考: https://youtube.com/watch?v=b2F-DItXtZs

最高のクラウドプロバイダーが教えたくないこと、データベースには/dev/nullを使って、バックエンドにはhttps://github.com/kelseyhightower/nocodeを。

あのリポジトリの問題やプルリクエスト、何が起こってるの?

データベースを/dev/nullに移してから、ユーザーとのトラブルは一度もなかったよ。

「システムは一つの有効な状態から別の有効な状態に遷移する」ってのは明らかに間違い。システムには一つの状態しかないからね。

学部生の時に学ぶ最初の状態遷移機械の一つは、状態から自分自身に戻る遷移を許可しているから、これが障害になるとは思わないな。

これ、S4ストレージサービスを思い出すな。http://www.supersimplestorageservice.com/ HNで何回か話題になったけど、ここ数年は全然だね。https://hn.algolia.com/?q=http%3A%2F%2Fwww.supersimplestorag...

さらに良いことに、/dev/nullは多くの学術的な定義や教科書の定義の下でシリアライズ可能(ただし厳密なシリアライズではない)。具体的には、これらの定義はトランザクションがあるシリアル順序で実行されるように見えることを要求し、そのシリアル順序に制約を設けない。だから、データベースは時間ゼロで全ての読み取りを行い、空の結果を返し、書き込みは発生した時点で行える(誰が気にするんだ?)。教訓は?リアルタイムの保証を求めろってこと。

残念ながら、RWトランザクションがたくさんあるSQLスタイルのトランザクションでは、うまくいかないことが多いね。

/dev/nullは、究極のストレージレスな機能だね。サーバーレスみたいなもので、PII(個人識別情報)向けで、どこでもデプロイできるんだ!

同じような感じで、これがここ数年でHNで見つけた中で最も面白いことの一つだよ:https://www.linusakesson.net/programming/pipelogic/index.php 過去のHNの投稿もあるよ:https://news.ycombinator.com/item?id=15363029

空集合の公理は、アクセスできない基数公理だよ。