2013-09-26 37 views
5

Hiện tại, tôi có một dòng cột cassandra với hàng lớn dữ liệu, để nói hơn 100.000. Bây giờ, tôi muốn xóa tất cả dữ liệu trong nhóm cột này và sự cố đã xuất hiện:Truy vấn tra cứu Cassandra khá chậm sau khi xóa gói dữ liệu lớn

Sau khi xóa tất cả dữ liệu, tôi thực hiện truy vấn tra cứu trong họ cột này, cassandra sẽ mất hàng chục giây để trả lại một kết quả truy vấn trống. Và chi phí thời gian sẽ tăng tuyến tính khi dữ liệu gốc lớn hơn

Nó do tính năng bia mộ trong khi xóa dữ liệu khỏi cơ sở dữ liệu cassandra. Tốc độ tra cứu sẽ không phục hồi bình thường cho đến khi GC tiếp theo được kích hoạt. Xem Cassandra Distributed Deletes.

Bởi vì các hoạt động truy vấn như vậy thường được sử dụng trong hệ thống của tôi, tôi không thể chịu độ trễ lớn đến vài giây.

Bạn vui lòng cho tôi giải pháp cho vấn đề này không?

+0

Có thể sử dụng [model chuỗi thời gian] (https://academy.datastax.com/resources/getting-started-time-series-data-mode ling) có thể là một cách tiếp cận tốt? – deFreitas

Trả lời

3

Điều này nghe có vẻ giống như một cách rất xấu để sử dụng cơ sở dữ liệu. Điền vào nó, làm trống nó, lặp lại. Một cách bạn có thể giải quyết vấn đề của mình là sử dụng các tên CF khác nhau mỗi lần, như khi bạn dọn sạch dữ liệu và bắt đầu tái tạo nó, tạo ra một nhóm cột mới và sử dụng nó và chỉ cần thả các họ colum khác tuy nhiên đây là hack.

Tôi khuyên bạn nên sử dụng tính năng nén (gets rid of all the tombstones it can detect) để giải quyết vấn đề của bạn, đó là CPU chuyên sâu nhưng tốt hơn là đợi hàng chục giây để truy vấn phản hồi. Bạn có thể làm nhiệm vụ ít chuyên sâu về máy tính của bạn bằng cách cung cấp các ks cụ & cf bạn muốn nhỏ gọn:

./nodetool compact <ks_name> <cf_name> 

điểm Ritchard là một tốt nhất, gc_grace_seconds được thiết lập đến 10 ngày theo mặc định, do đó bạn có thể sẽ phải tinh chỉnh điều này để cho phép nén chặt để loại bỏ bia mộ.

+1

Lưu ý rằng nén sẽ chỉ loại bỏ các bia mộ sau khi gc_grace_seconds đã trôi qua kể từ khi bia mộ được chèn vào. – Richard

+0

@Lyuben, tôi không thể làm trống toàn bộ nhóm gia đình, vì có hơn 1000 người dùng có dữ liệu được lưu trữ trong đó và mỗi người trong số họ có hơn 100.000 hàng dữ liệu. Mỗi thao tác xóa được thực hiện trên dữ liệu của một người dùng. Hoạt động ** nhỏ gọn ** trên họ cột có thể là lựa chọn, nhưng ** thời gian để kích hoạt hoạt động này là gì? ** Nếu nó được kích hoạt mỗi khi một người dùng xóa một số dữ liệu, nó có thể ảnh hưởng đến tất cả người dùng khác. Đề nghị của bạn về điều này là gì? Cảm ơn bạn một lần nữa! Và cảm ơn Richard đã nhắc nhở _gc_grace_seconds_. – Fify

0

@Fify

Nếu gia đình cột của bạn là thường xuyên sửa đổi (đọc sau đó cập nhật sau đó đọc lại bản cập nhật ...), bạn nên sử dụng leveled compaction strategy

Để làm cho cột xóa bỏ quickier , thay đổi thuộc tính gc_grace_seconds của họ trong cột

+0

cảm ơn câu trả lời của bạn. 1) Các hoạt động chủ yếu được sử dụng trong gia đình cột của tôi là _insertion_, và sau đó _read_, _deletion_ đôi khi xảy ra nhưng với xác suất rất thấp (giả sử 1 trong số 100 hoạt động).2) ** gc_grace_seconds ** không thể quá ngắn vì có một số dữ liệu của TB được lưu trữ trong cơ sở dữ liệu. – Fify

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