2012-06-18 20 views
6

Tôi đang làm việc với tập dữ liệu Jena đơn giản, chỉ có một tệp RDF ~ 30 MB duy nhất được nhập. Là một phần của ứng dụng, tôi đang cố gắng cho phép người dùng truy vấn biểu đồ mặc định (hoặc biểu đồ có tên) và chèn các bộ ba kết quả từ truy vấn vào biểu đồ có tên mới. Đối với điều này, tôi đang sử dụng câu lệnh CONSTRUCT để tạo thành tập kết quả của bộ ba trong biểu mẫu RDF, sau đó đặt các bộ ba này vào một mô hình mới (sử dụng QueryExecution.execConstruct()) và thêm mô hình này vào tập dữ liệu. Điều này xuất hiện để hoạt động trở lại, vì tập dữ liệu nhận được một nút đồ thị mới và kích thước đĩa của thư mục cơ sở dữ liệu TDB tăng kích thước.Làm thế nào để giảm kích thước của Bộ dữ liệu Jena được hỗ trợ bởi TDB?

Sự cố ở đây xuất hiện khi tôi cố xóa biểu đồ có tên khỏi tập dữ liệu. Sử dụng phương thức removeNamedName ("graphName") của Dataset, tôi xóa mô hình khỏi tập dữ liệu. Các truy vấn trong tương lai trên tên mô hình đó cho thấy rằng nó đã được loại bỏ thành công. Tuy nhiên, kích thước đĩa của thư mục cơ sở dữ liệu TDB vẫn giữ nguyên kích thước, ngay cả sau khi đồng bộ và bỏ. Lúc đầu, tôi nghĩ rằng có lẽ cơ sở dữ liệu chỉ đánh dấu không gian của các tệp đã xóa là miễn phí sao cho nó có thể bị ghi đè khi dữ liệu mới xuất hiện, nhưng điều này dường như không đúng. Nếu tôi xóa một biểu đồ có tên và thay thế nó ngay lập tức sau khi chạy chương trình tương tự, thư mục dường như không phát triển, nhưng nếu tôi thêm một biểu đồ mới có tên và xóa nó trong cùng một lần chạy, kích thước thư mục sẽ lớn hơn và mô hình loại bỏ không giải phóng bộ nhớ, có nghĩa là sau khi một vài chạy thư mục cơ sở dữ liệu là năm hoặc mười lần kích thước ban đầu của nó mà không giữ bất kỳ dữ liệu nhiều hơn nữa.

Bất kỳ thông tin chi tiết hoặc trợ giúp nào sẽ tuyệt vời, cảm ơn bạn một lần nữa.

Trả lời

6

Bạn có thể hiểu rõ hơn bằng cách yêu cầu trên danh sách gửi thư của Jena ([email protected]) nhưng tôi sẽ cố gắng trả lời. Bạn cũng có thể xem trang TDB Architecture trên trang web.

TDB lưu trữ dữ liệu bằng cách xây dựng những gì nó gọi là Bảng nút ánh xạ các nút RDF thành các số nguyên 64 bit và ngược lại. Sau đó nó xây dựng các chỉ mục riêng biệt bằng cách sử dụng các số nguyên ID này cho phép nó thực hiện các lần quét cơ sở dữ liệu khác nhau cần thiết để trả lời các truy vấn SPARQL.

Thêm dữ liệu có khả năng thêm mục nhập vào cả hai cấu trúc này (Bảng nút và chỉ mục) nhưng việc xóa dữ liệu chỉ xóa dữ liệu khỏi các chỉ mục. Do đó, theo thời gian, Bảng Nút sẽ tiếp tục phát triển ngay cả khi bạn xóa dữ liệu cũ vì nó không xóa khỏi Bảng Nút.

Những lý do thực tế đằng sau nghệ này có hai:

  1. Các ID số nguyên phần mã hóa tập tin offsets để ID để tra cứu Node là do một tập tin nhanh chóng quét như dữ liệu bị xóa, bạn không thể xóa các bộ phận của Node bảng mà không cần phải viết lại tất cả các ID nút tức là bảng nút trong ID -> Hướng nút là một tệp tuần tự (giúp chèn nhanh)
  2. Khi dữ liệu bị xóa, bạn không biết liệu Nút được sử dụng nhiều lần mà không thực hiện quét toàn bộ cơ sở dữ liệu. Vì vậy, bạn không thể biết liệu một mục Node Table có bị xóa ngay từ đầu hay không. Cách duy nhất khả thi để thực hiện việc này là triển khai một lược đồ tính toán tham chiếu đầy đủ, điều này sẽ làm tăng thêm độ phức tạp cho hệ thống và làm chậm thêm và xóa.

Disclaimer - Tôi là một người có duyên về dự án Jena nhưng chưa bao giờ làm bất cứ công việc cá nhân trên thành phần TDB nên điều này phản ánh sự hiểu biết tốt nhất của tôi và có thể không hoàn toàn chính xác.

+0

Cảm ơn một nhóm!Tôi chắc chắn sẽ kiểm tra danh sách gửi thư, đó là một sự xấu hổ mà loại bỏ không nhất thiết phải giảm kích thước bảng, nhưng nó là dễ hiểu. Cảm ơn một lần nữa. – paul

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