失敗から学ぶRDBの正しい歩き方読書会(4)に参加
書いたままほったらかしでブログに投稿するの忘れてました。
9章「強すぎる制約」から読みました次回は11章「見られないエラーログ」からです
強すぎる制約
- RFCに準拠した制約
- RFCに準拠しないアドレスが多いので危険
- ドメインは使わない派
- WEB系の会社では外部キー制約も使わないことが多い
- フレームワークに任せってきり?
- WEB系の会社では外部キー制約も使わないことが多い
- ドメインは使う派
- ER studioなどでER図を作るのに便利
- 巨大なシステムの膨大なテーブル郡に一気に適用できる
- 小ネタ
- postgresの
\D
は何か⇨ 多分describe- 降順の
desc
とかぶる?
- 降順の
- postgresの
外部キーでデッドロック
- 小テーブル更新時に親テーブルに共有ロックがかかる
- id昇順でinsert + 降順でinsertがconcurrentに動くとdeadlock?
DOMAINに似たENUM型
状態をもつCHECK制約
ALTER TABLE emails ADD COLUMN updated_at timestamp without time zone CHECK (updated_at >= now());
- この制約は動くのか?
- now()はいつ評価されるか?
- now()はpostgresqlだとトランザクションの開始時点の時刻を入れるのでbegin以降にアプリ・SQLで呼び出したnowなどで作った日付のデータはinsert可能
- now()が制約実行時に評価されるDBMSだと動かない。
- まさか制約定義時に評価されてるDBなんてないよなぁ
- MySQLは
SET FOREIGN_KEY_CHECKS=0
で外部キー制約を無視できる- MySQLのバックアップが単純なinsert文の集まりなので、これを使う
- これは遅延制約ではなく、FOREIGN_KEY制約を無効化する
バックアップ
- バックアップの種類
- 論理バックアップ
- 商用DBMSだと論理バックアップは使われないことが多い
- postgresqlやmysqlで使われる
- テキストデータなのでデータサイズが大きくなる
- 商用DBMSだと論理バックアップは使われないことが多い
- 物理バックアップ
- Point in time Recovery
- 論理バックアップ
- 指標・目標
- RPO:復旧できるデータ
- バックアップにかかる時間も重要
- RTO:復旧までにかかる時間
- RLO:復旧したいデータ
- RPO:復旧できるデータ
MySQLのバックアップ(バイナリログ)は遅い
文字化けを戻せない可能性がある
- 運用チームは日々非常時のリストア練習が必要
- 正しくバックアップ・リストアできるか
- バックアップ対象は正しいか
- 正しくバックアップ・リストアできるか
レプリケーション
クラウドサービス
- 運用の手軽さ
- 導入の殺し文句
クラウドサービスを使うメリットは、構築がお手軽だからというだけではなく、フルマネージドしてもらうことで、運用を正しく維持できることにもあります。 もしクラウドサービスを検討しているときに、上長に「クラウドサービスは心配」と言われて足踏みしているなら、運用面のメリットも併せて提案してみてはいかがでしょうか。
- クラウドサービス=必ずしも安心ではない
- ファーストサーバーの例
- クラウドベンダがファイルをぶっ飛ばす可能性がある
- マルチクラウド
- どのベンダーでも使える言語で作る必要がある
- Google App Engineなどは使えない
- どのベンダーでも使える言語で作る必要がある
失敗から学ぶRDBの正しい歩き方 (Software Design plus)
- 作者: 曽根壮大
- 出版社/メーカー: 技術評論社
- 発売日: 2019/03/06
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
余談
ブログデザインのサムネ切り取りが素敵だね。
*1:w-wはno conflict