【ふくだ学習録】データベースエンジニア養成読本を読んで part2【2日目】

# ふくだ学習録とは？
ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。

# データベースエンジニア養成読本を読んで

### I/Oとは？
「入出力」のこと。認識間違ってた（恥）

### ストライピング構成とは？
RAID0の別名。
そもそもRAIDはRedundant Array of Independent Diskの略号。
複数のディスクにデータを分散し冗長性デ−タを付加して格納し、ディスク障害のときにユーザデータの再生を可能とするディスクアレイのこと。

### SSDはなぜ早いのか？HDDとの違いは？
HDDは針を回してデータ読み書きするけど、SSDはそんな事しないから早い。
詳細はこのサイトが一番わかりやすそうだった。（ざっくりしか見てないけど）
[SSD (Solid State Drive ) ってどんなドライブ？構造と仕組みを知る](https://www.jtp.co.jp/techport/2016-12-14-001/)

### インメモリデータベースとは？
名前の通り、メモリ上にデータベースをのせているもの。
なのですごく処理（I/O）は早いが、障害発生時などはデータが消えてしまうデメリットもある。
下記のアマゾンの記事が分かりやすかった。（アマゾン神）
[インメモリデータベースとは何ですか?](https://aws.amazon.com/jp/nosql/in-memory/)

### ディザスタリカバリとは？
災害復旧のこと。ディザスタリカバリ（Disaster Recovery）の略。
[用語集｜DR/ディザスタリカバリ](https://www.idcf.jp/words/dr.html)

### データの保守性に一番関わるフェーズとは？運用時？
設計時。運用が始まった後に、データベース構造を変更するのはすごく大変。
だからこそ、サービス開始前の設計時に、保全対策をしっかり行っておかなくてはならない。
（なんとなくそう思ってたけど、改めて意識する！いい設計できるようにならねば）

### データベースエンジニアは性悪説で動くべし
データベースへの攻撃は、外部からされることだけでなく、内部犯行もあり得る。
外部攻撃に対しての対策はもちろんのこと、内部犯行の可能性も考えて、権限付与に対してはある程度の性悪説を持って考えなければいけない。
もちろん自分自身もしっかりとした倫理観を持って行動しなければならない。（データベースエンジニアはマスター権限を持っている場合が多いから）

### データウェアハウスとは？
データウェアハウスはデータベースの利用形態の1つ。
企業の業務において発生したさまざまな情報を時系列に保管したデータベースのこと。
[データウェアハウス（DWH）とは | 定義・データベース（DB）との違い](https://boxil.jp/mag/a1657/)

### Apacheとnginxの違い、どうやって使い分けるか
超ざっくりいうと
Apache
- マルチプロセスモデル（接続ごとにプロセスをフォーク≒コピーする）なのでメモリがいっぱいになりやすい
- 負荷が低く、早期または簡易的なセットアップが必要な場合。
- 同時アクセス数が小さく、単純にリクエスト数が多いような場合。

nginx
- ノンブロッキングI/Oと非同期のイベント駆動アーキテクチャを採用することで、同時接続数がApacheの10～100倍ぐらいある
- 負荷が高く、スケーラビリティが要求されるような場合。
- 静的ページに同時多数のアクセスが想定されるような場合。

下記２記事が分かりやすかった。
[NginxとApacheの比較 〜 ウェブサーバー直接対決 〜](https://kinsta.com/jp/blog/nginx-vs-apache/)
[ApacheとNginxについて比較](https://qiita.com/kamihork/items/49e2a363da7d840a4149)

### Apacheとnginxの共存
Apacheとnginxは共存して使用する方法もある。
大規模サイトなど、Webサーバーが多数並べられる構成の時に共存して利用することが多い。
共存方法はnginxをリバースプロキシとして、Apacheの前に立てる方式。
イメージは同時接続数に強いnginxが表側にたって、複雑な処理はApacheにリクエスト出すイメージ。（で合ってると思う）

[Nginxのリーバスプロキシ化（Apacheと共存）](https://qiita.com/mike-ayumu/items/5f255bab07606759a8e5)

ちなみにnginx→varnish→apacheって構成にすると高速になるらしい。
varnishはキャッシュサーバーとして使う。
[Varnishに関していろいろ調べて試してみた](https://qiita.com/TsuyoshiUshio@github/items/e3902d33e3867368e695)
[nginx→varnish→apacheが高速らしい！](https://www.i-enter.co.jp/blog/blog/2014/04/22/nginx%E2%86%92varnish%E2%86%92apache%E3%81%8C%E9%AB%98%E9%80%9F%E3%82%89%E3%81%97%E3%81%84%EF%BC%81/)

### LVSとは？
Linux Virtual Serverの略称。
Linux上でLayer4負荷分散装置と同様の機能を実現するためのソフトウェア。
まぁロードバランサみたいなみたいなもの。（って認識）

[LVSとは](https://www.designet.co.jp/faq/term/?id=TFZT)
[LinuxでL4のロードバランサを簡単に作る手順](https://qiita.com/shnagai/items/b9b1940cdaf9a17b4088)

### mod_phpとは？
Apacheのモジュール。
Apacheはモジュールを追加することでアプリケーションサーバの役割を持てるようになる。
mod_phpというモジュールを追加することで、PHP用のアプリケーションサーバにできる。

[PHPの「アプリケーションサーバー」について](https://qiita.com/andrew954/items/2fa78e9f7f83bd8cb9ac)

### memchachedとは？
分散メモリキャッシュサーバの1つ。
データベースへの問い合わせ結果を一時的にキャッシュすることで、データベースへのアクセス回数を減らし、動的なウェブアプリケーションの高速化やスケーラビリティの向上のために利用される。
ただしデータのレプリケーションが行えないなどのデメリットがある。（メモリにキャッシュさせているから障害発生時などもだいぶ弱そう）

[memcachedを知り尽くす](https://gihyo.jp/dev/feature/01/memcached/0001)
[本当は怖いMemcached](https://qiita.com/taruhachi/items/a844bf373623991873ff)

### データベースクラスタとは？
PostgreSQL独自の用語。1つのデータベースを、複数のサーバーや仮想サーバー上に構築するシステムを指す。

### トラブルシューティング時に重要な心構え
- 相関関係と因果関係を区別して、根拠のない結論付けを防ぐ
- 仮説的に優先順位をつけ、効率よく検証を進める
- 計測可能なものはできるだけ記録して、変化を見過ごさない 

>  相関関係と因果関係を区別して、根拠のない結論付けを防ぐ  

これめちゃめちゃ刺さった。トラブルシューティング以外の場面でも超大事。

### KVSとは
KVS（Key-Value Store）は、KeyとValueを組み合わせる単純な構造からなるデータストア。
NoSQLの1ジャンル。

[KVS（Key-Value Store）とは](https://qiita.com/uenohara/items/23eb6ee1259f8a927445)

# 今日の一言
備忘録が用語集みたいになってしまったし、学習スピードがまだまだゆっくり。
まだまだまだまだ知らん単語がいっぱいある。
でも知らない単語少なくなって用語の記載が無くなってきた頃には、学習スピード（読了までの時間）は早くなってるはずなので、一個一個地道に調べていく。
それはそうとベローチェのツナサンド美味い。