2014-09-07 17 views
5

Tôi có một câu hỏi cơ bản liên quan đến việc sử dụng FileSystem Tôi muốn sử dụng một cửa hàng KeyValue nhúng, mà rất là viết theo định hướng. (Kéo dài) Giả sử kích thước giá trị của tôi là a) 10 K b) 1 M và đọc và cập nhật đều bình đẳng trong sốHiểu KeyValue nhúng kho dữ liệu vs FileSystem

Cant tôi chỉ cần tạo file chứa giá trị và có tên hoạt động như phím.

Wont nó càng nhanh càng tốt bằng cách sử dụng cửa hàng KeyValue như LevelDB hoặc RocksDB.

Ai cũng có thể giúp tôi hiểu.

Trả lời

15

Về nguyên tắc, vâng, một hệ thống tập tin có thể được sử dụng như một cửa hàng quan trọng có giá trị. Sự khác biệt chỉ xuất hiện khi bạn xem xét các trường hợp sử dụng cá nhân và các hạn chế trong việc triển khai.

Không đi sâu vào quá nhiều chi tiết ở đây, có một số điều có thể sẽ rất khác nhau:

  • Một hệ thống tập tin chia tách dữ liệu thành các khối có kích thước cố định. Hai tệp không thể chiếm các phần của cùng một khối. Kích thước khối chung là 4-16 KiB; bạn có thể tính toán bao nhiêu tiền mà 10 ví dụ KiB của bạn sẽ gây ra. Các cửa hàng khóa/giá trị có xu hướng giải thích cho các dữ liệu có kích thước nhỏ hơn.
  • Chỉ mục thư mục trong hệ thống tệp thường không có khả năng lặp lại hiệu quả qua tên tệp/khóa theo thứ tự sắp xếp. Bạn có thể tìm kiếm một khóa cụ thể một cách hiệu quả, nhưng bạn không thể truy xuất các phạm vi mà không đọc khá nhiều tất cả các mục nhập thư mục. Một số cửa hàng khóa/giá trị, bao gồm LevelDB, hỗ trợ lặp lại hiệu quả theo thứ tự.
  • Một số cửa hàng khóa/giá trị, bao gồm LevelDB, là giao dịch. Điều này có nghĩa là bạn có thể kết hợp nhiều bản cập nhật với nhau, và LevelDB sẽ đảm bảo rằng tất cả các bản cập nhật này đều thông qua hoặc không có bản cập nhật nào thực hiện. Điều này là rất quan trọng để ngăn chặn dữ liệu của bạn nhận được không phù hợp. Hệ thống tập tin làm cho việc triển khai này khó thực hiện hơn, đặc biệt khi nhiều tệp có liên quan.
  • chính cửa hàng/giá trị thường cố gắng giữ cho dữ liệu tiếp giáp trên đĩa (do đó dữ liệu có thể được lấy ra có ít tìm kiếm), trong khi hệ thống tập tin hiện đại cố tình không thực hiện các tập tin trên này. Điều này có thể tác động đến hiệu suất khá nghiêm trọng khi đọc nhiều bản ghi. Nó không phải là một vấn đề trên đĩa trạng thái rắn, mặc dù.
  • Trong khi một số hệ thống tệp cung cấp tính năng nén, chúng thường là mỗi tệp hoặc mỗi khối. Theo như tôi có thể thấy, LevelDB nén toàn bộ các mẩu hồ sơ, có khả năng tạo ra độ nén tốt hơn (mặc dù họ thiên về chiến lược nén của họ theo hiệu suất nén).
+0

+1 cho câu trả lời này. Cơ sở dữ liệu k/v lưu trữ dữ liệu nhỏ gọn hơn và có thêm một lớp đệm ẩn. do đó bạn có thể mong đợi hiệu suất nhanh hơn nhiều (và chức năng bổ sung có thể hữu ích cho ứng dụng của bạn). Ngoài ra, một số hệ thống tệp không mở rộng tốt nếu bạn tạo nhiều tệp. – cruppstahl

+1

Vì lợi ích của sự hoàn chỉnh, trên bất kỳ hệ điều hành lành mạnh nào, dữ liệu hệ thống tệp cũng được lưu trong bộ nhớ cache. –

+1

Vì vậy, bạn có thể đề xuất, nếu kích thước giá trị lớn (nói 5 MB) và mẫu là giao diện, cập nhật, lưu trữ; sử dụng một cửa hàng kv có ý nghĩa. Ngoài ra, việc tạo 500 K tệp sẽ ảnh hưởng xấu đến hệ thống tệp –

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