-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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つのファイルから取り出したエントリのうち小さいほうのエントリを返すようにする。 |