539 文字
3 分
キーバリューストア、ドキュメントストア、グラフデータベース について

キーバリューストア#

キーと値のペアでデータを格納する

  • シンプルな構造: データはキーと値のペアで構成
  • 高速なデータアクセス: キーに基づいてデータにアクセスできる
  • 高いスケーラビリティ: データ量が増加しても簡単に拡張できる
  • シンプルなデータモデル: 構造化データに適している

キーバリューストアの例: Redis, Memcached

キーバリューストアの用途: キャッシュ、セッション管理、設定情報管理

Python

# Redis を使用したキーバリューストアの例
import redis
# Redis クライアントの接続
r = redis.Redis()
# キーと値の設定
r.set("name", "John Doe")
r.set("age", 30)
# キーに基づいて値の取得
name = r.get("name")
age = r.get("age")
# 出力
print(f"Name: {name}") # Name: John Doe
print(f"Age: {age}") # Age: 30

ドキュメントストア#

JSON形式でデータを格納する

  • 柔軟なデータモデル: ドキュメントと呼ばれるJSON形式でデータを格納
  • 半構造化データ: 構造化データだけでなく、半構造化データも格納できる
  • 高速なデータアクセス: キーに基づいてデータにアクセスできる
  • 高いスケーラビリティ: データ量が増加しても簡単に拡張できる

ドキュメントストアの例: MongoDB, CouchDB

ドキュメントストアの用途: コンテンツ管理、ブログ、Eコマース

Python

# MongoDB を使用したドキュメントストアの例
from pymongo import MongoClient
# MongoDB クライアントの接続
client = MongoClient()
# データベースとコレクションの取得
db = client["mydb"]
collection = db["users"]
# ドキュメントの挿入
document = {"name": "John Doe", "age": 30}
collection.insert_one(document)
# ドキュメントの取得
document = collection.find_one({"name": "John Doe"})
# 出力
print(f"Name: {document['name']}") # Name: John Doe
print(f"Age: {document['age']}") # Age: 30

グラフデータベース#

ノードとエッジで構成されるグラフ構造でデータを格納する

  • グラフ構造: ノードとエッジで構成されるグラフ構造でデータを格納
  • 関係性の表現: データ間の関係性を自然に表現できる
  • 複雑なデータ: 複雑な関係性を持つデータの分析に適している
  • 高速なデータアクセス: 関係性に基づいてデータにアクセスできる

グラフデータベースの例: Neo4j, Amazon Neptune

グラフデータベースの用途: ソーシャルネットワーク、レコメンデーションシステム、知識グラフ

Python

# Neo4j を使用したグラフデータベースの例
from neo4j import GraphDatabase
# Neo4j ドライバーの接続
driver = GraphDatabase.driver("bolt://localhost:7687")
# セッションの開始
with driver.session() as session:
# ノードの作成
person = session.run("CREATE (p:Person {name: 'John Doe'}) RETURN p").single()
# 関係の作成
session.run("MATCH (p:Person {name: 'John Doe'}) CREATE (p)-[:LIVES_IN]->(c:City {name: 'Tokyo'})")
# データの取得
result = session.run("MATCH (p:Person {name: 'John Doe'})-[:LIVES_IN]->(c:City) RETURN p, c")
for record in result:
print(f"Name: {record['p']['name']}") # Name: John Doe
print(f"City: {record['c']['name']}") # City: Tokyo

関連記事#

SQLとNoSQLの違い