個人で作ってるWebアプリ(Node/Express.js)に使うDBを選定中でして、Azure Table Storageをお試しで使ってみたら中々良さげだったのでざっくり紹介。
Azure Table Storage
Microsoft Azure Storageの一種で、ドキュメント型データストレージサービスです。
所謂、NoSQL(Mongo)的な感じのJSON構造で保存/管理するタイプです。
良かった所
1. 安全/堅牢
これは何より大切です。
商用実績も多数ある堅牢サービスを個人レベルで使える、この安心感は大きいと思います。
オンプレ(自宅)管理は外部へ公開するとなると、セキュリティ設定、証明書発行、ドメイン取得などなど...
大掛かりになってしまい、設定漏れリスクや時間やお金が掛かります。
バックアップや冗長性の確保なども考えると、キリがありません。
セキュリティ
デフォルト状態でHTTPS接続
/非公開
の設定になっており、うっかり公開したままと言う事故も防げます。
公開する際のアクセス制御
/IP制限
/CORS
も、ポータルサイトから簡単に設定可能です。
可用性
最低設定でもデータセンター内ノード間での冗長構成となります。
他にも、データセンター内AZ間での構成や、複数データセンター間での構成も、設定1つで何時でも変更可能です。
(AZ: Availability Zone ... データセンター内はAZと呼ばれる区画毎に、電力供給/ネットワーク/冷却装置/消防設備などのインフラが隔離されている。一部のAZが停電や出火により万一落ちても、他AZは問題なく稼働が続けられる構造)
簡単/便利
各言語プラットフォームで公式ライブラリが充実しており、Mongoライクな操作が可能になっています。
公式ドキュメントも一通り揃っているので、それをなぞれば基本すんなり行けます。
アプリケーションサーバーとの接続も接続文字列
と呼ばれるキーをコピペするだけなので至極簡単。
なお、私はセッション管理にexpress-session
を使っているのですが、Table Storageでセッションストアが可能になるライブラリがありました。
これは嬉しい。
各言語向けライブラリ
- Node.js
- Ruby
- PHP
- Java
- Python
- .NET
- F#
- C++ (Windows)
- C++ (Linux)
余談
Cosmos DBはTable Storageの上位互換です。
Table Storageは各種Storageサービス(Blob/File/Table/Queue)内の1つですが、Cosmos DBはデータベース専門となっています。
SQL/Mongoから選択可能で、高速応答と世界中のデータセンターに冗長構成を撒ける鉄壁さがウリなのですが...
最低構成でも、3分に1回程度の頻度で自動バックアップが走る為、たとえ数MBしか保存しておらず、1ヶ月殆どアクセスしなかったとしても、ほぼ720時間分の料金が発生します。
私はその事を知らず、数日間お試しで使ったまま2ヶ月間放置して、10900円の請求が来る羽目に...
それがTable Storageへ移行するきっかけでした。
これは流石に、完全な商用前提サービスだと感じました。
3. 安い
いくらキラキラした能書きを並べられても、お値段が張ってしまっては採用出来ませんからね...
普通に使う分であれば、かなり安く済みます。
料金の例
大体、1ヶ月で缶コーヒー1本分くらいの料金で運用可能です。
-
汎用v1
/LRS
/Standard
/Hot
での構成- 容量単価 -
7.84円/GB
- アクセス(読み書き)単価 -
0.04円/10000件
- 容量単価 -
良くなかった所
あまりヨイショしすぎてもアレなので、不満点も上げておきます。
リソース管理
Blob Storageなどはポータルサイト上でリソース編集可能なのですが、Table Storageは既存キーの値を編集する事は可能でも、キーを新規に増やす事は出来ません。
Azure Storage Explorerと言う専用ツールか、各種プログラム経由でしか増やせません。
それが少し手間だと思いました。
が、ドキュメント毎にキーを好き勝手増減できてしまう仕組み上、あえて対応してないのかも...?
2019/02/12追記
何と、ポータルサイト上でキーの新規追加が可能になっていました。
これは便利。
まとめ
最初はTable "Storage"という名称に迷ってしまったのですが、使ってみたら中身は普通のNoSQLデータベースでした。
高性能でお財布にも優しく、中々優秀だなぁと感じました。
皆さんも、ご検討されてみては如何でしょうか。