豪鬼メモ

一瞬千撃

2021-06-01から1ヶ月間の記事一覧

BtrFSのスナップショットによるオンラインバックアップ

止められないオンラインサービスでデータベースを運用している場合、バックアップデータをどうやって作るかには頭を悩ませられる。Tkrzwにはバックアップのための手段がいくつかあるが、ファイルシステムのcopy-on-writeスナップショットを簡単に利用する機…

ハッシュデータベースの互換的フォーマット変更

HashDBMの信頼性向上と性能向上を図るためにデータベースフォーマットを変更したのだが、後方互換性を持たせつつフォーマットを変更するのには苦労した。それをどうやって進めたかという話。ユーザにとっては、すげー地味でどうでもいい話ではあるが、開発者…

各種エラー検出符号のエラー検出率

データベースにエラー検出符号を組み込んだはいいが、実際にどの程度の確率でエラーを検出できるだろうか。単純なチェックサムとAdlerチェックサムとCRCを比較してみた。実際にランダムに文字列を書き換えて、それがきちんと検出できるかどうかの統計を取っ…

圧縮データベースの性能評価

各種圧縮アルゴリズムの性能について前回の記事で検討したが、それを実際にデータベースライブラリに組み込んだ。Tkrzw-0.9.30から利用できる。今回は、実際に英和辞書のデータベースを圧縮してみて、どのくらい効果があるのかを確かめてみる。

圧縮アルゴリズムの事前調査

データベースにレコードを格納する際に可逆圧縮をかけると便利なことがある。 データベースファイルが小さくなり、また入出力のデータ量が減るので早くなることすらある。圧縮アルゴリズムを自分で実装するのは手に余るので、既存の実装を組み込むのが現実的…

マルチシャードのトランザクション

TkrzwにはShardDBMというクラスがあり、シャーディングで分割した複数のデータベースファイルをあたかも単一のデータベースであるかのように透過的に扱うことができる。複数マシンに分散しないローカル環境でも、シャーディングを施すと、並列処理性能や再構…

CRCをデータベースに内蔵する

データベースにレコード単位のCRCを内蔵することで、データが破損した際の検出率を高められるようにした。ハッシュ関数の性能測定とそれを組み込んだ際のデータベースの性能測定もして、実用になることを確かめた。これにより、Synchronizeを呼ばない運用で…

壊れないデータベースと壊れにくいデータベース

前回までの議論で、Tkrzwを追記更新モードで運用した場合、トランザクションのACID特性を満たすデータベースとして機能することを確かめた。Synchronizeした時に状態が決定してファイルに固定され、次にSynchronizeするまでにプロセスが死んだなら、直前にSy…

トランザクションのACID特性と自動リストア機能

Tkrzwにトランザクション機能を実装したので、ACID特性について確認しておきたい。AとCとIは正常系のみを検討するのであれば容易に達成されるのだが、問題はDだ。Durability=耐久性=耐障害性がちゃんと確保されているかどうか、仕様を説明しながら確認して…