豪鬼メモ

一瞬千撃

マルチレコードトランザクション機能

Tkrzwでマルチレコードトランザクションを実装してみたという話。シングルレコードトランザクション、つまり同一のレコードに複数の操作をアトミックに行う機能は従来から実装されていた。それを複数のレコードでもできるようにしたのがマルチレコードトランザクションだ。前回の記事で載せたプレゼン資料を書いていた途中で、そういやTODOリストに入れていたなと思い出して、実装してみた。

結論としては、複数レコードが関わるトランザクションがかなり簡単に書けるようになった。特にマルチレコードCASが便利なので使ってもらいたい。
f:id:fridaynight:20210531180839p:plain

続きを読む

はじめてのDBM

データベースライブラリTkrzwの改良を地道に続けて、そろそろ1.0にしようかなと思っているところだ。日本語の資料がないとなかなか日本では使ってもらえないということで、書いてみた。データベース関連のアルゴリズムの基礎や検索エンジンなどの事例についても書いたので、ご覧いただきたい。
docs.google.com

I/Oのバッチ化によるDBの性能改善

前回までの一連の実験で、ダイレクトI/Oを使ってデータベースを運用する際の性能特性が見えてきた。そこで洗い出された課題を解決し、おそらくは最善の効率に到達した。性能評価の結果としては、ダイレクトI/Oを使ったデータベースの性能を、書き込みが9.3倍、読み込みが6.3倍も高速化することが確かめられた。まるで某コンピュータメーカーの広告のようではないか。Tkrzw-0.9.20から有効なので、ぜひお手元でお試しいただきたい。
f:id:fridaynight:20210525024040p:plain

続きを読む

各種データベース実装と各種ファイル実装の性能比較

dependency injectionで任意のファイル実装を利用できるTkrzwだが、ダイレクトI/Oのファイル実装を各種のデータベースに組み込んだのが前回までの物語である。Tkrzw 0.9.18をリリースしたので、お試しいただきたい。今回は、完成した実装の性能を測定する。ダイレクトI/Oがどのくらい実用になるのか知りたいだろう。キャッシュの活用が重要概念になってくる。
f:id:fridaynight:20210520131253p:plain

続きを読む

DBMのダイレクトI/O対応

ファイルシステムのキャッシュ機構を介さずにストレージデバイスに対して直接入出力を行う機能をダイレクトI/Oなどと言ったりするが、それをデータベースライブラリTkrzwからも使えるようにした。LinuxWindowsで使える。その前提として、アドレスとサイズがアラインメントされたメモリ空間とのストレージデバイスの間でのデータ転送に限定するブロックI/Oを実現する必要があった。その苦労話と性能評価を語ろう。
f:id:fridaynight:20210509165013p:plain

続きを読む

alloc_alignedの野良実装

バイス等とやり取りするためや、他の様々な理由で、ある数の倍数にアラインメントされたメモリ領域を動的に確保する必要が生じることがある。mallocフレームワーク上でそれを行うのが標準C++のalloc_alignedという関数なのだが、それはすべての処理系でサポートされているわけではない。そんな場合に自前のフォールバックがあると便利だ。
f:id:fridaynight:20210508114528j:plain

続きを読む

TkrzwのWindows対応 その弍

データベースライブラリTkrzwWindows対応の実装が一通り完了した。前回C++標準のstd::fstreamによるダミーのファイル入出力を使ってWindows対応した話をしたが、今回はそれを本番の真面目な実装に置き換える。メモリマップIOと位置指定IOの実装と性能評価についても論じる。
f:id:fridaynight:20210505165144p:plain

続きを読む

TkrzwのWindows対応 その壱

やるやる言ってやってなかったデータベースライブラリTkrzwWindows対応を始めた。実装は何段階かに分けて行うが、とりあえず全機能が動くというところまでは来た。ここで作業の方針と進捗についてメモっておこう。
f:id:fridaynight:20210503060155p:plain

続きを読む