2012-01-09 32 views
8

Tôi đã cố gắng tạo một số người dùng để thử nghiệm của mình. Tôi tạo ra người dùng trong một vòng lặp từ 0..100000 bằng cách sử dụng đá quý cassandra-cql cho Ruby on Rails, và sau đó tôi đếm những người dùng trong cơ sở dữ liệu của tôi và chỉ có 10000 người dùng là kết quả. Nếu tôi tạo 9000, mọi thứ sẽ hoạt động tốt. Đầu tiên tôi nghĩ người dùng không tồn tại, nhưng tôi đã sử dụng Apollo WebUI cho Cassandra và tôi có thể tìm thấy người dùng có id 100000 và người dùng bên dưới. Lý do tại sao điều này xảy ra?Số lượng sai (*) với cassandra-cql

Tôi biết tôi nên sử dụng cột truy cập để cung cấp số lượng người dùng trong ứng dụng của mình, nhưng tôi muốn biết đây có phải là lỗi hay lỗi của tôi hay không.

def self.create_users 
    (0..19000).each do |f| 
    @@db.execute("INSERT INTO users (uid, first_name, last_name, email) VALUES (?,?,?,?)", f.to_s, "first_name", "last_name", "email") 
    end 
end 

def self.count_users 
    count = @@db.execute("SELECT count(*) FROM users") 
    count.fetch do |c| 
    return c[0] 
    end 
end 

Trả lời

23

Giới hạn hoạt động CQL cả số hàng và số cột sẽ được trả lại cho người dùng. Theo mặc định giới hạn đó là 10.000. Bởi vì hoạt động đếm (*) thực sự phải lấy ra tất cả các hàng để có được số lượng, nó cũng bị giới hạn bởi mặc định là 10.000 hàng. Bạn có thể tăng giới hạn cho truy vấn (mặc dù tôi không khuyến nghị truy vấn đó):

SELECT count(*) FROM users limit 20000; 

Lưu ý rằng đây là một hoạt động tốn kém đặc biệt khi bạn có nhiều hàng. Bạn nên dự đoán loại truy vấn này có thể mất nhiều thời gian cho bất kỳ tập dữ liệu kích thước trung bình hoặc lớn nào. Nếu có thể, bạn nên chuẩn hóa số đếm này thành một bộ đếm hoặc một số biểu mẫu khác sẽ không yêu cầu tìm nạp tất cả các hàng trong họ cột của bạn.

+1

cảm ơn vì điều đó! – user934801

+0

Xin chào, tôi có thể hỏi phiên bản cassandra bạn đang sử dụng không? Tôi đang đối mặt với một vấn đề liên quan với 'select count (*)' và 'limit' dường như bị bỏ qua hoàn toàn: http://stackoverflow.com/questions/36174805/cassandra-cql-select-count-with-limit – light

+0

câu hỏi là từ tháng 1 năm 2012, vì vậy rất có thể là Cassandra 1.0.X. CQL đã được đại tu từ đó và có ngữ nghĩa hoàn toàn khác nhau. – psanford

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