インメモリデータベースでサーバが落ちたらデータはどうなる? インメモリとカラム型データベースの可能性を調べる(その3)
サーバのメインメモリ上にあるデータは、サーバの電源が落ちれば消えてしまいます。だからこそ、現在のデータベースではデータを失わないように永続化の手段としてデータベースやログをハードディスクに保存しています。
データベースをメインメモリ上に保持するインメモリデータベースでは、万が一サーバの電源が落ちるなどの物理的障害が発生したらどうなるのでしょう。メモリの内容が消えるのと同時にデータベースを失ってしまったり、整合性が失われるなどの問題が発生してしまう心配はないのでしょうか。
結論としては、インメモリデータベースでもつねにログをハードディスクやフラッシュドライブなどのストレージへ書き込んで、サーバの物理的障害に備えています。インメモリデータベースであっても、メインメモリだけに依存しているわけではないのです。
パーシスタンスレイヤでデータの永続化
例として、SAP HANAが備えている「パーシスタンスレイヤ」について見ていきましょう。パーシスタンスレイヤは、永続化装置としてのストレージと、そこに保存されているログ、データベースのスナップショットで構成されます。
HANAのデータベースエンジンは、メモリ上のデータベースに対するデータの追加や削除、更新などを行うたびに、その内容をログに書き込んでいます。
このログがあれば、万が一サーバの電源が落ちてメモリ上のデータベースが失われても、ログの中身を最初から再実行することで最後に実行されたトランザクションの時点までデータベースを復旧できます。
ただしずっとログをとり続けているとログが大きくなりすぎて復旧にかかる時間がどんどん長くなっていきます。そこで定期的に「セーブポイント」を設定し、その時点でのデータベースのスナップショットを保存。ログをいったんクリアします。
データベースをまるごと保存するのは時間がかかりますが、データごとにタイムスタンプが付加されているので、セーブポイント以前のタイムスタンプが付いているデータだけをバックグラウンド処理で保存することにより、データベースを止めることなくスナップショットをとることができます。
つまりインメモリデータベースであっても、永続性の命綱としてストレージへ書き込むことは不可欠なのです。そしてログの書き込みに時間がかかってしまうようでは、せっかくのインメモリデータベースの性能の足をひっぱることになります。インメモリデータベースの性能を十分発揮させるにも、結局は高性能なストレージが必要なのです。
TimesTenではデータのレプリカも可能
オラクルのインメモリデータベースであるTimesTenでも、ログやスナップショットをストレージに書き込むことでデータを永続化する方法が採用されています。
さらにTimesTenではクラスタ機能を備えるソフトウェアと組み合わせることでノードのレプリカを二重三重に作ることができます。万が一特定のノードの電源が落ちたり故障した場合にはレプリカ先のノードへ自動的にフェイルオーバーするため、より信頼性の高いインメモリデータベースの運用を可能にしているのです。
次はカラム型データベースについて
ここまで、従来のデータベースをメモリ上に載せた状態とインメモリデータベースの違いとして、インメモリデータベースはCPUやメモリアドレスのレベルで最適化されていること、そしてインメモリデータベースであってもデータの永続化にはストレージを利用していることなどを見てきました。
次の記事では、カラム型データベースについて見ていきましょう。SAPのHANAは、カラム型データベースでありながら、集計や分析だけでなくトランザクションも高速に処理すると説明されています。それはどのような仕組みで実現されているのでしょうか。
≫次の記事「カラム型データベースはなぜ集計処理が高速で、トランザクションが苦手なのか。インメモリとカラム型データベースの可能性を調べる(その4)」に続く。
インメモリとカラム型データベースの可能性を調べる
- インメモリデータベース、カラム型データベースは使い物になるのか? インメモリとカラム型データベースの可能性を調べる(その1)
- 従来のデータベースをメモリに載せるだけではだめなのか? インメモリとカラム型データベースの可能性を調べる(その2)
- インメモリデータベースでサーバが落ちたらデータはどうなる? インメモリとカラム型データベースの可能性を調べる(その3)
- カラム型データベースはなぜ集計処理が高速で、トランザクションが苦手なのか。インメモリとカラム型データベースの可能性を調べる(その4)
- カラム型データベースでトランザクション処理を実現するカラクリとは? インメモリとカラム型データベースの可能性を調べる(その5)
あわせて読みたい
カラム型データベースはなぜ集計処理が高速で、トランザクションが苦手なのか。インメモリとカラム型データベースの可能性を調べる(その4)
≪前の記事
従来のデータベースをメモリに載せるだけではだめなのか? インメモリとカラム型データベースの可能性を調べる(その2)