Skip to content

Commit

Permalink
Add an internal document
Browse files Browse the repository at this point in the history
  • Loading branch information
umegane committed Sep 30, 2024
1 parent d581188 commit accc0c6
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions docs/internal/db_startup_sort_improvement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# 不要なソート処理の排除による起動時間の短縮

このドキュメントは、Limestone Log-0.7対応におけうr,不要なソート処理の排除による
起動時間の短縮の作業内容を記載しています。


## 概要

### 現行処理

* 起動時に全WALファイルを読み込み、ソートしてスナップショットファイルを作成している。
* 以下の2種類のWALファイルが存在する。
* コンパクション済みファイル
* ファイル名が`pwal_0000.compacted`
* スナップショット作成と同じロジックで、コンパクション時に作成される。
* 一度もコンパクションを行っていない場合、存在しない。
* 通常のPWALファイル
* ファイル名が`pwal_xxxx`
* ローテーションが行われるとファイル名が、`pwal_xxxx.current_unix_epoch_in_millis`に変更される。
* このPWALファイルのことを、ローテーション済みファイルと呼ぶ。
* コンパクションカタログを参照し、コンパクション済みファイルとして記録されているPWALファイルは、
除外される。
* コンパクションは、ローテーション済みファイルに対して行われるので、除外されるのは必ず
ローテーション済みファイルになる。
* スナップショットファイル
* ファイル名は`snapshot`で固定。
* DB起動時にこのスナップショットにアクセスするためのカーソルを作成し先頭から順次読み込む。

※ この他に、コンパクション時に作成されるテンポラリファイルやバックアップファイル
が存在するが、本ドキュメントの議論とは無関係なので省略する。


### 変更方針

* snapshot作成時の入力ファイルから、`pwal_0000.compacted`を除外する。
* スナップショット作成時のカーソルを`snapshot`ファイルだけでなく、`pwal_0000.compacted`にも
対応するように変更する。
* ファイルオープン時に、`pwal_0000.compacted`が存在する場合は、`pwal_0000.compacted`もオープンする。
* カーソルが次の要素を読むときに、`snapshot``pwal_0000.compacted`の両方から次の要素を取得し、
小さい方の値を採用する。
* この通り実装すると、性能が悪化する可能性があるため、実際には論理的に同等で、もっと効率よく
動作するようロジックを使用する。


## 修正箇所

### datastore::ready()

* ここでスナップショットの入力となるファイルのセットを作成している。
* この処理で、`pwal_0000.compacted`を除外するように変更する。

### cusorクラス

* 現行では、コンストラクタにファイル名を1つだけ指定しているが、2つ指定できるようにする。
* next()メソッドで、2つのファイルから取り出したエントリのうち小さいほうのエントリを返すようにする。

0 comments on commit accc0c6

Please sign in to comment.