You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Benjamin Lerer (JIRA)" <ji...@apache.org> on 2015/05/20 10:13:00 UTC

[jira] [Commented] (CASSANDRA-6328) Allow deleting records with a secondary index lookup

    [ 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)