Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[LT]Amazon Neptuneで始める初めてのグラフDB ー グラフDBを使う意味を考える ー

[LT]Amazon Neptuneで始める初めてのグラフDB ー グラフDBを使う意味を考える ー

Satoshi Kaneyasu

September 06, 2024
Tweet

More Decks by Satoshi Kaneyasu

Other Decks in Programming

Transcript

  1. 4 Amazon Neptuneで表現したグラフDB API Gateway CPU 最適化 メモリ 最適化 一般

    EC2 ALB ECS オンプレ Tom Sawyerで出力してますが、 発表用に見やすさ重視で加工してます
  2. 7 Amazon Neptuneで表現したグラフDB ある程度の知識があれば、 これを見て新たな気づきが得られる API Gateway CPU 最適化 メモリ

    最適化 一般 EC2 ALB ECS オンプレ ALBって、オンプレとも連携できる かもしれないのか(気づき)
  3. 8 グラフのモデルとクエリ言語 モデル クエリ言語 構造 プロパティグラフ • Gremlin (Apache TinkerPop)

    • Cypher (Neo4j) • ノード(頂点)とエッジ(辺)で構成 • ノードとエッジに任意のプロパティを持つ • ノード: エンティティやオブジェクト • エッジ: ノード間の関係 RDF • SPARQL • トリプル形式(主語、述語、目的語) • 主語: リソースやエンティティ • 述語: 関係やプロパティ • 目的語: 関係の相手やプロパティの値
  4. 9 グラフのモデルとクエリ言語 モデル クエリ言語 構造 プロパティグラフ • Gremlin (Apache TinkerPop)

    • Cypher (Neo4j) • ノード(頂点)とエッジ(辺)で構成 • ノードとエッジに任意のプロパティを持つ • ノード: エンティティやオブジェクト • エッジ: ノード間の関係 RDF • SPARQL • トリプル形式(主語、述語、目的語) • 主語: リソースやエンティティ • 述語: 関係やプロパティ • 目的語: 関係の相手やプロパティの値 今回はプロパティグラフと Gremlinを使用
  5. 11 Amazon Neptuneへのデータ投入 port = 8182 server = '{Amazon Neptuneのエンドポイント}'

    endpoint = f'wss://{server}:{port}/gremlin' graph = Graph() connection = DriverRemoteConnection(endpoint, 'g', transport_factory=lambda: AiohttpTransport(call_from_event_loop=True)) g.addV('compute').property(T.id, '1').property('name', 'EC2').iterate() g.addV('networking & container delivery').property(T.id, '4').property('name', 'ELB').iterate() # エッジ(繋がり)を追加 (ELBとEC2) g.V('4').addE('connect').to(__.V('1')).iterate() 雰囲気だけ感じてください 一見面倒に見えるが、 新たな繋がりを作る時にテーブル定義の 変更が発生しないのが大きい
  6. 13 一部を切り出すこともできる import pandas as pd # EC2とインスタンスタイプの情報を取得し、表形式で表示する ec2_instance_type_info =

    g.V().has('name', 'EC2') \ .as_('ec2') \ .outE('instance type').inV() \ .project('compute_name', 'instance_type_name', 'first_character') \ .by(__.select('ec2').values('name')) \ .by(__.values('name')) \ .by(__.values('first character')) \ .toList() # 結果をDataFrameに変換 df = pd.DataFrame(ec2_instance_type_info) compute_name instance_type_name first_character EC2 一般 m EC2 コンピューティング最適化 c EC2 メモリ最適化 r