Nếu bạn quan tâm đến lợi ích bạn có thể nhận được từ tính bất biến trong cơ sở dữ liệu hoặc ít nhất là cơ sở dữ liệu cung cấp ảo ảnh về tính bất biến, hãy kiểm tra Datomic.
Datomic là một Cơ sở dữ liệu được phát minh bởi Rich Hickey trong liên minh với Think Relevance, có rất nhiều video giải thích kiến trúc, mục tiêu, mô hình dữ liệu. Tìm kiếm thông tin, một cụ thể có tiêu đề Datomic, Cơ sở dữ liệu như một giá trị . Trong các bản tin, bạn có thể tìm thấy một bài phát biểu mà Rich Hickey đã đưa ra tại hội nghị euroclojure năm 2012. confreaks.com/ideo/2077-euroclojure2012-day-2-keynote-the-datomic-arch architecture-and-data-model
Có một cuộc nói chuyện trong vimeo.com/53162418 được định hướng phát triển hơn.
Đây là một cái khác từ stuart halloway at.pscdn.net/008/00102/videopl platform/kv/121105techconf_close.html
- Datomic là một cơ sở dữ liệu về các sự kiện trong thời gian, được gọi là datum, trong 5 tuples [E, A, V, T, O]
- E Entity id
- Một tên thuộc tính trong thực thể (có thể có không gian tên)
- Giá trị V của thuộc tính
- T ID giao dịch, với điều này bạn có khái niệm về thời gian.
- O Một thao tác xác nhận (giá trị hiện tại hoặc hiện tại), từ chối (giá trị quá khứ);
- Sử dụng định dạng dữ liệu của riêng nó, được gọi là EDN (Ký hiệu dữ liệu mở rộng)
- Giao dịch là ACID
- Sử dụng datalog làm ngôn ngữ truy vấn, wich là khai báo dưới dạng truy vấn đệ quy SQL +. Các truy vấn được biểu diễn với cấu trúc dữ liệu và được mở rộng bằng ngôn ngữ jvm của bạn, bạn không cần sử dụng clojure.
- Cơ sở dữ liệu được tách rời trong 3 dịch vụ riêng biệt (quy trình, máy móc):
- Giao dịch
- Lưu trữ
- Công cụ truy vấn.
- Bạn có thể riêng biệt, quy mô từng dịch vụ.
- Nó không phải là nguồn mở, nhưng có phiên bản miễn phí (như trong bia) của Datomic.
- Bạn có thể nêu một lược đồ linh hoạt.
- bộ thuộc tính đang mở
- thêm thuộc tính mới bất cứ lúc nào
- không có sự cứng nhắc trong định nghĩa hoặc truy vấn
Bây giờ, vì thông tin được lưu trữ dưới dạng sự kiện trong thời gian:
- tất cả những gì bạn làm là thêm sự kiện vào cơ sở dữ liệu, bạn không bao giờ xóa chúng (trừ khi luật pháp yêu cầu)
- bạn có thể lưu trữ mọi thứ mãi mãi Công cụ truy vấn, sống trong máy chủ ứng dụng dưới dạng cơ sở dữ liệu trong bộ nhớ (đối với các ngôn ngữ jvm, các ngôn ngữ không phải jvm có quyền truy cập thông qua API REST.)
- bạn có thể truy vấn theo thời gian trong quá khứ.
Cơ sở dữ liệu là một giá trị và là một tham số cho công cụ truy vấn, QE quản lý kết nối và bộ đệm. Vì bạn có thể xem db là một giá trị và cấu trúc dữ liệu không thay đổi trong bộ nhớ, bạn có thể hợp nhất nó với một cấu trúc dữ liệu khác được tạo từ các giá trị "trong tương lai" và chuyển nó sang QE & truy vấn với các giá trị trong tương lai, mà không thay đổi cơ sở dữ liệu thực tế .
Có một dự án nguồn mở từ Rich Hickey, được gọi là codeq , bạn có thể tìm thấy nó trong github Datomic / codeq, mở rộng mô hình git và lưu trữ các tham chiếu đến các đối tượng git trong cơ sở dữ liệu không có dữ liệu và bạn thực hiện các truy vấn về mã của mình có thể xem một ví dụ về cách sử dụng datomic.
Bạn có thể nghĩ về datomic như một ACID NoQuery, với các datum bạn có thể mô hình hóa các bảng hoặc tài liệu hoặc Kv-store hoặc đồ thị.