Asami 소개: Clojure용 유연하고 다중 플랫폼 그래프 스토어

데이터 관리 분야에서 그래프 데이터베이스는 복잡한 관계를 표현하는 강력한 방법을 제공합니다. Clojure 생태계의 개발자들을 위해 Asami는 스키마 없는 데이터 입력의 편리함과 구조화된 그래프 분석의 강력함 사이의 격차를 메우도록 설계된 유연하고 다중 플랫폼 그래프 스토어로 등장합니다.

Clojure로 작성된 Asami는 Java Virtual Machine (JVM)과 JavaScript 플랫폼(브라우저 및 Node.js 포함) 모두에서 동일하게 실행되도록 설계되어, 풀스택 Clojure 개발에 다재다능한 선택이 됩니다.

핵심 철학 및 목표

Asami는 유연성과 안정성을 우선시하는 여러 핵심 아키텍처 목표를 중심으로 구축되었습니다:

  • 스키마 없는 데이터: 데이터 구조에 대한 사전 지식 없이 데이터를 로드할 수 있어, 빠른 진화와 이질적인 데이터의 손쉬운 수집이 가능합니다.
  • 불변성을 통한 안정성: 저장 시스템은 불변 구조를 활용하여 쓰기 작업이 데이터 손상을 일으키지 않도록 보장합니다.
  • 플러그 가능한 스토리지: Datomic과 유사하게 Asami는 여러 스토리지 백엔드를 지원합니다. 현재 JVM용으로 두 가지 인메모리 시스템과 영구 스토리지를 제공합니다.
  • 오픈 월드 가정: RDF의 의미론을 차용하여 Asami는 오픈 월드 가정으로 동작합니다. 이는 데이터베이스가 정보의 부재를 거짓으로 가정하지 않으며, 스키마 없는 특성을 보완합니다.

주요 기능

핵심 철학을 넘어, Asami는 그래프 중심 워크로드에 맞춘 다양한 기능을 제공합니다:

쿼리 및 실행

Asami는 의도적으로 Datomic의 단순화된 버전과 유사한 쿼리 API를 제공합니다. 성능 최적화를 위해 쿼리 플래너를 포함하여 쿼리를 분석하고 가장 효율적인 실행 계획을 찾으며, 필요에 따라 수동 제어를 위해 이를 비활성화할 수 있습니다.

그래프 분석

Asami는 효율적인 그래프 탐색을 위한 내부 메커니즘을 제공합니다. 주요 기능은 다음과 같습니다:

  • 전이적 폐쇄: 여러 홉에 걸쳐 연결된 모든 노드를 찾는 기능.
  • 서브그래프 식별: 큰 데이터셋에서 특정 서브그래프를 식별하고 추출하는 도구.
  • 전이적 쿼리: 쿼리에서 + 또는 * 표기법을 사용한 전이 속성을 지원합니다(예: “친구의 친구” 찾기).

생태계 통합

Asami는 asami-loom 패키지를 통해 그래프 분석 라이브러리 Loom과 통합됩니다. 이를 통해 개발자는 고급 분석을 수행하고 그래프의 시각적 표현을 생성할 수 있습니다(예: PDF로 내보내기).

Asami 시작하기

설치

Asami는 deps.edn 또는 Leiningen을 통해 프로젝트에 추가할 수 있습니다:

deps.edn

{:deps {org.clojars.quoll/asami {:mvn/version "2.3.4"}}}

project.clj

[org.clojars.quoll/asami "2.3.4"]

기본 사용법

데이터베이스를 생성하고 상호작용하는 것은 간단합니다. 간단한 API를 사용해 인메모리 데이터베이스를 초기화하고 데이터를 트랜잭션할 수 있습니다:

(require '[asami.core :as d])

;; Create and connect
(def db-uri "asami:mem://dbname")
(d/create-database db-uri)
(def conn (d/connect db-uri))

;; Transact data
(def movies [{:movie/title "Explorers" :movie/release-year 1985}])
@(d/transact conn {:tx-data movies})

;; Query data
(def db (d/db conn))
(d/q '[:find ?title :where [?m :movie/title ?title]] db)

업데이트 처리

Asami는 오픈 월드 가정을 따르기 때문에 속성은 기본적으로 다중 아리티를 가집니다. 기존 속성 값을 교체하려면(“폐쇄 월드” 업데이트와 유사) 개발자는 속성 이름에 작은 따옴표 문자를 붙여 표시할 수 있습니다(예: :movie/genre').

고급 스토리지 및 도구

로컬 스토리지

메모리 용량을 초과하는 데이터셋의 경우, Asami는 로컬 디스크 스토리지(asami:local://dbname)를 지원합니다. 로컬 데이터베이스는 엔터티 ID에 키워드 대신 InternalNode 객체를 사용하여 메모리 사용을 최적화하며, 이는 규모가 기가바이트에 이를 수 있는 데이터베이스에 중요합니다.

명령줄 인터페이스 (CLI)

Asami는 GraalVM을 통해 빌드 가능한 CLI 도구를 제공하여 사용자가 EDN 또는 JSON 파일에서 데이터를 로드하고 터미널에서 직접 쿼리를 실행할 수 있게 합니다. 이는 전체 Clojure 애플리케이션을 작성하지 않고도 빠른 데이터 탐색이나 로컬 스토어 관리에 특히 유용합니다.

요약 표: Asami 한눈에 보기

기능 구현
플랫폼 JVM, JavaScript (Node.js, Browser)
스키마 스키마 없음 (로드맵에 선택적 스키마 예정)
스토리지 인메모리, 로컬 디스크 (JVM)
쿼리 스타일 Datomic 유사
분석 서브그래프, 전이적 폐쇄, Loom 통합

Sources