Asamiの紹介: Clojure向け柔軟でマルチプラットフォームなグラフストア

データ管理の分野では、グラフデータベースは複雑な関係を表現する強力な方法を提供します。Clojureエコシステムの開発者にとって、Asamiは、スキーマレスデータ入力の容易さと構造化されたグラフ分析の力の間のギャップを埋めるように設計された柔軟でマルチプラットフォームなグラフストアとして登場します。

Clojureで書かれたAsamiは、Java Virtual Machine (JVM) と JavaScript プラットフォーム(ブラウザーと Node.js を含む)で同一に動作するように設計されており、フルスタック Clojure 開発のための汎用的な選択肢となっています。

コア哲学と目標

Asamiは、柔軟性と安定性を優先するいくつかの重要なアーキテクチャ目標を中心に構築されています:

  • スキーマレスデータ: 構造の事前知識なしでデータをロードでき、これにより急速な進化と異種データの取り込みが容易になります。
  • 不変性による安定性: ストレージシステムは不変構造を利用し、書き込み操作がデータ破損を引き起こさないことを保証します。
  • プラグ可能なストレージ: Datomic と同様に、Asami は複数のストレージバックエンドをサポートします。現在、JVM 用の 2 つのインメモリシステムと耐久性のあるストレージを提供しています。
  • オープンワールド仮定: 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 の概要

機能 実装
Platforms JVM, JavaScript (Node.js, Browser)
Schema スキーマレス (ロードマップにオプションのスキーマあり)
Storage インメモリ, ローカルディスク (JVM)
Query Style Datomic-like
Analytics サブグラフ, トランジティブクロージャ, Loom 統合

Sources