[ 
https://issues.apache.org/jira/browse/CASSANDRA-6328?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14551974#comment-14551974
 ] 

Benjamin Lerer commented on CASSANDRA-6328:
-------------------------------------------

The problem with the scenario that you describe is that reading the data and 
deleting them are 2 different operations. Between the time where the data was 
retrieved and the time where delete operation is performed somebody might have 
change the user_id. In which case you might end up deleting the wrong data.

Due to this reason, we try to avoid as much as possible to implements read 
before write operations and let's the user choose to do these things manually 
if he is sure that it is really what he want.

> Allow deleting records with a secondary index lookup
> ----------------------------------------------------
>
>                 Key: CASSANDRA-6328
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6328
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Core
>            Reporter: David Huang
>            Priority: Minor
>             Fix For: 3.x
>
>
> Currently, clients must query for row keys from a specific secondary index 
> and delete the results. This incurs network traffic whereas a single server 
> operation would be enough.
> ==== Example ====
> In C* we would have to query for all playlist_id for user "JohnSmith" and 
> issue deletes for each key. Deleting by secondary index would allow the 
> entire operation to occur within C* without the client needing to issue 
> multiple statements.
> Delete By Secondary Index
> CREATE TABLE playlist (
> playlist_id text,
> user_id text,
> song_name set<text>,
> PRIMARY_KEY (playlist_id)
> );
> CREATE INDEX on playlist (user_id);
> DELETE FROM playlist WHERE user_id = "JohnSmith";
> Delete By Client
> // Schema
> CREATE TABLE playlist (
> playlist_id text,
> user_id text,
> song_name set<text>,
> PRIMARY_KEY (playlist_id)
> );
> CREATE INDEX on playlist (user_id);
> // Client
> ResultSet resultSet = session.execute("select playlist_id from playlist where 
> userid = "JohnSmith"");
> PreparedStatement delete = session.prepare("DELETE FROM playlist WHERE 
> playlist_id =  ?");
> for(Row row : resultSet){
> session.execute(delete.bind(row.getString("playlist_id")));
> }
>   



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to