2017-10-30 17 views
5

Tôi có hai câu hỏi về kết quả truy vấn trong Cassandra.Thứ tự các kết quả trong Cassandra

  1. Khi tôi thực hiện một "đầy đủ" lựa chọn của một bảng trong Cassandra (tức. select * from table) là nó đảm bảo rằng kết quả sẽ được trả lại trong thứ tự tăng dần của thẻ phân vùng? Ví dụ, có bảng sau:

    create table users(id int, name text, primary key(id)); 
    

    Có đảm bảo rằng các truy vấn sau đây sẽ trả lại kết quả với sự gia tăng giá trị trong cột thẻ?

    select token(id), id from users; 
    

    Nếu có, dữ liệu được phân phối cho nhiều nút trong cụm sao?

  2. Nếu câu trả lời cho câu hỏi trên là 'có', câu hỏi vẫn hợp lệ nếu chúng tôi sử dụng chỉ mục phụ? Ví dụ, nếu chúng ta sẽ có các chỉ số sau:

    create index on users(name); 
    

    và chúng tôi truy vấn bảng bằng cách sử dụng các chỉ số:

    select token(id), id from users where name = 'xyz'; 
    

    có bất kỳ sự bảo đảm về thứ tự kết quả?

Động lực cho các câu hỏi trên là mã thông báo là điều đúng để sử dụng để thực hiện phân trang và/hoặc tiếp tục xuất lâu hơn "xuất dữ liệu".

EDIT: Có nhiều nguồn tài nguyên trên mạng mà nói rằng trật tự phù hợp với trật tự token (ví dụ như trong mô tả của partitioner results hoặc this Datastax page.):

Nếu không có một chìa khóa phân vùng được quy định trong mệnh đề WHERE, các thứ tự thực tế của tập kết quả sau đó trở nên phụ thuộc vào giá trị băm của userid.

Tuy nhiên thứ tự các kết quả không được chỉ định trong tài liệu chính thức của Cassandra, ví dụ: của SELECT statement.

Trả lời

2

Có đảm bảo rằng truy vấn sau sẽ trả lại kết quả với các giá trị ngày càng tăng trong cột mã thông báo không?

Có nó là

Nếu vậy, là nó cũng được bảo đảm nếu dữ liệu được phân phối đến nhiều nút trong cluster?

Sự phân bố dữ liệu là trực giao với thứ tự của dữ liệu lấy ra, không có mối quan hệ

Nếu anwer cho câu hỏi trên là 'có', là nó vẫn có giá trị nếu chúng ta sử dụng chỉ mục thứ cấp?

Có, ngay cả khi bạn truy vấn dữ liệu bằng chỉ mục phụ (có thể là SASI hoặc bản gốc), kết quả trả về sẽ luôn được sắp xếp theo thứ tự mã thông báo. Tại sao ? Giải thích kỹ thuật được đưa ra trong bài đăng trên blog của tôi tại đây: http://www.doanduyhai.com/blog/?p=13191#cluster_read_path

Đó là lý do chính giải thích tại sao SASI không phù hợp nếu bạn muốn tìm kiếm trả về dữ liệu theo một số giá trị cột. Chỉ một tích hợp công cụ tìm kiếm thực (như Datastax Enterprise Search) mới có thể mang lại cho bạn thứ tự chính xác vì nó bỏ qua lớp đường dẫn đọc cụm.

+0

Cảm ơn bạn đã trả lời. Nhưng có bất kỳ lý do nào tại sao khoản bảo lãnh này không được đề cập trong tài liệu chính thức, ví dụ như. một trong những truy vấn SELECT mà tôi đã đề cập? –

+0

Bởi vì 1) với Cassandra, các phương pháp hay nhất khuyên bạn nên sử dụng SELECT trên một phân vùng đơn -> các hàng được sắp xếp theo các giá trị nhóm và 2) Các truy vấn phạm vi như SELECT sử dụng chỉ mục thứ 2 hoặc không có khóa phân vùng thường không được khuyến nghị và 3) bởi giá trị mã thông báo chỉ đúng khi sử dụng phân vùng ngẫu nhiên hoặc Murmur3. Khi sử dụng ByteOrderedPartitioner, các hàng được sắp xếp theo các phím phân vùng – doanduyhai

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