[ https://issues.apache.org/jira/browse/CASSANDRA-5721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13699192#comment-13699192 ]
Alberto Pujante commented on CASSANDRA-5721: -------------------------------------------- Yes, I know this is an anti-pattern, I had read the article but did not imagine it was so paintfull, for that reason I tried to compare with a row without tombstones with the same length. Thanks > Extremely slow reads after flusing a table with column deletes > -------------------------------------------------------------- > > Key: CASSANDRA-5721 > URL: https://issues.apache.org/jira/browse/CASSANDRA-5721 > Project: Cassandra > Issue Type: Bug > Components: Core > Environment: Ubuntu 32 bits, Windows XP > Reporter: Alberto Pujante > > I don't know if this is a bug or a normal behaviour. After doing some > insertions and deletions (new keyspace, new table) and make a flush of the > table, Cassandra gives extremely slow reads (and finally timeouts). > Compactions also are extremely slow (with just a few hundred of columns). > I've created a example script to test this. The result table of the output > script has 750 live columns and 750 tombstones and only is flushed one > memtable. > When I don't do deletions and I read the entire row, Cassandra gives normal > times. In this case it would be best for performance manually mark columns as > deleted and when row reaches a % of deletes copy "no deleted columns" in a > new row and delete the old one( row deletion). > Even in models with a few columns deletions, after a while Cassandra would > become extremely slow, and compactions would be very painfull > Thanks in advance > public void test() throws InterruptedException { > session.execute("CREATE KEYSPACE ks WITH replication " + "=" > + "{'class':'SimpleStrategy', 'replication_factor':1};"); > session.execute("use ks;"); > //session.execute("drop table timelineTable;"); > session.execute("CREATE " + "TABLE ks.timelineTable (" > + "key blob," > + "timeline timestamp," > + "value blob," > + "PRIMARY KEY (key, timeline)" > + ") WITH CLUSTERING ORDER BY (timeline DESC) and > gc_grace_seconds=0;"); > Long interval; > Long time = new Date().getTime(); > int j = 0; > while (j < 15) { > int i = 0; > interval = new Date().getTime(); > while (i < 100) { > session.execute("insert into timelineTable > (key,timeline,value) values (0x01," > + time.toString() + ",0x0" + Integer.toHexString(j) + > ")"); > time++; > i++; > } > System.out.println("Insert Interval:" + (new Date().getTime() - > interval)); > interval = new Date().getTime(); > ResultSet results = session.execute("SELECT * FROM timelineTable" > + " WHERE key = 0x01 ORDER BY timeline DESC limit 100"); > System.out.println("Read Interval:" + (new Date().getTime() - > interval)); > i = 0; > interval = new Date().getTime(); > for (Row row : results) { > if (i >= 50) { > session.execute("DELETE FROM timelineTable WHERE key = > 0x01 AND timeline=" > + row.getDate("timeline").getTime()); > } > i++; > } > System.out.println("Delete Interval:" + (new Date().getTime() - > interval)); > j++; > System.out.println(""); > } > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira