apache cassandra lesson: data modelling and cql3
DESCRIPTION
You can find more material, including scripts and source code samples, on my website http://markusklems.github.io/cassandra_training/TRANSCRIPT
![Page 1: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/1.jpg)
CassandraData Modelling and Queries with CQL3
By Markus Klems(2013)
![Page 2: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/2.jpg)
Source: http://geek-and-poke.com
![Page 3: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/3.jpg)
Data Model
● Keyspace (Database)● Column Family (Table)● Keys and Columns
![Page 4: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/4.jpg)
A column
timestamp
value
column_name
the timestamp field isused by Cassandra for conflict resolution: “Last Write Wins”
![Page 5: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/5.jpg)
Column family (Table)
101
partition key columns ...
103
linda
name104
otto
name
12345
tel
karl
name
6789
tel
12233
tel2
![Page 6: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/6.jpg)
Table with standard PRIMARY KEY
CREATE TABLE messages ( msg_id timeuuid PRIMARY KEY, author text, body text );
![Page 7: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/7.jpg)
Table: TweetsPRIMARY KEY
= msg_id
otto
author9990
Hello World!
body
linda
author9991
Hi, Otto
body
![Page 8: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/8.jpg)
Table with compound PRIMARY KEY
CREATE TABLE timeline ( user_id uuid, msg_id timeuuid, author text, body text, PRIMARY KEY (user_id, msg_id));
![Page 9: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/9.jpg)
“Wide-row” Table: Timeline
partition key
9990
msg_id103
Hello World!
body
otto
author
PRIMARY KEY = user_id + msg_id
column
9991
msg_id103
Hi @otto
body
linda
author
![Page 10: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/10.jpg)
Timeline Table is partitioned by user and locally clustered by msg
9990msg_id103 ...
...
Node A
9994msg_id103 ...
...
9881msg_id104 ...
...
9999msg_id104 ...
...
8090msg_id211 ...
...
Node B
8555msg_id211 ...
...
9678msg_id211 ...
...
9877msg_id212 ...
...
![Page 11: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/11.jpg)
Comparison: RDBMS vs. Cassandra
RDBMS Data Design Cassandra Data Design
101
author_idtweet_id
Hello!
body
9990
otto
nameuser_id
101
Tweets Table
Users Table
104
follows_idid
101
followed_id
4321
Followers Table
[101,117]
follows_listuser_id
104
Follows Table
[104,109]
followed_listid
101
Followed Table
otto
nameuser_id
101
Users Table
101
author_idtweet_id
Hello!
body
9990
Tweets Table
otto
name
![Page 12: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/12.jpg)
Exercise: Launch 1 Cassandra Node
Data Center DC1(Germany)
A
A~$ start service cassandra
launch server A
seeds: Arpc_address: 0.0.0.0
/etc/conf/cassandra.yaml
![Page 13: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/13.jpg)
Exercise: Start CQL Shell
Data Center DC1(Germany)
A
A~$ cqlsh
![Page 14: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/14.jpg)
Intro: CLI, CQL2, CQL3
● CQL is “SQL for Cassandra”● Cassandra CLI deprecated, CQL2 deprecated● CQL3 is default since Cassandra 1.2
$ cqlsh
● Pipe scripts into cqlsh$ cat cql_script | cqlsh
● Source files inside cqlshcqlsh> SOURCE '~/cassandra_training/cql3/
01_create_keyspaces';
![Page 15: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/15.jpg)
CQL3● Create a keyspace● Create a column family● Insert data● Alter schema● Update data● Delete data● Apply batch operation● Read data● Secondary Index● Compound Primary Key● Collections● Consistency level● Time-To-Live (TTL)● Counter columns● sstable2json utility tool
![Page 16: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/16.jpg)
Create a SimpleStrategy keyspace
● Create a keyspace with SimpleStrategy and "replication_factor" option with value "3" like this:
cqlsh> CREATE KEYSPACE <ksname>WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3};
![Page 17: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/17.jpg)
Exercise: Create a SimpleStrategy keyspace
● Create a keyspace "simpledb" with SimpleStrategy and replication factor 1.
![Page 18: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/18.jpg)
Exercise: Create a SimpleStrategy keyspace
cqlsh> CREATE KEYSPACE simpledb WITH REPLICATION = { 'class' : 'SimpleStrategy',
'replication_factor' : 1 };cqlsh> DESCRIBE KEYSPACE simpledb;
![Page 19: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/19.jpg)
Create a NetworkTopologyStrategy keyspaceCreate a keyspace with NetworkTopologyStrategy and strategy option "DC1" with a value of "1" and "DC2" with a value of "2" like this:
cqlsh> CREATE KEYSPACE <ksname>WITH REPLICATION = { 'class':'NetworkTopologyStrategy', 'DC1':1, 'DC2':2};
![Page 20: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/20.jpg)
Exercise Create Table “users”
● Connect to the "twotter" keyspace.cqlsh> USE twotter;
● Create new column family (Table) named "users".cqlsh:twotter> CREATE TABLE users (
id int PRIMARY KEY, name text, email text );
cqlsh:twotter> DESCRIBE TABLES;
cqlsh:twotter> DESCRIBE TABLE users;
*we use int instead of uuid in the exercises for the sake of readability
![Page 21: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/21.jpg)
Exercise: Create Table "messages"
● Create a new Table named "messages" with the attributes "posted_on", "user_id", "user_name", "body", and a primary key that consists of "user_id" and "posted_on".
cqlsh:twotter> CREATE TABLE messages (
posted_on bigint,
user_id int,
user_name text,
body text,
PRIMARY KEY (user_id, posted_on)
);*we use bigint instead of timeuuid in the exercises for the sake of readability
![Page 22: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/22.jpg)
Exercise: Insert data into Table "users" of keyspace "twotter"
cqlsh:twotter>
INSERT INTO users(id, name, email)
VALUES (101, 'otto', '[email protected]');
cqlsh:twotter> ... insert more records ...
cqlsh> SOURCE '~/cassandra_training/cql3/03_insert';
![Page 23: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/23.jpg)
Exercise: Insert message records
cqlsh:twotter>INSERT INTO messages (user_id, posted_on, user_name, body)VALUES (101, 1384895178, 'otto', 'Hello!');
cqlsh:twotter> SELECT * FROM messages;
![Page 24: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/24.jpg)
Read datacqlsh:twotter> SELECT * FROM users;
id | email | name-----+--------------+------- 105 | [email protected] | gerd 104 | [email protected] | linda 102 | null | jane 106 | [email protected] | heinz 101 | [email protected] | otto 103 | null | karl
![Page 25: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/25.jpg)
Update datacqlsh:twotter> UPDATE users SET email = '[email protected]' WHERE id = 102;
id | email | name-----+----------------+------- 105 | [email protected] | gerd 104 | [email protected] | linda 102 | [email protected] | jane 106 | [email protected] | heinz 101 | [email protected] | otto 103 | null | karl
![Page 26: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/26.jpg)
Delete data
● Delete columns
cqlsh:twotter> DELETE email FROM users WHERE id = 105;
● Delete an entire row
cqlsh:twotter> DELETE FROM users WHERE id = 106;
![Page 27: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/27.jpg)
Delete data id | email | name-----+----------------+------- 105 | null | gerd 104 | [email protected] | linda 102 | [email protected] | jane . 101 | [email protected] | otto 103 | null | karl
![Page 28: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/28.jpg)
Batch operation
● Execute multiple mutations with a single operationcqlsh:twotter>BEGIN BATCH INSERT INTO users(id, name, email) VALUES(107, 'john','[email protected]') INSERT INTO users(id, name) VALUES(108, 'michael') UPDATE users SET email = '[email protected]' WHERE id = 108 DELETE FROM users WHERE id = 105APPLY BATCH;
![Page 29: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/29.jpg)
Batch operation id | email | name-----+----------------+--------- . 107 | [email protected] | john 108 | [email protected] | michael 104 | [email protected] | linda 102 | [email protected] | jane 101 | [email protected] | otto 103 | null | karl
![Page 30: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/30.jpg)
Secondary Indexcqlsh:twotter>CREATE INDEX name_index ON users(name);
cqlsh:twotter>CREATE INDEX email_index ON users(email);
cqlsh:twotter> SELECT name, email FROM users WHERE name = 'otto';
cqlsh:twotter> SELECT name, email FROM users WHERE email = '[email protected]';
![Page 31: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/31.jpg)
Alter Table Schemacqlsh:twotter>ALTER TABLE users ADD password text;
cqlsh:twotter>ALTER TABLE users ADD password_reset_token text;
* Given its flexible schema, Cassandra’s CQL ALTER finishes much quicker than RDBMS SQL ALTER where all existing records need to be updated.
![Page 32: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/32.jpg)
Alter Table Schema
id | email | name | password | password_reset_token-----+----------------+---------+----------+---------------------- 107 | [email protected] | john | null | null 108 | [email protected] | michael | null | null 104 | [email protected] | linda | null | null 102 | [email protected] | jane | null | null 101 | [email protected] | otto | null | null 103 | null | karl | null | null
![Page 33: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/33.jpg)
Collections - Set
CQL3 introduces collections for storing complex data structures, namely the following: set, list, and map. This is the CQL way of modelling many-to-one relationships.1. Let us add a set of "hobbies" to the Table "users".cqlsh:twotter> ALTER TABLE users ADD hobbies
set<text>;cqlsh:twotter> UPDATE users SET hobbies =
hobbies + {'badminton','jazz'} WHERE id = 101;
![Page 34: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/34.jpg)
Collections - List
2. Now create a Table "followers" with a list of followers.cqlsh:twotter> CREATE TABLE followers ( user_id int PRIMARY KEY, followers list<text>);cqlsh:twotter> INSERT INTO followers (
user_id, followers) VALUES (101, ['willi','heinz']);
cqlsh:twotter> SELECT * FROM followers; user_id | followers---------+-------------------- 101 | ['willi', 'heinz']
![Page 35: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/35.jpg)
Collections - Map
3. Add a map to the Table "messages".cqlsh:twotter>
ALTER TABLE messages
ADD comments map<text, text>;
cqlsh:twotter>UPDATE messages SET comments = comments + {'otto':'thx!'} WHERE user_id = 103 AND posted_on = 1384895223;
![Page 36: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/36.jpg)
Consistency Level
● Set the consistency level for all subsequent requests:
cqlsh:twotter> CONSISTENCY ONE;cqlsh:twotter> CONSISTENCY QUORUM;cqlsh:twotter> CONSISTENCY ALL;
● Show the current consistency level:
cqlsh:twotter> CONSISTENCY;
![Page 37: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/37.jpg)
Exercise: Consistency Level
● Set the consistency level to ANY and execute a SELECT statement.
![Page 38: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/38.jpg)
Exercise: Consistency Level
● Set the consistency level to ANY and execute a SELECT statement.
Bad Request: ANY ConsistencyLevel is only supported for writes
![Page 39: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/39.jpg)
Exercise: Time-To-Live (TTL)
● Insert a user record with a password reset token with a 77 second TTL value.
cqlsh:twotter>INSERT INTO users (id, name, password_reset_token) VALUES (109, 'timo', 'abc-xyz-123') USING TTL 77;
![Page 40: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/40.jpg)
Exercise: Time-To-Live (TTL)
● The INSERT statement before will delete the entire user record after 77 seconds.
● This is what we actually wanted to do:
cqlsh:twotter> INSERT INTO users (id, name) VALUES(110, 'anna');cqlsh:twotter> UPDATE users USING TTL 77 SET password_reset_token = 'abc-xyz-123' WHERE id = 110;
![Page 41: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/41.jpg)
Time-To-Live (TTL)
● Check the TTL expiration time in seconds.
cqlsh:twotter> SELECT TTL (password_reset_token) FROM messages WHERE user_id = 110;
![Page 42: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/42.jpg)
Counter Columns
Create a Counter Column Table that counts "upvote" and "downvote" events.
cqlsh:twotter> CREATE TABLE votes ( user_id int, msg_created_on bigint, upvote counter, downvote counter, PRIMARY KEY (user_id, msg_created_on) );
![Page 43: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/43.jpg)
Counter Columns
cqlsh:twotter>
UPDATE votes SET upvote = upvote + 1 WHERE user_id = 101
AND msg_created_on = 1234;
cqlsh:twotter>
UPDATE votes SET downvote = downvote + 2 WHERE user_id = 101
AND msg_created_on = 1234;
cqlsh:twotter> SELECT * FROM votes;
![Page 44: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/44.jpg)
sstable2json utility tool
$ sstable2json var/lib/cassandra/data/twotter/users/*.db > *.json
X MB.db file
2X MB.json file
![Page 45: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/45.jpg)
Exercise: sstable2json
● Insert a few records● Flush the users column family to disk and create a json
representation of a *.db file.
![Page 46: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/46.jpg)
Solution: sstable2json
$ nodetool flush twotter users$ sstable2json /var/lib/cassandra/data/twotter/users/twotter-users-jb-1-Data.db > twotter-users.json$ cat twotter-users.json [{"key": "00000069","columns": [["","",1384963716697000], ["email","[email protected]",1384963716697000], ["name","gerd",1384963716697000]]},{"key": "00000068","columns": [["","",1384963716685000], ...
![Page 47: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/47.jpg)
CQL v3.1.0(New in Cassandra 2.0)
● IF keyword● Lightweight transactions (“Compare-And-Set”)● Triggers (experimental!!)● CQL paging support● Drop column support● SELECT column aliases● Conditional DDL● Index enhancements● cqlsh COPY
![Page 48: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/48.jpg)
IF Keyword
cqlsh> DROP KEYSPACE twotter;
cqlsh> DROP KEYSPACE twotter;
Bad Request: Cannot drop non existing keyspace 'twotter'.cqlsh> DROP KEYSPACE IF EXISTS twotter;
![Page 49: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/49.jpg)
Lightweight Transactions
● Compare And Set (CAS)● Example: without CAS, two users attempting
to create a unique user account in the same cluster could overwrite each other’s work with neither user knowing about it.
Source: http://www.datastax.com/documentation/cassandra/2.0/webhelp/cassandra/dml/dml_about_transactions_c.html
![Page 50: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/50.jpg)
Lightweight Transactions
1. Register a new usercqlsh:twotter>
INSERT INTO users (id, name, email)
VALUES (110, 'franz', '[email protected]')
IF NOT EXISTS;
2. Perform a CAS reset of Karl’s email.cqlsh:twotter>
UPDATE users
SET email = '[email protected]' WHERE id = 110 IF email = '[email protected]';
![Page 51: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/51.jpg)
Exercise: Lightweight Transactions
● Perform a failing CAS e-mail reset:cqlsh:twotter>
UPDATE users SET email = '[email protected]' ...
![Page 52: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/52.jpg)
Exercise: Lightweight Transactions
● Perform a failing CAS e-mail reset:cqlsh:twotter>
UPDATE users SET email = '[email protected]' WHERE id = 110 IF email = '[email protected]';
[applied] | email
-----------+-------------
False | [email protected]
![Page 53: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/53.jpg)
Exercise: Lightweight Transactions
● Write a password reset method by using an expiring password_reset_token column and a CAS password update query.
![Page 54: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/54.jpg)
Exercise: Lightweight Transactionscqlsh:twotter>UPDATE users USING TTL 77 SET password_reset_token = 'abc-xyz-123' WHERE id = 110;
cqlsh:twotter>UPDATE users SET password = 'geheim!' WHERE id = 110 IF password_reset_token = 'abc-xyz-123';
![Page 55: Apache Cassandra Lesson: Data Modelling and CQL3](https://reader034.vdocuments.site/reader034/viewer/2022052212/554f96b3b4c905ad218b4688/html5/thumbnails/55.jpg)
Create a Trigger(experimental feature)
● Triggers are written in Java.● Triggers are currently an experimental feature
in Cassandra 2.0. Use with caution!
cqlsh:twotter>
CREATE TRIGGER myTrigger ON users USING 'org.apache.cassandra.triggers.InvertedIndex'