IO量が大幅に減少(9.23GB→0.22GB)インメモリデータベース:フラッシュメモリを従来型データベースで使用するのはインメモリデータベースではない。従来型データベースでメモリキャッシュにデータすべてを乗せてもインメモリデータベースではない。データストレージをおもにメインメモリ上で行うデータベース管理システム。データの永続性は?:データは常にメモリ上で読み書きされるが、変更ログはディスクに記録される。ログの書き込み速度を早くすることが重要。あらゆる変更はログでキャプチャされ、処理コミット時にディスクに書き込まれ、定期的なセーブポイントでバックグラウンドでディスクに自動保存される。インメモリデータベースは1990後半のTimesTenが最初くらい。SAPのHANAがインパクトがあった。SQLServer2014でインメモリ(インメモリOLTPエンジン)。Oracleは12CでIn-MemoryOption(2014/7)。(ようやくだったのか!)下記に記載した通り三者三様。特性を見極めて使うこと。共通実装:データは常にメモリ。(行指向のほうが更新は早いが、特殊な仕組みを使う。Mover(たぷるむーばーとよむ):データの更新はメモリ上の行指向DeltaStoreにいったん書き込まれる。(いったんメモリ上に受ける。)ある程度たまるか時間がたつと移す。(Reoranize→Rebuild。)Oracleは変更ログをもとに。可用性:これまではPrimary、Secondary、共有ディスク。これだとディスクからメモリへの読み込みが時間がかかる。そのためインメモリDBのクラスタ構成では、DBレプリケーション機能を利用してメモリの状態まで同期して切り替える。ディスクも共有ディスクにする必要はない。Serviceguard。ソフトが検知し自動的にセカンダリを立ち上げる。HANA(えすえーぴーはなとよむ):ネイティブなインメモリデータベースを列指向で。ネイティブでインメモリだけで作っている。コミット時にログ書き込み。ログはフラッシュストレージなど高速なところへ。起動時にデータファイルからメモリに読み込み。カラム単位とパーティショニング単位で並列処理(一つのノードで複数のコアに割り当てて並列処理)。カラム単位の圧縮(列指向だと圧縮しやすい。同じような性質のデータが固まる)、集計テーブル不要で工数削減。E7プロセッサに最適化。Cashe有効に使う仕組み。size64mbに合わせる。(メモリよりキャッシュのほうが早い。メモリ100ns、CPU15ns。ぃーとよむ)による並列演算。SUSE(すぜーとよむ)、RedHatで使える。SQLServer2014:OLTP高速化(更新処理高速化)重視。一つのDBに共存できる。メモリ最適化テーブルにすると起動時にデータをメモリに読み込みインデックスを毎回作成。インデックスに対する変更はトランザクションログに書かない。ディスク上に存在しない。起動時に毎回生成して書き込まないので高速化。テーブルの情報も書かない指定をすることもできる。(一時テーブルとして使う。シャットダウンすると消える。)ログもデータも書かれないこともできる。SQLServerへの完全統合。したい場合にはメモリ最適化列ストア、列指向。早くなる仕組みとしてロック、ラッチをやめている(変わった実装)、ストアドプロシージャはインタプリタ的に実行されるが、オーバヘッド減らすためにコンパイルした形でも動かせる。インデックスはインメモリ特化のものも。新しく実装されているので、既存のものがすべてそのまま動くとは限らない。若干制限があるので十分検討の上で。(コマンドが使えないとか。