【Webパフォーマンスチューニング】データベースチューニングメモ
RDBMSが備える一貫性とは何か?
→ ASID特製のうのひとつ
処理の前後で整合性が保たれる性質
銀行の振り込み時、振込先口座への入金処理飲み失敗した場合、振り込み元の口座のお金がなくなってしまうことになる。この時に振り込み処理自体を取り消すことで、処理の前後での整合性が保たれる。
また、振り込み元の残金が負の値になってしまうこともデータが正しい状態になっておらず、一貫性が保たれなくなってしまう。このような時にも振り込み処理自体を取り消し、処理の前と同じような状態に戻す(ロールバック)することで、一貫性を保つ。
MySQL: シンプルなクエリを素早くこなすやつ。スピードタイプ
PostgreSQL: 高機能で複雑なクエリを作ることができるやつ。パワータイプ
RDBMSは複数のサーバーにデータを分散させるのが難しい。つまりスケールアウトが難しいのか。
スケールアウトが難しいのか。
それはなぜか?
複数のサーバー間で一貫性を保つのが難しいため。
一貫性を緩めてデータを非同期的に一致させることで読み取り専用DBを作ったりと言った方法でスケールアウト(処理を分散)する方法ががある。
RDBMSは一貫性を提供。
トランザクションが進行中の場合は操作中のテーブルをロックして他のクエリを実行できないようにテーブルをロックする。
一貫性を持つRDBMSだけでは負荷を捌ききれず、スケールが追いつかない時に登場し始めたのがNoSQLなのか。
NoSQLとは?
高速な処理を提供するDBMS。
メモリ領域にデータを保存したりできるDBもあり、RDBMSであまり変化しないデータの参照をNoSQLに移譲したり、LRUというアルゴリズムによる一定期間使われていないデータを自動で削除する機能を持ったDBもある。
保存するデータの方が違ってくるのもNoSQLの特徴。
memcached → key : value = 1 : 1
mongoDB → ドキュメント(JSONとか)
この辺の記事でまとめてた。
NoSQL早くて便利だけど、一貫性を担保するためにアプリケーション側で考慮しなければならない問題が多かった。
そこで登場したのがNewSQL!
NewSQLとは?
一貫性を持つRDBMSとスケーラビリティの問題を解決したNoSQLの両方のメリットを兼ね備えたスーパーDB!
MySQL互換のTiDB
PostgreSQL互換のCockroachDB (G...!)