RAM内のDBMSとは何か、どのようにデータを効率的に保存するか





サルバドール・ダリ、 記憶の永続性の崩壊 1952-1954。 キャンバスに油彩。



みなさんこんにちは。 RAM内のデータのDBMSに既に慣れている人もいるかもしれませんが、念のため、 リンクを使用してそれらの一般的な説明を見つけることができます。 つまり、このようなDBMSはデータを完全にRAMに保存します。 これはどういう意味ですか? データを検索または更新する要求を送信するたびに、ハードドライブをバイパスしてRAMにアクセスするだけで、操作は実行されません。 RAMはどのディスクよりもはるかに高速であるため、これは良いことです。 そのようなDBMSの例はMemcachedです。



ちょっと待ってください、しかし、そのようなDBMSで再起動またはマシンが故障した後にデータを回復する方法は? RAMにのみデータを保存するためにDBMSがマシンにインストールされている場合、忘れてしまう可能性があります。電源を切ると、データはトレースなしで消えます。



RAMにデータを保存する利点と、 MySQLPostgresなどの実績のあるDBMSの信頼性を組み合わせることができますか? もちろん! パフォーマンスに影響しますか? あなたは驚かれることでしょうが、違います!



RAM内のデータのDBMSを満たし 、安全性を確保します: RedisAerospikeTarantool



あなたは、これらのDBMSがデータの安全性をどのように保証するのかと尋ねるかもしれません。 秘Theは、すべてのデータが引き続きRAMに保存されることですが、各操作はディスク上のトランザクションログにも書き込まれます。 以下の画像をご覧ください。







このスキームから最初に得られることは、DBMSが常にジャーナルエントリを作成するという事実にもかかわらず、クエリの実行速度がまったく低下しないことです。 すべてのリクエストがRAMに直接アクセスされるため、パフォーマンスが同時に低下することはありません。 素晴らしいニュースです! :-)そして、データの更新についてはどうですか? 各更新(トランザクションと呼びます)はRAMで行われるだけでなく、ディスクに書き込まれます。 遅いドライブで。 これは問題ですか? 次の画像を見てみましょう。







トランザクションは常にログの最後に書き込まれます。 このアプローチのプラスは何ですか? ドライブはかなり高速です。 クラシックハードドライブ(HDD)について話すと、最大100 MB / sの速度でファイルの最後にデータを書き込むことができます。 信じられない? Unix / Linux / macOSのコマンドラインからこのテストを実行します。



cat /dev/zero >some_file
      
      





, some_file



. , , : 100 .



, , , 100 /. , - 100 /! (100 /) (100 000 000 /) , , ; .



(SSD), - . (1—10 ) (200—300 /) : - . .



, , , 100 /. ? . , 100 , ! , . , , :



https://gist.github.com/danikin/a5ddc6fe0cedc6257853.



:



  1. , .
  2. - , , .


? -, , ( , ). , , , , , , .



-, , , , , , . , .



B/B+-, . , - . B/B+-, InnoDB MySQL Postgres.



, , — LSM-. , , , . , , RocksDB, LevelDB Vinyl. :







: , , , , — , , : , .



P. S.



— , — , , . . — . . , , , .



? , . , ( , , ).



, , . , , , . , ? , .



: ? .



All Articles