2009-12-23 45 views
44

Có cách nào để lấy số đếm hàng (số đếm khóa) của một họ cột đơn trong Cassandra không? get_count chỉ có thể được sử dụng để đếm số cột.Số lượng hàng của một họ hàng cột ở Cassandra

Ví dụ: nếu tôi có một nhóm có chứa người dùng và muốn nhận được số lượng người dùng. Làm thế nào tôi có thể làm điều đó? Mỗi người dùng là hàng của chính nó.

Trả lời

-3

Tôi đã nhận được số lượng như sau sau khi tôi chuyển đổi dữ liệu thành một băm trong PHP.

+3

Điều đó rõ ràng không quy mô, tại một số điểm, hàm băm sẽ không phù hợp (hữu ích) vào ram của PHP nữa. Cassandra là công cụ có thể mở rộng. – MarkR

+0

Tôi biết - đó là những gì tôi quan tâm. Tôi vẫn đang trong giai đoạn phát triển và tìm kiếm một giải pháp tốt hơn cho các vấn đề như thế này. –

6

Nếu bạn đang sử dụng trình phân vùng giữ gìn trật tự, bạn có thể thực hiện việc này với get_range_slice hoặc get_key_range.

Nếu không, bạn sẽ cần phải lưu trữ id người dùng của mình trong một hàng đặc biệt.

+3

Nếu tôi có hàng triệu hàng thì sao? get_range_slice cảm thấy loại nặng cho một hoạt động đếm đơn giản. Tôi có đúng không? –

+4

Bạn nói đúng, việc đếm các đối tượng thô tương đối đắt trong các hệ thống phân tán so với những gì bạn đang sử dụng trên một hệ thống có thể chỉ giữ một chỉ mục trong bộ nhớ cục bộ. – jbellis

2

[Edit: Câu trả lời này đã cũ như của Cassandra 0.8.1 - xin vui lòng xem Counters entry trong Cassandra Wiki cho cách chính xác để xử lý Counter Cột trong Cassandra.]

Tôi mới đến Cassandra, nhưng tôi đã làm rối tung rất nhiều với App Engine của Google. Nếu không có giải pháp nào khác tự giới thiệu, bạn có thể xem xét việc giữ một bộ đếm riêng biệt trong một nền tảng hỗ trợ các hoạt động gia tăng nguyên tử như memcached. Tôi biết rằng Cassandra đang làm việc trên chức năng tăng/giảm truy cập nguyên tử, nhưng nó chưa sẵn sàng cho thời gian chính.

Tôi chỉ có thể đăng một siêu liên kết vì tôi mới, do đó, để tiến bộ về hỗ trợ bộ đếm, hãy xem liên kết trong nhận xét của tôi bên dưới.

Lưu ý rằng chuỗi này đề xuất ZooKeeper, memcached và redis là các giải pháp khả thi. Sở thích cá nhân của tôi sẽ được ghi nhớ.

http://www.mail-archive.com/[email protected]/msg03965.html

+2

https://issues.apache.org/jira/browse/CASSANDRA-1072 để tiến hành hỗ trợ bộ đếm Cassandra. –

+0

CounterColumn hiện được hỗ trợ trong 0.8.1 và ngoài – Bamboo

+0

Cảm ơn, Bamboo. Đây là một câu trả lời khá cũ và công việc của tôi với Cassandra đã ngừng hoạt động vào đầu năm 2011. Tôi sẽ cập nhật với một liên kết. –

0

Luôn có bản đồ/giảm nhưng có thể không cần nói. Nếu bạn có điều đó với hive hoặc lợn, thì bạn có thể làm điều đó cho bất kỳ bảng nào trên cluster mặc dù tôi không chắc chắn tasktrackers biết về địa phương cassandra và vì vậy nó có thể phải truyền toàn bộ bảng trên mạng để bạn có được công việc theo dõi trên cassandra các nút nhưng dữ liệu mà chúng nhận được có thể là từ một nút cassandra khác: (Tôi rất muốn nghe nếu có ai biết chắc chắn)

LƯU Ý: Chúng tôi đang thiết lập bản đồ/giảm trên cassandra chủ yếu là vì chúng tôi muốn có chỉ mục sau ., chúng ta có thể lập bản đồ/giảm một thành cassandra

37

Nếu bạn đang làm việc trên một tập hợp dữ liệu lớn và là okay với một xấp xỉ khá tốt, tôi khuyên bạn nên sử dụng lệnh:

nodetool --host <hostname> cfstats 

này sẽ đổ ra một danh sách cho mỗi gia đình cột tìm kiếm như thế này:

Column Family: widgets 
SSTable count: 11 
Space used (live): 4295810363 
Space used (total): 4295810363 
Number of Keys (estimate): 9709824 
Memtable Columns Count: 99008 
Memtable Data Size: 150297312 
Memtable Switch Count: 434 
Read Count: 9716802 
Read Latency: 0.036 ms. 
Write Count: 9716806 
Write Latency: 0.024 ms. 
Pending Tasks: 0 
Bloom Filter False Postives: 10428 
Bloom Filter False Ratio: 1.00000 
Bloom Filter Space Used: 18216448 
Compacted row minimum size: 771 
Compacted row maximum size:
Compacted row mean size: 1634 

Các "Số Keys (ước tính)" hàng là một đoán tốt trên cụm và hiệu suất nhanh hơn rất nhiều so với rõ ràng cách tiếp cận đếm.

+3

Không phải số lượng Khóa là ước tính cho nút cụ thể đó, không phải toàn bộ cụm sao? –

+0

Vâng. Công cụ nodetool liên lạc ColumnFamilyStoreMBean sử dụng ColumnFamilyStore, sử dụng DataTracker, trả về tổng các ước tính được tạo bởi mỗi SSTable cục bộ. –

+3

'nodetool --host cfstats' mang lại cho tôi https://gist.github.com/cdwijayarathna/e6b4d3d7d8c272fcfd24, nhưng không có thuộc tính 'Số chìa khóa', lý do cho điều đó là gì? –

6

Tôi tìm thấy một bài viết xuất sắc về vấn đề này ở đây .. http://www.planetcassandra.org/blog/post/counting-keys-in-cassandra

select count (*) từ giới hạn cf 1000000

Trên tuyên bố có thể được sử dụng nếu chúng ta có một xấp xỉ trên ràng buộc được biết đến trước mặt. Tôi thấy điều này hữu ích cho trường hợp của tôi.

+5

Giải pháp tồi: trên các bảng lớn, bạn sẽ nhận được rpc_timeout, vì nó sẽ quét tất cả các bảng – Vlad

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