9

明らかな方法は、Clojure Contrib から JDBC サポートをロードし、マップ/構造体をテーブルに変換する関数を作成することです。これの欠点の 1 つは、あまり柔軟性がないことです。構造を変更すると、DDL の変更が必要になります。これは、DDL 生成を記述する (難しい) か、手動で移行をコーディングする (退屈) ことを意味します。

どのような代替案が存在しますか? 回答は ACID である必要があり、ファイルへのシリアル化などを除外します。

4

6 に答える 6

10

FleetDB は Clojure で実装されたデータベースです。マップ/構造体を操作するための非常に自然な構文があります。たとえば、次を挿入します。

(client ["insert" "accounts" {"id" 1, "owner" "Eve", "credits" 100}])

次に選択します

(client ["select" "accounts" {"where" ["=" "id" 1]}])

http://fleetdb.org/

于 2011-01-11T14:05:26.153 に答える
8

依然としてリレーション データベースを使用している Clojure でマップを永続化するための 1 つのオプションは、マップ データを不透明な BLOB に格納することです。レコードを検索する機能が必要な場合は、インデックスを別のテーブルに格納できます。たとえば、FriendFeed が MySQL の上にスキーマレス データを保存する方法を読むことができます - http://bret.appspot.com/entry/how-friendfeed-uses-mysql

もう 1 つのオプションは、Entity-Attribute-Value モデル (EAV) を使用してデータベースにデータを格納することです。ウィキペディアで EAV の詳細を読むことができます (リンクを投稿したいのですが、私は新しいユーザーであり、リンクを 1 つしか投稿できません)。

もう 1 つのオプションは、BerkeleyDB for Java を使用することです。これは、ACID とレコード レベルのロックを提供するネイティブ Java ソリューションです。(リンクを投稿する場合と同じ問題)。

于 2009-06-16T16:45:17.503 に答える
6

CouchDBのJavaクライアントライブラリを使用しclojure.contrib.json.read/writeており、私にとってはかなりうまく機能します。ただし、CouchDBの一貫性の保証は、目的に対して十分に強力ではない可能性があります。

于 2009-06-16T12:28:10.820 に答える
2

Clj-recordは、clojureのアクティブレコードの実装であり、興味があるかもしれません。

于 2009-06-15T16:45:40.627 に答える
2

Neo4Jなどの Java ベースのグラフ データベースのいずれかを試すことができます。ハッシュマップ インターフェイスをコーディングして、適度に透過的にするのは簡単かもしれません。

于 2009-07-08T15:55:07.050 に答える
1

MongoDB とそのフレームワーク congomongo (lein: [congomongo "0.1.3-SNAPSHOT"]) は私にとってはうまくいきます。スキーマレス データベースとの相性は抜群で、congomongo との連携は非常に簡単です。MongoDB はすべてのドキュメントに _id フィールドを追加して識別を維持し、clojure-map と mongo-map の間には非常に優れた透過性があります。

https://github.com/somnium/congomongo

編集: 今日は MongoDB を使用しません。トランジットを使用することをお勧めします。バックエンド (Postgres など) がサポートしている場合は JSON を使用し、よりコンパクトなバイナリ エンコーディングが必要な場合は msgpack コーディングを使用します。

于 2011-01-09T01:07:43.893 に答える