内容
- Lumenで構築しているWebアプリケーションからAzure Storage Tableを使ったときのメモ
- PHPからの接続は、MSの公開ライブラリを使用(以下の方法でライブラリ追加)
- composer require microsoft/azure-storage-table
バージョン
github.com
前準備
ストレージアカウントを作成
- 以下のリンクを参考にして、ストレージアカウントを作成し適当な名前でTableを新規作成
docs.microsoft.com
Azure Storage Tableを確認するためのツールをインストール
- Azure Portalからは現時点ではTableが確認できてない
- MSから公式のクライアントツールが提供されている(Mac版もある)
docs.microsoft.com
ライブラリの使用方法
- 基本的には以下のリンクの方法でTable操作とEntity操作は問題なくいける
docs.microsoft.com
実装ポイント
Entityの検索処理
- Key検索ではなくパーティションを条件に全件検索などするときに、1度に返される結果件数は1000件の制限がある
- 検索結果が1000件より多い場合は、検索結果のcontinuationTokenを使用して次の1000件を取得するような実装が必要になる
サンプルコード
// SampleTableからの検索結果
$entities = [];
do {
$result = $tableClient->queryEntities('SampleTable', $options);
$entities = array_merge($entities, $result->getEntities());
$options->setContinuationToken($result->getContinuationToken());
} while($result->getContinuationToken());
複数Entity操作処理
- 複数行まとめて追加や更新などしたいときには、Batch処理としてまとめて処理することが可能
- 1Entityごとに処理するよりもBatch処理を使用する方がパフォーマンス的にも良い
- 但し、1Entityに対しての複数操作をBatchでまとめるのはやめてというのがドキュメントに記載されている
サンプルコード
$batchOperations = new BatchOperations();
foreach ($records as $rec) {
$entity = new Entity();
$entity->setPartitionKey('hoge');
$entity->setRowKey('fuga');
$entity->addProperty("propKey1", 'propVal1');
$entity->addProperty("propKey2", 'propVal2');
if (count($batchOperations->getOperations()) % 100 === 0) {
$tableClient->batch($batchOperations);
$batchOperations = new BatchOperations();
}
}
if (count($batchOperations->getOperations()) % 100 !== 0) {
$tableClient->batch($batchOperations);
}