2011-11-30 33 views
7

Giả sử tôi có một lượng lớn tài liệu JSON không đồng nhất (tức là các ánh xạ khóa-giá trị được đặt tên) và phân cấp các lớp (tức là các bộ có tên) mà các tài liệu này được đính kèm. Tôi cần thiết lập cấu trúc dữ liệu cho phép:Có thể sử dụng lưu trữ RDF cũng như một cơ sở dữ liệu hướng tài liệu không?

  1. Hoạt động CRUD trên tài liệu JSON.
  2. Truy xuất tài liệu JSON theo ID thực sự nhanh chóng.
  3. Truy xuất tất cả tài liệu JSON được đính kèm vào một lớp nhất định thực sự nhanh chóng.
  4. Chỉnh sửa cấu trúc phân cấp lớp: thêm/xóa lớp học, sắp xếp lại chúng.

Ban đầu tôi đã đưa ra ý tưởng lưu trữ tài liệu JSON trong cơ sở dữ liệu hướng tài liệu (như CouchDB hoặc MongoDB) và lưu trữ phân cấp lớp trong bộ nhớ RDF (như 4store). 1, 24 sau đó được tìm ra một cách tự nhiên và 3 được giải quyết bằng cách duy trì danh sách ID tài liệu đính kèm cho mọi lớp trong bộ nhớ.

Nhưng sau đó tôi nhận thấy rằng một bộ lưu trữ RDF thực sự có thể làm phần định hướng tài liệu để truy xuất tài liệu JSON bằng ID. Thoạt nhìn, điều này có vẻ đúng, nhưng tôi vẫn quan tâm đến số 23. Có một bộ lưu trữ RDF có thể truy xuất các tài liệu (các nút) tại các tài liệu phục vụ db của tài liệu theo định hướng tốc độ không? Tốc độ này sẽ đáp ứng các truy vấn giống như 3 như thế nào? Tôi đã nghe một chút về kho RDF đang chậm, vấn đề sửa đổi, v.v.

Có bộ nhớ RDF cũng thoải mái cho các đối tượng truy xuất bình thường bằng ID, chẳng hạn như CouchDB không? Sự khác biệt giữa việc sử dụng lưu trữ tài liệu và RDF để lưu trữ, truy xuất và chỉnh sửa các đối tượng giống như JSON là gì?

+0

những gì bạn có nghĩa là do "vấn đề reification"? –

Trả lời

1

Điều gần nhất bạn có thể sử dụng trong cơ sở dữ liệu RDF được đặt tên là biểu đồ. Trong một biểu đồ có tên, bạn có thể đặt một tập hợp các bộ ba RDF. Bộ ba bộ này có thể được khẳng định từ một hoặc nhiều tài liệu RDF tùy thuộc vào nhu cầu của bạn. Giả sử bạn muốn một biểu đồ có tên trên mỗi tài liệu RDF. Bạn có thể đặt tên cho biểu đồ bằng một URI phản ánh vị trí tệp một URL hoặc một IRI. Ví dụ ...

http://yourdomain/files/rdf_file_1 

hoặc

file:///home/myrdffiles/file1 

4store là một cửa hàng quad. Các cửa hàng Quad hỗ trợ các biểu đồ có tên và 4store được thiết kế đặc biệt để xử lý việc này.

Với 4store bạn có thể chạy lệnh sau để khẳng định ba trong một đồ thị được đặt tên:

curl -T your_file.rdf http://your_4store_database/data/http://yourdomain/files/rdf_file_1 

Sau /data/ bạn có thể đặt mã nhận dạng đồ thị (IRI), nơi bộ ba sẽ được khẳng định. Xem 4store sparql server4store Client Libs để biết thêm chi tiết.

Một khi bạn đã dữ liệu của bạn khẳng định, với SPARQL bạn cũng có thể sử dụng tên đồ thị chỉ đạo truy vấn của bạn để đồ thị:

SELECT * WHERE { 
    GRAPH <http://youdomain/files/rdf_file_1> { 
     .... some triple patterns in here .... 
    } 
} 

Hơn nữa, 4store cũng hỗ trợ JSON để bạn có thể lấy lại resultset SPARQL trực tiếp trong JSON.

Nếu bạn quyết định sử dụng 4store bạn sẽ tìm thấy sự ủng hộ quý báu ở đây: http://4store.org/contact

5

Ban đầu, bạn hỏi câu hỏi này cho cơ sở dữ liệu đồ thị (như Neo4j). Đó là lý do tại sao tôi muốn thêm một số ghi chú.

  1. cơ sở dữ liệu đồ thị sử dụng tích hợp indexing cho các nút (và các mối quan hệ) để tra cứu ban đầu nhanh chóng cho các nút gốc của tài liệu của bạn được thực hiện thông qua đó (chỉ số đồ thị bên ngoài hoặc trong)
  2. bổ sung trong danh mục đồ thị các đường dẫn (thực sự là cây để lấy mẫu gốc) có thể được mô hình hóa sạch hơn mà chỉ cần tra cứu khóa-giá trị)
  3. Nếu bạn lập mô hình tài liệu của bạn như cây của các nút có thuộc tính, bạn có thể thực hiện bất kỳ thao tác CRUD đơn giản và phức tạp nào (cũng cấu trúc). tất cả các tài liệu của một "loại" hoặc "lớp" một lần nữa có thể được thực hiện bởi một chỉ số (chỉ mục các nút gốc để gõ) o r trong hạch loại đồ thị
  4. bạn có thể đặt những "loại hoặc lớp" loại-nút vào một hệ thống phân cấp (hoặc đồ thị) mà sau đó có thể được chỉnh sửa bằng cách sử dụng cơ sở dữ liệu đồ thị thông thường API
  5. đi qua đồ thị có thể được thực hiện bằng traversers/ngôn ngữ truy vấn đồ thị tích hợp (ví dụ cypher for Neo4j)
  6. Đang tải dữ liệu phân cấp hoặc có thể được thực hiện bởi các nhà nhập khẩu tùy chỉnh hoặc một nhà nhập khẩu tiểu đồ thị tổng quát hơn (ví dụ GEOFF)
Các vấn đề liên quan