ストレージについて

ファイルストレージ、ブロックストレージ、オブジェクトストレージについての理解をまとめます

(参考記事）

https://aws.amazon.com/jp/compare/the-difference-between-block-file-object-storage/

https://cloud.google.com/discover/object-vs-block-vs-file-storage?hl=ja

https://www.netapp.com/ja/blog/difference-between-nas-and-san/

https://www.buffalo.jp/topics/select/detail/ssdhdd.html

# そもそもストレージとは？
ストレージとはデータを長期保存するための装置や仕組みのことを言う。

メモリはデータを一時的に保管したりするもので、一時実行するプログラムや計算中のデータを保存したりする。しかし、電源を切ったら保存していたデータは消えるため、長期記憶にはストレージを用いる。

# ストレージの代表例

HDD(Hard Disk Drive): 大容量、安価、遅い
 - 用途：写真や動画などの大容量データ

SSD(Solid State Drive): 小型、高価、早い 
 - 用途：OSやアプリなどの起動ドライブ

フラッシュメモリ(USB、SDカード): 携帯可能、読み書き可能
 - 用途：画像や音楽などを外出先でコピーして持ち運ぶなど。しかし寿命もあるので注意が必要

これらの物理的な機器だけではなく、どのようにデータを管理するかという観点で、論理的ストレージ分類も存在する。それらについて見ていく

# ファイルストレージ

これはデータをファイルとディレクトリという形式を使用して保存するもの。普段使用しているファイルやフォルダ構造などがこれにあたる。ファイルストレージでは、ファイル名やディレクトリ名などを含めたそのファイルへのパスが固有IDとして使用される。
### メリット
- シンプルで使用しやすい
- 権限の管理などが得意。複数のユーザーがファイルを見ることができたり、管理者だけ見ることができるようにしたりなどの管理がしやすい

### デメリット
- スケールアウトがしづらく、ストレージ容量を増やすには新しいデバイスを追加する必要がある（NAS等で一部対応可能だが、限界もある）
- データの量が増えれば増えるほど、検索が遅くなる(ファイルシステムを経由して検索するので、メタデータの処理を必要とし、ファイルの数が多ければ多いほど性能が落ちる)
- クラウドネイティブには不向き：高可用性・分散処理を前提とするシステムには適さない場合もある

# ブロックストレージ
ブロックストレージはデータを固定長(指定したサイズ)の単位で保存、管理するシステム。ファイルシステムのような階層構造はなく、フラットなストレージ環境にデータがブロック単位で保存され、インデックスなどを使用して高速にアクセスすることができる

### メリット
- ブロック単位でのアクセスが可能で、データベースやOSのI/O処理に最適（ファイル全体を書き換える必要がない）
- クラウド環境ではスケーラビリティが高く、簡単にブロックを増やせる
- メタデータ（属性や所有者など）が限定されており、無駄なオーバーヘットが少ない

### デメリット
- 高価。最終的に使用しなくても、確保したストレージ分に対して料金がかかる
- メタデータがないので、非構造化データの処理、特にメタデータの柔軟な管理が必要な場合は不向き

# オブジェクトストレージ
オブジェクトストレージはデータをオブジェクトという単位で保存する方式。以下の三つの要素で構成されている
- データ本体（ファイルなどの実データ）
- メタデータ（属性情報・カスタムタグなど）
- ユニークID（キー）（アクセスのための一意な識別子）

フラットなネームスペース上に保存され階層構造を持たない。しかし、AWS S3やGCSなどのサービスでは`exam/ex00/file.txt`などのようにプレフィックスで`exam/ex00/`などとすることで、仮想的に階層構造に見せかけている
フラットな構造に保存しているという点ではブロックストレージと似ているが、メタデータの量や、そもそもオブジェクトストレージはAPIベースでアクセスするのに対して、ブロックストレージはストレージレベルのアクセスで、上位にファイルシステムなどを載せる必要がある
### メリット
- スケーラビリティが極めて高く、自動で分散、冗長化される
- カスタムメタデータを付与することができるので、画像や動画、ログなどの管理に向いている（この柔軟性がビッグデータや非構造化データに強い理由）
- HTTPベースでAPI経由のアクセスがしやすく、マイクロサービスやデータレイクに向いている

### デメリット
- I/Oの遅延があり、データベースや仮想マシン用途には不向き
- 基本的にオブジェクト全体の読み書きになるため、部分更新ができない（作成後にオブジェクトを変更することはできない。変更を加える必要がある場合は、再作成してアップロードする必要がある）
# それぞれの違いのまとめ
| 項目 | ファイルストレージ | ブロックストレージ | オブジェクトストレージ |
|------|---------------------|---------------------|--------------------------|
| データ構造 | ファイル＋フォルダ構造 | ブロック（固定長）単位 | オブジェクト（データ＋メタデータ＋ID） |
| アクセス手段 | ネットワークファイル共有（例：NFS, SMB） | OSレベルのディスクアクセス | API（RESTなど） |
| スケーラビリティ | 低い（拡張には制限） | 中程度（手動拡張） | 高い（自動分散） |
| メタデータ | 一般的（ファイル名・所有者） | 最小限（システム制御用） | 柔軟に付与可能（自由に設定） |
| 適した用途 | ファイル共有／文書管理 | データベース／OSドライブ | バックアップ／メディア／ログ／クラウドネイティブ |
| 代表例 | AWS EFS, GCP Filestore | AWS EBS, GCP Persistent Disk | AWS S3, GCP Cloud Storage |
| 変更・編集 | 一部編集・追記可能 | 一部編集可能（ブロック単位） | 基本的に全体再アップロード |

| 提供方式 | ストレージ形式 | 主な用途 | 具体例 |
|-----------|----------------|----------|--------|
| **NAS**<br>(Network Attached Storage) | **ファイルストレージ** | - ファイル共有（オフィス文書、画像）<br>- 複数人の同時アクセスが必要な共有ドライブ | - 社内共有ドライブ<br>- エンジニアのコードリポジトリの保存<br>- 監視カメラの映像ログなど |
| **SAN**<br>(Storage Area Network) | **ブロックストレージ** | - 高性能なI/Oが求められるシステム<br>- データベースや仮想マシンのディスク | - Oracle DB のストレージ基盤<br>- VMwareの仮想マシンイメージ（vmdkなど） |
| **オブジェクトストレージ**<br>(S3等) | **オブジェクト形式** | - 非構造化データの保管<br>- ログ・画像・動画・バックアップ<br>- クラウドアプリケーションとの統合 | - AWS S3 による画像CDN<br>- データレイクのバックエンド<br>- IoTログ収集・分析基盤 |

# 終わり
ストレージなどあまり知らないことが多いので面白かった。あまり意識せずに使用たり、設定することが多かったが、それぞれのメリット、デメリットを把握しておく方がいいと感じた