2011-06-21 31 views
5

Tôi đang làm việc trên một máy khách sao lưu dựa trên Java để quét các tệp trên hệ thống tệp và điền một cơ sở dữ liệu Sqlite với các thư mục và tên tệp mà nó tìm thấy để sao lưu. Nó sẽ có ý nghĩa để sử dụng neo4j thay vì sqlite? Nó sẽ được nhiều hơn perfomant và dễ dàng hơn để sử dụng cho ứng dụng này. Tôi đã suy nghĩ bởi vì một hệ thống tập tin là một cây (hoặc đồ thị nếu bạn xem xét các liên kết tượng trưng), một cơ sở dữ liệu gaph có thể phù hợp? Lược đồ cơ sở dữ liệu sqlite chỉ định nghĩa 2 bảng, một cho các thư mục (đường dẫn đầy đủ và các thông tin khác) và một cho các tệp (tên chỉ với khóa ngoài chứa thư mục trong bảng thư mục), vì vậy nó tương đối đơn giản.Tôi có sử dụng neo4j để lập chỉ mục hệ thống tệp

Ứng dụng cần lập chỉ mục hàng triệu tệp để giải pháp cần phải nhanh chóng.

Trả lời

3

Miễn là bạn có thể thực hiện các thao tác DB về cơ bản bằng cách sử dụng đối sánh chuỗi trên đường dẫn hệ thống tệp được lưu trữ, việc sử dụng cơ sở dữ liệu quan hệ có ý nghĩa. Thời điểm mô hình dữ liệu trở nên phức tạp hơn và bạn thực sự không thể thực hiện truy vấn của mình bằng chuỗi phù hợp nhưng cần duyệt qua biểu đồ, sử dụng cơ sở dữ liệu biểu đồ sẽ dễ dàng hơn nhiều.

+3

Nó thực sự phụ thuộc vào các truy vấn bạn muốn chạy trên tập dữ liệu này. Trong một đồ thị, mỗi thư mục và tập tin sẽ là nút riêng của nó lưu trữ siêu thông tin và mối quan hệ có thể giữ tên tệp (vì có thể có các liên kết tượng trưng hoặc cứng) với các tên khác nhau. –

3

Khi tôi hiểu nó thì một trong những cách sử dụng sớm nhất của Neo4j là thực hiện chính xác điều này như một phần của hệ thống CMS Neo4j được bắt nguồn từ.

Lucene, phần phụ trợ lập chỉ mục cho Neo4j, sẽ cho phép bạn tạo bất kỳ chỉ mục nào bạn có thể cần.

Bạn nên đọc kỹ và hỏi trực tiếp.

+0

Wow, neo4j đang sử dụng Lucene để lập chỉ mục? Tuyệt đấy! –

0

Tôi đang xem xét giải pháp tương tự để lập chỉ mục kho dữ liệu trên hệ thống tệp. Lưu ý về các truy vấn ở trên là đúng.

Ví dụ về các trường hợp truy vấn tồi tệ nhất:

Đối với sqlite:

  • nếu bạn có một số lượng lớn các thư mục con ở đâu đó sâu vào fs, nhu cầu không gian của bạn trên sqlite sẽ không được tối ưu: lưu đầy đủ đường dẫn cho mỗi thư mục con nhỏ (ví dụ như dự án mã)
  • nếu bạn cần di chuyển thư mục, gần thư mục gốc hơn, bạn càng phải làm việc nhiều hơn, do đó sẽ không phải là O (1) giống như với neo4j
  • ca n bạn làm đa luồng trên sqlite để quy mô?

Đối neo4j:

  • mỗi lần bạn tìm kiếm một đường dẫn đầy đủ, bạn cần phải chia nó thành các thành phần, và xây dựng một truy vấn cypher với tất cả các yếu tố của con đường.
  • mô hình dữ liệu có thể sẽ phức tạp hơn 2 bảng: tất cả các đối tượng khác nhau, sau đó dir-in-dir mối quan hệ, file-trong-dir mối quan hệ, mối quan hệ liên kết tượng trưng

Greetings, hj

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