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?
- 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?
- 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.