· ストレージとデータベース · 6 min read
Cloud Datastore を使った NoSQL データベースの活用法
Google Cloud の Cloud Datastore を活用して、スケーラブルで柔軟な NoSQL データベースソリューションを構築する方法を解説します。

Cloud Datastore とは
Cloud Datastore は、Google Cloud が提供する完全マネージド型の NoSQL データベースサービスです。高いスケーラビリティと柔軟性を備え、構造化データの格納や取得に適しています。
Cloud Datastore の主な特徴
- 自動スケーリング: トラフィックの増減に応じて自動的にスケールします。
- 高可用性: データの複製と分散を自動的に行い、高い可用性を実現します。
- 強力なクエリエンジン: インデックスを使用した効率的なクエリ実行が可能です。
- ACID トランザクション: 複数のオペレーションを一つの単位として実行できます。
データモデリング
Cloud Datastore でのデータモデリングは、エンティティ、プロパティ、キーの概念に基づいています。
エンティティとプロパティ
エンティティは、一つのオブジェクトや項目を表します。各エンティティは、一つ以上のプロパティ(属性)を持ちます。
from google.cloud import datastore
client = datastore.Client()
# 新しいエンティティの作成
task = datastore.Entity(client.key('Task'))
task.update({
'description': 'Buy groceries',
'created': datetime.datetime.utcnow(),
'done': False
})
# エンティティの保存
client.put(task)
キーとインデックス
各エンティティは一意のキーを持ち、これによって識別されます。また、効率的なクエリ実行のために、プロパティにインデックスを設定できます。
データの取得と更新
基本的なクエリ
query = client.query(kind='Task')
query.add_filter('done', '=', False)
results = list(query.fetch())
トランザクション
with client.transaction():
key = client.key('Task', 123)
task = client.get(key)
task['done'] = True
client.put(task)
Cloud Datastore の活用シーン
Cloud Datastore は、多様なビジネスシーンで活用できる柔軟な NoSQL データベースです。以下に、具体的な活用例を紹介します。
1. ユーザープロフィール管理
ソーシャルメディアアプリや E コマースサイトでのユーザープロフィール管理に最適です。
def create_user_profile(client, user_id, name, email):
key = client.key('UserProfile', user_id)
entity = datastore.Entity(key=key)
entity.update({
'name': name,
'email': email,
'created_at': datetime.datetime.utcnow()
})
client.put(entity)
# 使用例
create_user_profile(client, 'user123', 'John Doe', 'john@example.com')
2. 製品カタログ
大規模な製品カタログの管理に活用できます。カテゴリや属性による柔軟な検索が可能です。
def add_product(client, product_id, name, category, price):
key = client.key('Product', product_id)
entity = datastore.Entity(key=key)
entity.update({
'name': name,
'category': category,
'price': price,
'added_at': datetime.datetime.utcnow()
})
client.put(entity)
# 使用例
add_product(client, 'prod456', 'Smartphone X', 'Electronics', 799.99)
3. リアルタイムアナリティクス
ゲームアプリや IoT デバイスからのリアルタイムデータ分析に活用できます。
def log_event(client, event_type, device_id, data):
key = client.key('Event')
entity = datastore.Entity(key=key)
entity.update({
'event_type': event_type,
'device_id': device_id,
'data': data,
'timestamp': datetime.datetime.utcnow()
})
client.put(entity)
# 使用例
log_event(client, 'temperature_reading', 'device001', {'temp': 25.5, 'humidity': 60})
スケーラビリティの活用
Cloud Datastore の自動スケーリング機能を最大限に活用するためのポイントを紹介します。
- シャーディングキーの適切な選択: データを均等に分散させるためのキー設計が重要です。
- 読み取りと書き込みの分散: 特定のエンティティグループへのアクセス集中を避けます。
- キャッシング戦略の導入: Memcached などと組み合わせて、読み取り負荷を軽減します。
# キャッシュを活用したデータ取得の例
def get_product_with_cache(client, memcache_client, product_id):
cache_key = f'product:{product_id}'
product = memcache_client.get(cache_key)
if not product:
key = client.key('Product', product_id)
product = client.get(key)
if product:
memcache_client.set(cache_key, product, time=3600)
return product
セキュリティの考慮事項
Cloud Datastore を使用する際は、以下のセキュリティ対策を考慮することが重要です:
- IAM(Identity and Access Management): 適切な権限設定を行い、データへのアクセスを制御します。
- 暗号化: 保存データの暗号化を有効にし、機密情報を保護します。
- VPC サービスコントロール: データアクセスを VPC 内に制限し、外部からの不正アクセスを防ぎます。
パフォーマンスの最適化
- インデックスの適切な設定: 頻繁に使用されるクエリに対してカスタムインデックスを作成します。
- バッチ操作の利用: 大量のデータ操作時はバッチ処理を使用して効率化します。
- 非正規化: 必要に応じてデータを非正規化し、クエリのパフォーマンスを向上させます。
料金
Cloud Datastore の料金は、ストレージ使用量、読み取り/書き込み操作の回数、ネットワーク使用量に基づいて計算されます。
主な料金項目
- ストレージ: $0.115/GB/月
- エンティティ読み取り: 100,000 回あたり$0.038
- エンティティ書き込み: 100,000 回あたり$0.115
詳細な料金情報は、Google Cloud の公式ドキュメントで確認できます。
まとめ
Cloud Datastore は、スケーラブルで柔軟な NoSQL データベースソリューションを提供します。適切なデータモデリングとセキュリティ対策を行うことで、高性能で安全なアプリケーションを構築できます。
NoSQL データベースについてさらに学びたい方には、以下の書籍がおすすめです:
これらの書籍では、Cloud Datastore を含む Google Cloud のデータベースサービスについて詳しく解説されています。