コウのTechTech Blog

プログラミング学習中

「達人に学ぶDB設計」を読んだ感想 (物理設計についてアウトプット)

はじめに

「達人に学ぶDB設計」について

リレーショナルデータベースにおける設計についての書籍で、以下2つについて解説されています。

  1. 論理設計
    正規化やER図といった道具を使ったデータモデルの設計のこと。
  2. 物理設計
    サーバーやストレージといった物理的なハードウェアレベルの設計のこと。

    全体的な所感

    私は、SQLや論理設計の基礎的な内容 (正規化とER図)は既に学習していましたが、脱初心者を謳っている本だけあって、全体的に難しく感じました。今後、定期的に見返すことで少しずつDB設計の知識を身につけていきたいと考えております。

良かったところ

  • 全体的に難しかったが、図が豊富に使われていたためイメージがしやすかったこと。
  • 論理設計におけるバッドノウハウとグレーノウハウについて解説があり、実際の設計でやってはいけないことがわかったこと。

学んだこと

2章の「物理設計」の部分が個人的に難しく感じたので、それについてアウトプットします。

物理設計について

物理設計は、論理設計の結果を受けて、データを格納するための物理的な領域や格納方法を決める工程のことです。 大きく分けて5つのステップがあります。

  1. テーブル定義
    論理設計で定義されたものをDBMS内部に格納するためのテーブル (共通点を持ったレコードの集合)の単位に変換していく作業のことです。
  2. インデックス定義
    インデックスとは、ほんの索引のようなもの。SQL文がインデックスをたどることで、テーブルの特定レコードに簡単にアクセスできます。
  3. ハードウェアのサイジング
    サイジングはキャパシティとパフォーマンスの2つの観点から行います。
    ①キャパシティのサイジング
     システムで利用するデータ量とサービス終了時のデータの増加率を見積ること。
    ②パフォーマンスのサイジング
     処理時間とスループット (どれだけたくさん処理できるか)を決めること。
  4. ストレージの冗長構成決定
    複数のディスクに同じデータを書き込んで冗長化し、そのうち一本が壊れても残りのディスクが生きることでデータが保全できるようにすること。この技術がRAIDで、RAIDには何段階かのレベルがあり、信頼性や性能の要件、およびコストをトータルに勘案して決める必要があります。
  5. ファイルの物理配置決定
    データベースに格納される5つのデータファイル、インデックスファイル、システムファイル、一時ファイル、ログファイルをどのディスクに配置するかを考えます。5つのファイルのうち、最もI/O量 (入出力量)が多いのはデータファイルです。データ量が大きいファイルはできるだけ独立したディスク (RAIDグループ)に配置することが望ましいが、コストがかかってしまうという問題が生じます。(トレードオフの関係が成り立つ)

    最後に

    以上、簡単ですが感想と学んだことです。最後まで読んでいただきありがとうございました!

    参考文献

    達人に学ぶDB設計 徹底指南書

「スッキリわかるSQL入門」を読んだ感想 (トランザクションについてアウトプット)

はじめに

「スッキリわかるSQL入門」について (全体的な所感)

初学者用のSQL入門書の位置付けとなっており、講師と生徒が対話していくような形式で学べるので、非常に理解しやすい内容となっております。私自身もprogate等でSQLを簡単に学習した初学者ですが、「理解しやすく、網羅的にSQLを学べた」と感じております。

良かったところ

  • 知識の整理がしやすかった
    • 4大命令 (SELECT, UPDATE, DELETE, INSERT)の共通点や違い、whereとhavingの違いなどがわかりやすく解説されていた。
    • 各章末、付録に演習問題が付いており、アウトプットができる
  • 演習を行う際、環境構築が不要で初学者に優しい点
  • SQLだけでなく、データベース設計についても解説されている点 (最終章)
    今まで聞いたことがある程度だった「正規化」について、理解できるようになった。

    学んだこと

    個人的に第9章「トランザクション」が難しく感じたので、それについてわかったことをまとめようと思います。

    トランザクションについて

    私たちは通常、DBMS (データベース管理システム)に対して複数のSQL文を送る際、1つ以上のSQL文をひとかたまりとして扱う指示を送ることができます。このかたまりをトランザクションと呼びます。 DBMSは、トランザクションを以下のように制御することができます。

  • トランザクションの途中で処理が中断できないように制御する
  • トランザクションの途中で、他の人の処理が割り込めないように制御する
    もし、トランザクションの途中で中断が発生するようならば、DBMSは処理をなかったことにする「ロールバック」を行い、無事に全ての処理が完了したら、トランザクションの確定「コミット」を行います。また、トランザクションの途中で他の人が読み書きできないように、「ロック」をかけることもできます。ただ、ロックをかけるとトランザクションの処理が遅くなってしまうため、どの程度のレベルでロックをかけるのか指定することができます (トランザクション分離レベル)

    最後に

    以上、簡単ですが感想と学んだことです。最後まで読んでいただきありがとうございました!

    参考文献

    スッキリわかるSQL入門 第3版 ドリル256問付き! (スッキリわかる入門シリーズ)

「プロを目指す人のためのRuby入門」を読んだ感想

はじめに

「プロを目指す人のためのRuby入門」について

通称「チェリー本」と呼ばれていて、Rubyの入門書としての位置付けとなっています。ただ、プログラミングの入門書としてはかなり難しいので、最初に簡単なプログラミング(progate等)に触れてから読むことをお勧めします。

全体的な所感、推奨事項

かなりのボリュームで読むのに時間がかかりました。内容も初心者にとっては、難しいトピックも多く、全てを理解しようとすると挫折してしまいます。 特に7章以降はかなり難しく、私自身理解できていない部分も多いです。

チェリー本著者は、難しい箇所に関して、頭の中にインデックス(目次)を付ける読み方を推奨しているため、強弱をつけて読み進めました。

1章から13章まであり、どこに力を入れて学習するべきかYouTubeで解説されてある動画があるので、以下の動画を見てからチェリー本の勉強に着手することをお勧めします。

著者自身が語る「プロを目指す人のためのRuby入門」の効果的な読み方

良かったところ

学んだこと (今後実践したいこと)

  • メソッドの戻り値がよくわからないときは、irb上で簡単なコードを動かしてみる
    →実際のプログラム上でどんな結果が返ってきているのかイメージしやすくなる
  • ネット情報を過信しない
    ネットで見つけた情報で雰囲気をつかみ、それから公式ドキュメントを読んで正確に理解することを意識する
  • 今後、Railsの学習を進めるときは、「自分が今学んでいるのはRailsの知識なのか?Rubyの知識なのか?gemの知識なのか?」を意識すること
    Railsに縛られず、さまざまな場面でRubyを活用できるようになるために

※「第12章 Rubyデバッグ技法を身につける」の記載事項

以上、簡単ですが感想を書かせていただきました!

参考文献