CS/DB

Labeled Property Graph (LPG)

dragonhyeon 2025. 1. 7. 18:47
728x90
반응형

Labeled Property Graph (LPG)

Labeled Property Graph (LPG) 는 그래프 데이터베이스에서 사용되는 데이터 모델의 한 종류로 노드 (Node), 관계 (Relationship), 레이블 (Label), 속성 (Property) 을 활용하여 데이터를 구조화합니다. LPG 는 관계형 데이터베이스보다 직관적으로 데이터 간의 관계를 표현할 수 있어 네트워크, 소셜 미디어, 지식 그래프, 추천 시스템 등 다양한 응용 분야에서 사용됩니다.

Relationship 은 그래프 이론에서의 Edge (간선) 와 같은 것을 지칭합니다. 그래프 이론에서의 Edge 는 관계의 물리적 연결선을 의미하지만 LPG 에서는 의미적 관계를 더욱 강조하기 위해 Relationship 이라는 표현을 선호합니다.
  • 노드 (Node)
    • 데이터의 객체 (혹은 엔티티) 를 나타냅니다.
    • 각 노드는 레이블을 가질 수 있습니다. (선택)
      • 하나의 노드가 여러 개의 레이블을 가질 수도 있습니다.
      • ex. :Person, :Product, :City, ...
    • 각 노드는 키-값 쌍으로 이루어진 속성을 가질 수 있습니다. (선택)
      • 동일한 레이블을 가진 노드도 서로 다른 속성 집합을 가질 수 있습니다.
        • ex.
          • (:Person {name: "Kim", age: 31})
          • (:Person {name: "Na"})
          • (:Person {age: 31, location: "Seoul"})
      • ex. {name: "Kim", age: 31}
  • 관계 (Relationship)
    • 노드 간의 관계를 표현합니다.
    • 항상 방향성을 가집니다. (필수)
      • 방향성이 없는 관계가 필요한 경우 예를 들어, A -[KNOWS]-> BB -[KNOWS]-> A 를 각각 생성하여 무방향 관계처럼 동작하게 할 수 있습니다.
    • 각 관계는 타입 (Type. Label 과 같은 개념) 을 가집니다. (필수)
      • 각 관계는 한 개의 타입만 가질 수 있습니다.
        • 여러 타입의 관계를 표현해야 한다면, 별도의 관계로 분리하여 모델링하는 것이 일반적입니다.
          • ex.
            • (:Person {name: "Kim"}) -[:FRIEND]-> (:Person {name: "Na"})
            • (:Person {name: "Kim"}) -[:COLLEAGUE]-> (:Person {name: "Na"})
      • ex. [:LIVES_IN], [:FREINDS_WITH], ...
    • 각 관계는 키-값 쌍으로 이루어진 속성을 가질 수 있습니다. (선택)
      • 동일한 타입을 가진 관계도 서로 다른 속성 집합을 가질 수 있습니다.
        • ex.
          • :Person {name: "Kim"}) -[:KNOWS {since: 2020}]-> (:Person {name: "Na"})
          • :Person {name: "Kim"}) -[:KNOWS {intensity: "close"}]-> (:Person {name: "Na"})
      • ex. {"since": "2025-01-02"}
LPG 는 스키마리스 (Schema-less) 이므로 유연하게 데이터를 저장할 수 있지만, 일관성을 유지하기 위해 표준 속성 집합을 정의하는 것이 좋습니다.
Neo4j 는 Labeled Property Graph (LPG) 를 데이터 모델로 사용하는 대표적인 그래프 DBMS 입니다. 쿼리 언어로 Cypher 를 사용합니다. GQL 은 그래프 데이터베이스의 ISO 표준 쿼리 언어로, Cypher 는 Neo4j 의 GQL 구현입니다.
NoSQL 의 한 종류인 그래프 데이터베이스의 쿼리 성능은 관계형 데이터베이스와 달리 전체 데이터 크기가 아닌 쿼리 처리 시 참조되는 데이터 양에 비례하는 특징이 있습니다.

네이밍 규칙

  • LPG 는 대소문자를 구분하며, 네이밍 스타일은 일관성 있게 유지하는 것이 중요
  • 레이블은 PascalCase, 타입은 UPPER_CASE, 속성 키는 snake_case 또는 camelCase 권장
  • 속성 키에 큰따옴표는 필요하지 않지만, 특수문자나 공백이 포함된 경우 (권장하지 않음) 는 필요
  • 예약어와 특수문자 사용은 피하거나, 필요한 경우 특별한 구문으로 처리
728x90
반응형

'CS > DB' 카테고리의 다른 글

Neo4j DBMS 구조와 포트별 역할  (2) 2025.04.10
데이터베이스 간단 정리  (1) 2025.01.07