🗄️

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

2024/04/03に公開

キーバリューストア

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

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

キーバリューストアの例: 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の違い

https://zenn.dev/btc/articles/240402_mysql_nosql

Discussion