Use a counter table to maintain the count so you don’t have to compute it. When you do something that affects the count, its generally easy to issue an asynchronous query to update the counter in parallel with the actual work. It definitely complicates the code, especially if you have a lot of places where you do things that affect the count, but generally doesn’t cost much, if anything, in terms of performance.
Due to Cassandra’s eventually consistent model and lack atomicity, you need to write your code to deal gracefully with the possibility of the counter being inaccurate. How hard that is really depends a lot on your data model. Robert On Apr 22, 2015, at 8:07 AM, Mich Talebzadeh <m...@peridale.co.uk<mailto:m...@peridale.co.uk>> wrote: Thanks Robert for explanation. Please correct me if I am wrong. Currently running a single node cluster of Cassandra. There is the primary key on object_id column in both RDBMS and Cassandra. As you correctly pointed out RDBMS does not need to touch the base table. It can just go through the primary key B-tree index to work out the rows |ROOT:EMIT Operator (VA = 2) | | |SCALAR AGGREGATE Operator (VA = 1) | | Evaluate Ungrouped COUNT AGGREGATE. | | | | |SCAN Operator (VA = 0) | | | FROM TABLE | | | t | | | Using Clustered Index. | | | Index : t_ui | | | Forward Scan. | | | Positioning at index start. | | | Index contains all needed columns. Base table will not be read. | | | Using I/O Size 64 Kbytes for index leaf pages. | | | With LRU Buffer Replacement Strategy for index leaf pages. Total estimated I/O cost for statement 1 (at line 1): 144996. ----------- 300000 Whereas in Cassandra it has to retrieve every row and count the total of the rows without sending results back? What are the other alternatives to make it faster if any? Cheers, Mich Talebzadeh http://talebzadehmich.wordpress.com<http://talebzadehmich.wordpress.com/> Author of the books "A Practitioner’s Guide to Upgrading to Sybase ASE 15", ISBN 978-0-9563693-0-7. co-author "Sybase Transact SQL Guidelines Best Practices", ISBN 978-0-9759693-0-4 Publications due shortly: Creating in-memory Data Grid for Trading Systems with Oracle TimesTen and Coherence Cache Oracle and Sybase, Concepts and Contrasts, ISBN: 978-0-9563693-1-4, volume one out shortly NOTE: The information in this email is proprietary and confidential. This message is for the designated recipient only, if you are not the intended recipient, you should destroy it immediately. Any information in this message shall not be understood as given or endorsed by Peridale Ltd, its subsidiaries or their employees, unless expressly so stated. It is the responsibility of the recipient to ensure that this email is virus free, therefore neither Peridale Ltd, its subsidiaries nor their employees accept any responsibility. From: Robert Wille [mailto:rwi...@fold3.com] Sent: 22 April 2015 15:00 To: user@cassandra.apache.org<mailto:user@cassandra.apache.org> Subject: Re: OperationTimedOut in selerct count statement in cqlsh I should have been more clear. What I meant was that its about the same amount of work for the cluster to do a “select count(l)” as it is to do a “select l” (unlike in the RDBMS world, where count(l) can use the primary key index). The reason why is the coordinator has to retrieve all the rows from all the nodes and count them. The only thing you’re saving is that the rows don’t have to be sent to the client. I heard from another Cassandra user that they found “select l" to be faster than "select count(l)”. I don’t know why that would be, but I’ve seen stranger things. Robert On Apr 22, 2015, at 7:49 AM, Mich Talebzadeh <m...@peridale.co.uk<mailto:m...@peridale.co.uk>> wrote: Thanks Robert, In RDBMS select count(1) basically returns the rows. 1> select count(1) from t 2> go ----------- 300000 (1 row affected) Is count(1) fundamentally different in Cassandra? Does count(1) means return (in my case) 1 three hundred thousand time? Cheers, Mich Talebzadeh http://talebzadehmich.wordpress.com<http://talebzadehmich.wordpress.com/> Author of the books "A Practitioner’s Guide to Upgrading to Sybase ASE 15", ISBN 978-0-9563693-0-7. co-author "Sybase Transact SQL Guidelines Best Practices", ISBN 978-0-9759693-0-4 Publications due shortly: Creating in-memory Data Grid for Trading Systems with Oracle TimesTen and Coherence Cache Oracle and Sybase, Concepts and Contrasts, ISBN: 978-0-9563693-1-4, volume one out shortly NOTE: The information in this email is proprietary and confidential. This message is for the designated recipient only, if you are not the intended recipient, you should destroy it immediately. Any information in this message shall not be understood as given or endorsed by Peridale Ltd, its subsidiaries or their employees, unless expressly so stated. It is the responsibility of the recipient to ensure that this email is virus free, therefore neither Peridale Ltd, its subsidiaries nor their employees accept any responsibility. From: Robert Wille [mailto:rwi...@fold3.com] Sent: 22 April 2015 14:44 To: user@cassandra.apache.org<mailto:user@cassandra.apache.org> Subject: Re: OperationTimedOut in selerct count statement in cqlsh Keep in mind that "select count(l)" and "select l" amount to essentially the same thing. On Apr 22, 2015, at 3:41 AM, Tommy Stendahl <tommy.stend...@ericsson.com<mailto:tommy.stend...@ericsson.com>> wrote: Hi, Checkout CASSANDRA-8899, my guess is that you have to increase the timeout in cqlsh. /Tommy On 2015-04-22 11:15, Mich Talebzadeh wrote: Hi, I have a table of 300,000 rows. When I try to do a simple cqlsh:ase> select count(1) from t; OperationTimedOut: errors={}, last_host=127.0.0.1 Appreciate any feedback Thanks, Mich NOTE: The information in this email is proprietary and confidential. This message is for the designated recipient only, if you are not the intended recipient, you should destroy it immediately. Any information in this message shall not be understood as given or endorsed by Peridale Ltd, its subsidiaries or their employees, unless expressly so stated. It is the responsibility of the recipient to ensure that this email is virus free, therefore neither Peridale Ltd, its subsidiaries nor their employees accept any responsibility.