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

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

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

### Flareとは？
グリー株式会社が開発されているオープンソースの分散KVS。

### ビットマップ、ベクターとは？
画像の種類のこと。
すべての画像は①ビットマップ画像（ラスター画像）と②ベクトル画像（ベクター画像）のどちらかに分類される。
ビットマップ画像（ラスター画像）は点の集まりで作られている。写真や絵画は基本的にビットマップ画像。
ベクトル画像（ベクター画像）は点と線の情報が数値化された画像。ロゴなどはこちらで作られることが多い。

[ビットマップとは？ベクターとは？画像形式の意味と違いを図解](https://saruwakakun.com/design/photoshop/image)

### Redisとは？
NoSQLの1つ。
メモリ上で動作するため、非常に高速（WEB業界ではあまり使われていないっぽくて、ゲーム業界が主戦場）
その他の特徴は下記サイトで分かりやすくまとめてくれている。

[Redisの特徴と活用方法について](https://www.slideshare.net/yujiotani16/redis-76504393)

### ActiveMQとは？
Apache ActiveMQのこと。
これを使用することで、アプリケーションが非同期型のメッセージキューイングを行うことができるようになる。メッセージを非同期にやり取りするため、一時的にシステムがダウンしても影響を受けずに処理を再開させることが可能。
MQはメッセージキューイングの略。（メッセージキューイングって何？）

### メッセージキューイングとは？
異なるソフトウェア間でデータを送受信する手法の一つで、直接データを渡すのではなく一旦第三者のソフトウェアに預けることで、送信側も受信側も好きなタイミングで送受信処理をおこなうことができるようにする方式。電子メールでよく使用されている。
下のサイトが一番分かりやすかった。

[メッセージキューイング  【 MQ 】 ](http://e-words.jp/w/%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%AD%E3%83%A5%E3%83%BC%E3%82%A4%E3%83%B3%E3%82%B0.html)

### MongoDBとは？
NoSQLの1つ。
詳しくは下記記事参照。（これ超分かりやすかった！）

[やってみようNoSQL　MongoDBを最速で理解する](https://qiita.com/Brutus/items/8a67a4db0fdc5a33d549)

### GridFSとは？
MongoDBでサイズの大きなファイルを扱うための仕組みのこと。
MongoDBでは１６MBまでしかドキュメントに保存できないため、動画データなどの大容量データを保存する際には分割する必要が出てくる。それを行ってくれる。

### Hadoopとは?
大規模データの蓄積・分析を分散処理技術によって実現するオープンソースのミドルウェア
詳しくは[分散処理技術「Hadoop」とは](https://oss.nttdata.com/hadoop/hadoop.html)を参照。

### HBaseとは？
NoSQLの1つ。
Hadoopのエコシステムを構成するOSSの1つで、Hadoopの分散ファイルシステムであるHDFS上に構築する分散データベース。端的に言えば、HDFS上に構築するデータベース。

[HBaseの概要とアーキテクチャ](https://thinkit.co.jp/article/11882)

### Apache Zookeeperとは？
分散環境運用サポートサービスを提供するコーディネーションエンジン。
ここなかなか言葉むずいけど、簡単にいうと分散アプリケーションを構築する際に設定などを楽にしてくれるソフトウェアのこと（もしかしたら認識間違ってるかも）

[オープンソースの運用管理・運用自動化／Apache ZooKeeperとは](https://www.ossnews.jp/oss_info/Apache_ZooKeeper)

### ストレージエンジンとは？
データベースを操作する際の基礎となる部品のこと。
（ここからもしかしたら違うかも）
ストレージエンジンはPostgreSQLもMySQLでも使われる概念だが、MySQLの「テーブルごとにストレージエンジンを使い分けられる」という特徴から、基本的にはMySQLの文脈で使われることが多い（イメージ）

[徹底比較!! MySQLエンジン](https://thinkit.co.jp/free/article/0608/1/1/)

### サブクエリとは？
クエリ内のクエリのこと。もしくはそれを利用したSQLのこと。
コールバック関数的なイメージでOK
[サブクエリ入門](https://qiita.com/aki-takano/items/6df0513ccc5aa40a075a)

### 大規模アプリケーション時のデータベースで意識すると良いこと。
- トランザクション、JOIN、サブクエリはなるべく避ける
1つのSQLで1つのテーブルにしかアクセスしないようにすることで、データの分割を容易にする。（拡張性を持たせる）

- ユーザ向けと調査用でサーバを分ける
ユーザー用ではトランザクション、JOIN、サブクエリは避けるが、調査時はそんなことしてられない時が多い。
なので、データベースをレプリケーションしておいて、調査用の重いSQLはそこで実行するようにする。
でもレプリケーションする＝お金かかる（ことが多い）から、実際にレプリケーションするかどうかは場合によりけり。

- O/Rマッパを避ける
特定のフレームワークのO/Rマッピングを使用すると、可読性が下がる。
（そのフレームワークを触ったことが無い人からすると、どんな処理をしているかわからないから）
生のSQL文を書こう！（スラスラ書けるようになる！）
[O/Rマッピングは百害あって一利なし！](https://qiita.com/gomiryo/items/6d448c500749f91242d2#orm%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88-1)

### Gangliaとは？
分散コンピューティング環境をターゲットに開発されたモニタリングシステム。
各ノードのCPU利用率やメモリ使用量などを見たりできる。
日本語訳が「大脳基底核」ってなんかシャレオツ。

### カーディナリティとは？
テーブルにカラムがあるとして、カラムに格納されているデータの種類がどのくらいあるのか(カラムの値の種類の絶対値)を、カーディナリティという。インデックスを貼るべきかどうかの基準にもなる。

インデックスを作る時の目安は特定のカラム値を指定した時に、全体の 5%程度に絞り込めるだけのカーディナリティがあることである。とのこと。意識する！

[カーディナリティについてまとめてみた](https://qiita.com/soyanchu/items/034be19a2e3cb87b2efb)


# 今日の一言
ようやっと本の前置き部分を読み終えた！
GREEのデータベースエンジニアの人が、実際にどういった構成や製品使ってたかとかも書いてあってすごい勉強なる。ええ本。

あとは、今日は夕方から勉強し始めたけど、やっぱり朝の方が集中できるなと改めて感じた！
できるだけ朝勉強習慣つけていこ！