SSTable là gì?


Câu trả lời:


105

Bảng chuỗi được sắp xếp (mượn từ google) là một tệp gồm các cặp chuỗi khóa / giá trị, được sắp xếp theo các khóa


4
Cảm ơn vì một câu trả lời xuất sắc khác của SO Cassandra! BTW, bạn đã xem câu hỏi này chưa: stackoverflow.com/questions/2573106/…
knorv

Nó có phải là bất biến không?
Dean J,

1
vâng, sstables là không thay đổi do thiết kế - đó là một tính năng tuyệt vời
Schildmeijer

Làm thế nào nó có thể được sắp xếp và không thay đổi sau đó?
xjcl

56

"Một SSTable cung cấp một bản đồ bất biến liên tục, có thứ tự từ khóa đến giá trị, trong đó cả khóa và giá trị đều là chuỗi byte tùy ý. Các phép toán được cung cấp để tra cứu giá trị được liên kết với một khóa được chỉ định và lặp lại tất cả các cặp khóa / giá trị trong một phạm vi khóa được chỉ định. Bên trong, mỗi SSTable chứa một chuỗi các khối (thông thường, mỗi khối có kích thước 64KB, nhưng điều này có thể định cấu hình). Chỉ mục khối (được lưu trữ ở cuối SSTable) được sử dụng để định vị các khối; chỉ mục được tải vào bộ nhớ khi SSTable được mở. Có thể thực hiện tra cứu với một tìm kiếm đĩa: trước tiên chúng tôi tìm khối thích hợp bằng cách thực hiện tìm kiếm nhị phân trong chỉ mục trong bộ nhớ, sau đó đọc khối thích hợp từ đĩa. Tùy chọn, một SSTable có thể được ánh xạ hoàn toàn vào bộ nhớ, cho phép chúng tôi thực hiện tra cứu và quét mà không cần chạm vào đĩa."


4
"without touch disk" -> "mà không biết rằng đĩa đang được chạm". IO được ánh xạ bộ nhớ là một kỹ thuật rất tiện dụng vì nó ủy quyền IO thực tế cho hệ điều hành, giả sử rằng nó có thể thực hiện tốt công việc lưu vào bộ nhớ đệm (đặc biệt là khi một số tiến trình chia sẻ cùng một tệp). Nhưng nó có nhược điểm là bạn không kiểm soát được nó. Nếu trang không nằm trong bộ nhớ, luồng sẽ chặn và không thể thực hiện các thao tác khác; đối chiếu nó với "async IO", nơi bạn có thể đăng ký một cuộc gọi lại và thực hiện các công việc khác trong cùng một chuỗi, trong khi IO đang chờ xử lý.
ithkuil

2
@ithkuil: Bạn hoàn toàn có thể có quyền kiểm soát IO được ánh xạ bộ nhớ ít nhất đến mức có thể đảm bảo rằng các trang nhất định nằm trong bộ nhớ hoặc đã được cam kết vào đĩa (vẫn còn chỗ trống cho các trang không được đảm bảo bộ nhớ nhưng rất có thể là). Đó là những thứ kỳ diệu như mlock (), msync () và MAP_LOCKED. Bạn cũng có thể hiểu những gì hiện đang có và không được phân trang thông qua mincore ().
Christopher Smith

2
@ChristopherSmith: vâng bạn nói đúng, có nhiều cách để kiểm soát nó. Tuy nhiên, nó thường được sử dụng cho các phần hiệu suất quan trọng (thời gian thực) hoặc các vấn đề liên quan đến bảo mật (như tránh việc mật khẩu trong bộ nhớ bị hoán đổi trên đĩa). Các tệp được ánh xạ bộ nhớ rất hữu ích chính xác vì thực tế là bạn không phải quyết định có bao nhiêu trong số chúng sẽ lưu trong bộ nhớ; nếu không, bạn chỉ có thể đọc toàn bộ tệp trong bộ nhớ mà không cần mmap và đạt được hiệu quả tương tự. Trên thực tế, tôi vừa tra cứu mã cassandra; cuộc gọi duy nhất được mlockall(MCL_CURRENT);thực hiện khi khởi động. Xem thêm: goo.gl/AEgPM
ithkuil

4
Báo giá trên là từ BigTable paper .
ShreevatsaR

4

Một máy tính bảng được lưu trữ dưới dạng SSTables.

SSTable (được ánh xạ trực tiếp tới GFS) là bộ lưu trữ bất biến dựa trên khóa-giá trị. Nó lưu trữ các phần dữ liệu, mỗi phần có dung lượng 64KB.

Định nghĩa:

  • Chỉ mục của các khóa: khóa và vị trí bắt đầu
  • Chunk là một đơn vị lưu trữ trong GFS, quản lý bản sao là theo chunk

3
  • SSTable (engl. Sorted Strings Table) là một tệp gồm các cặp chuỗi khóa / giá trị, được sắp xếp theo các khóa.

  • Một SSTable cung cấp một bản đồ bất biến liên tục, có thứ tự từ khóa đến giá trị, trong đó cả khóa và giá trị đều là chuỗi byte tùy ý.

  • Bên trong, mỗi SSTable chứa một chuỗi các khối (thông thường
    mỗi khối có kích thước 64KB, nhưng điều này có thể cấu hình được).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.