2009-06-15 32 views
7

Cách rõ ràng là tải lên hỗ trợ JDBC từ Clojure Contrib và viết một số chức năng để dịch một bản đồ/cấu trúc thành một bảng. Một nhược điểm của điều này là nó không phải là rất linh hoạt; thay đổi cấu trúc của bạn sẽ yêu cầu thay đổi DDL. Điều này ngụ ý việc viết thế hệ DDL (khó khăn) hoặc di chuyển mã hóa bằng tay (nhàm chán).Cách dễ nhất để duy trì bản đồ/cấu trúc trong Clojure là gì?

Những lựa chọn thay thế nào tồn tại? Câu trả lời phải là ACID, loại trừ việc tuần tự hóa thành một tệp, v.v.

Trả lời

5

Sử dụng ứng dụng khách Java của CouchDB và clojure.contrib.json.read/write hoạt động khá tốt cho tôi. Tuy nhiên, bảo đảm tính nhất quán của CouchDB có thể không đủ mạnh cho các mục đích của bạn.

2

Clj-record là việc triển khai bản ghi hoạt động trong clojure mà bạn có thể quan tâm.

7

Một tùy chọn để lưu giữ bản đồ trong Clojure mà vẫn sử dụng cơ sở dữ liệu quan hệ là lưu trữ dữ liệu bản đồ trong một đốm màu đục. Nếu bạn cần khả năng tìm kiếm các bản ghi, bạn có thể lưu trữ các chỉ mục trong các bảng riêng biệt. Ví dụ bạn có thể đọc cách FriendFeed lưu trữ dữ liệu schemaless trên đầu trang của MySQL - http://bret.appspot.com/entry/how-friendfeed-uses-mysql

Tùy chọn khác là sử dụng mô hình Entity-Attribute-Value (EAV) để lưu trữ dữ liệu trong cơ sở dữ liệu. Bạn có thể đọc thêm về EAV trên Wikipedia (Tôi đăng một liên kết nhưng tôi là một người dùng mới và chỉ có thể đăng một liên kết).

Một tùy chọn khác là sử dụng BerkeleyDB cho Java - đó là một giải pháp Java bản địa cung cấp khóa ACID và khóa mức ghi. (Cùng một vấn đề với việc đăng một liên kết).

+1

+1 để hy vọng bạn có thể bắt đầu sử dụng nhiều liên kết đôi khi sớm :-) – mikera

2

Bạn có thể thử một trong các cơ sở dữ liệu biểu đồ dựa trên Java, chẳng hạn như Neo4J. Có thể dễ dàng mã hóa giao diện hashmap để làm cho nó minh bạch một cách hợp lý.

+0

Có một số người sử dụng Neo4j với Clojure, có một cái nhìn ở đây để triển khai trình bao bọc khác nhau: http://wiki.neo4j.org/content/Clojure – nawroth

1

MongoDB và khung công tác congomongo (lein: [congomongo "0.1.3-SNAPSHOT"]) hoạt động cho tôi. Thật tuyệt vời với cơ sở dữ liệu schemaless, và congomongo là khá dễ dàng để có được cùng với. MongoDB thêm một trường _id trong mọi tài liệu để giữ cho nó được xác định, và có sự minh bạch khá tốt giữa các bản đồ clojure và các bản đồ mongo.

https://github.com/somnium/congomongo

9

FleetDB là cơ sở dữ liệu được triển khai trong Clojure. Nó có cú pháp rất tự nhiên để làm việc với bản đồ/cấu trúc, ví dụ: để chèn:

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

Sau đó chọn

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

http://fleetdb.org/

+1

Không cam kết trong 3 năm qua và có vẻ như miền .org có quyền sở hữu mới. https://github.com/mmcgrana/fleetdb – Joanis

Các vấn đề liên quan