Truy vấn Cassandra mà không có khóa phân vùng


7

Tôi đọc tài liệu của Cassandra về các bước nội bộ mà nó thực hiện khi truy vấn dữ liệu. Có vẻ như Cassandra dựa vào Chiến lược phân vùng và sao chép để xử lý các truy vấn. Tôi vẫn bối rối rằng Trình phân vùng cần phải biết Khóa phân vùng. Nếu truy vấn có Khóa Paritition, quy trình truy vấn nội bộ có vẻ đơn giản. Tuy nhiên, nếu truy vấn mong đợi một tập kết quả thay vì một hàng xác định như bên dưới.

SELECT * FROM <table>
  1. Trong trường hợp này, khi không có Khóa chính được chỉ định trong WHEREmệnh đề, làm thế nào để Điều phối viên biết các nút nào để gửi yêu cầu đến?

  2. Nếu nhiều hàng được trả về, có thể được phân phối trong các nút khác nhau, làm thế nào các hàng này được tổng hợp và trả về cho khách hàng?

Câu trả lời:


6

khi không có Khóa chính được chỉ định trong mệnh đề WHERE, làm thế nào để Điều phối viên biết các nút nào sẽ gửi yêu cầu đến?

  1. Nó không. Điều phối viên (nút được chọn làm) phải quét tất cả các hàng cho bảng đó trên mỗi và mọi nút. Đó là lý do tại sao các truy vấn không liên kết được coi là một mô hình chống trong Cassandra, vì chúng phải chịu nhiều thời gian mạng. Đặc biệt là trong các cụm lớn hơn. Ngoài ra, điều phối viên sẽ phải làm thêm vì nó phải lắp ráp và trả về tập kết quả.

Nếu nhiều hàng được trả về, có thể được phân phối trong các nút khác nhau, làm thế nào các hàng này được tổng hợp và trả về cho khách hàng?

  1. Chúng không thực sự được tổng hợp quá nhiều, vì chúng được trả về theo thứ tự giá trị mã thông báo băm của khóa phân vùng của chúng.

Xem xét một truy vấn không liên kết chạy với một bảng có tên crew, với một khóa phân vùng là crewname. Khi tôi chạy token()chức năng CQL trên khóa đó, bạn có thể thấy rằng các hàng được trả về thực sự được sắp xếp theo mã thông báo của chúng.

aploetz@cqlsh:presentation> SELECT crewname,token(crewname),firstname,lastname 
FROM crew;

 crewname | token(crewname)      | firstname | lastname
----------+----------------------+-----------+-----------
    Simon | -8694467316808994943 |     Simon |       Tam
    Jayne | -3415298744707363779 |     Jayne |      Cobb
     Wash |   596395343680995623 |     Hoban | Washburne
      Mal |  4016264465811926804 |   Malcolm |  Reynolds
     Zoey |  7853923060445977899 |      Zoey | Washburne
 Sheppard |  8386579365973272775 |    Derial |      Book

(6 rows)

Nó hoạt động theo cách này, bởi vì Cassandra làm cho các nút nhất định chịu trách nhiệm chính cho các phạm vi mã thông báo nhất định. Sau đó, nó trở thành một nhiệm vụ đơn giản để điều phối viên trả về tập kết quả theo thứ tự đó. Nếu có nhiều hàng có cùng khóa phân vùng, kết quả sẽ được sắp xếp theo các phím phân cụm trong mỗi khóa phân vùng.

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.