apache cassandra, part 3 – machinery, work with cassandra
Post on 25-May-2015
3.972 Views
Preview:
DESCRIPTION
TRANSCRIPT
April 12, 2023 www.ExigenServices.com
Apache Cassandra, part 3 – machinery, work with Cassandra
2 www.ExigenServices.com
V. Architecture (part 2)
3 www.ExigenServices.com
SEDA Architecture
SEDA – Staged event-driven architecture
1. Every unit of work is split into several stages that are executed in parallel threads.
2. Each stage consist of input and output event queue, event handler and stage controller.
4 www.ExigenServices.com
SEDA Architecture advantages
Well conditioned system load
Preventing resources from being overcommitted.
5 www.ExigenServices.com
SEDA in Cassandra - Usages
1. Read
2. Mutation
3. Gossip
4. Anti – Entropy
….
6 www.ExigenServices.com
SEDA in Cassandra - Design
Stage Manager presents Map between stage names and Java 5 thread pool executers.
Each controller with queue is presented by ThreadPoolExecuter that can be configured through JMX.
7 www.ExigenServices.com
VI. Working with Cassandra
8 www.ExigenServices.com
Installing and launching Cassandra
Download from http://cassandra.apache.org/download/
9 www.ExigenServices.com
Installing and launching Cassandra
Launching server: bin/cassandra.bat
– use “-f” key to run sever in foreground, so that all of the server logs will print to standard out
– is started with single node cluster called “Test Cluster” listening on port 9160
10 www.ExigenServices.com
Installing and launching Cassandra
Starting command-line client interface:bin/cassandra-cli.bat
– you see [username@keyspace] at the beginning of every line
11 www.ExigenServices.com
Creating a cluster
In configuration file cassandra.yaml specify:
seeds – the list of seeds for the cluster rpc_address and listen_address – network
addresses
12 www.ExigenServices.com
Creating a cluster
initial_token – defining the node’s token range auto_bootstrap – enables auto-migration of data
to the new node
13 www.ExigenServices.com
nodetool ring
Use nodetool for view configuration
~$ nodetool -h localhost -p 8080 ring
Address Status State Load Owns Range Ring
850705…
10.203.71.154 Up Normal 2.53 KB 50.00 0 |<--|
10.203.55.186 Up Normal 1.33 KB 50.00 850705… |-->|
14 www.ExigenServices.com
Connecting to server
Connect from command line:connect <HOSTNAME>/<PORT> [<USERNAME>
‘<PASSWORD>’];
Examples:connect localhost/9160;connect 127.0.0.1/9160 user ‘password’;
Connect when staring command line client:cassandra-cli –h,––host <HOSTNAME>
–p,––port <PORT>–k,––keyspace <KEYSPACE>–u,––username <USERNAME>–p,––password <PASSWORD>
15 www.ExigenServices.com
Describing environment
show cluster name;
show keyspaces;
show api version;
describe cluster;
describe keyspace [<KEYSPACE>];
16 www.ExigenServices.com
Create keyspace
create keyspace <KEYSPACE>; create keyspace <KEYSPACE> with
<ATTR1> = <VAL1> and<ATTR2> = <VAL2> ...;
Attributes:– placement_strategy– replication_factor– …
17 www.ExigenServices.com
Create keyspace
Example:create keyspace Keyspace1 with placement_strategy =
‘org.apache.cassandra.locator.RackUnawareStrategy’ and replication_factor = 4;
18 www.ExigenServices.com
Update keyspace
Update attributes of created keyspace:
update keyspace <KEYSPACE> with<ATTR1> = <VAL1> and <ATTR2> = <VAL2> ...;
19 www.ExigenServices.com
Switch to keyspace
use <KEYSPACE>; use <KEYSPACE> [<USERNAME> ‘<PASSWORD>’];
If you don’t specify username and password then credentials supplied to the ‘connect’ statement will be used
If the server doesn’t support authentication it will ignore credentials
20 www.ExigenServices.com
Switch to keyspace
Example:
use Keyspace1 user1 ‘qwerty123’;
When you use keyspace you’ll see [user1@Keyspace1] at the beginning of every line
21 www.ExigenServices.com
Create column family
create column family <COL_FAMILY>; create column family <COL_FAMILY> with
<ATTR1> = <VAL1> and<ATTR2> = <VAL1> ...;
Example:create column family Users with column_type = Super andcomparator = UTF8Type androws_cached = 1000;
22 www.ExigenServices.com
Update column family
When column family is created you can update its attributes:
update column family <COL_FAMILY> with<ATTR1> = <VAL1> and<ATTR2> = <VAL1> ...;
23 www.ExigenServices.com
Comparators and validators
Comparators – compare column names Validators – validate column values
24 www.ExigenServices.com
Comparators and validators
You can specify comparator for column family and all subcolumns in column family (one for all)
You can specify validators for each known column of column family
You can specify default validator for column family that will be used for columns for which validators aren’t specified
You can specify key validator which will validate row keys
25 www.ExigenServices.com
Attributes of column family
– column_type: can be Standard or Super(default - Standard)
– comparator: specifies how column names will be compared for sort order
– column_metadata: defines the validation and indexes for known columns
– default_validation_class: validator to use for values in columns which are not listed in the column_metadata. (default – BytesType)
– key_validation_class: validator for keys
26 www.ExigenServices.com
Column metadata
You can define validators for each known column in the family
create column family User withcolumn_metadata = [
{column_name: name, validation_class: UTF8Type},{column_name: age, validation_class:
IntegerType}, {column_name: birth, validation_class: UTF8Type}
];
Columns not listed in this section are validated with default_validation_class
27 www.ExigenServices.com
Secondary indexes
Allows queries by value
get users where name = ‘Some user';
Can be created in background
28 www.ExigenServices.com
Creating index
Define it in column metadata
For example in cassandra-cli:
create column family users with comparator=UTF8Type and column_metadata=[{
column_name: birth_date, validation_class: LongType, index_type: KEYS
}];
29 www.ExigenServices.com
Some restrictions
Cassandra use hash indexes instead of btree
indexes.
Thus, in where condition at least one indexed field
with operator “=“ must be present
So, you can’t use
get users where birth_date > 1970;
but can
get users where birth_date = 1990 and karma > 50;
30 www.ExigenServices.com
Index types
KEYS
BITMAP (will be supported in future releases)
Id GenderBitmaps
F M
1 Female 1 0
2 Male 0 1
3 Male 0 1
4 Unspecified 0 0
5 Female 1 0
31 www.ExigenServices.com
Writing data
To write data use set command:
set Customers[‘ivan’][‘name’] = ‘Ivan’;
set Customers[‘makar’][‘info’][‘age’] = 96;
32 www.ExigenServices.com
Reading data
To read data use get command:get Customers[‘ivan’][‘name’];
- this will display ‘Ivan’
get Customers[‘makar’];- this will display all columns for key ‘makar’
33 www.ExigenServices.com
Reading data
To list a range of rows use list command:list Customers;list Customers[a:];list Customers[a:c] limit 40;
- you can specify limit of rows that will be displayed (default - 100)
34 www.ExigenServices.com
Reading data
To get columns number use count command:count Customers[‘ivan’]
- this will display number of columns for key ‘ivan’
35 www.ExigenServices.com
Deleting data
To delete a row, a column or a subcolumn use del command:del Customers[‘ivan’];
- this will delete all columns for key ‘ivan’
del Customers[‘ivan’][‘name’];- this will delete column name for key ‘ivan’
del Customers[‘ivan’][‘accounts’][‘2312784829312343’];- this will delete a subcolumn with an account number from ‘accounts’ column for key ‘ivan’
36 www.ExigenServices.com
Deleting data
To delete all data in a column family use truncate command:
truncate Customers;
37 www.ExigenServices.com
Drop column family or keyspace
drop column family Customers;
drop keyspace Keyspace1;
38 www.ExigenServices.com
Q&A
39 www.ExigenServices.com
Resources
Home of Apache Cassandra Project http://cassandra.apache.org/
Apache Cassandra Wiki http://wiki.apache.org/cassandra/ Documentation provided by DataStax
http://www.datastax.com/docs/0.8/ Good explanation of creation secondary indexes
http://www.anuff.com/2010/07/secondary-indexes-in-cassandra.html
Eben Hewitt “Cassandra: The Definitive Guide”, O’REILLY, 2010, ISBN: 978-1-449-39041-9
40 www.ExigenServices.com
Authors
Lev Sivashov - lsivashov@gmail.com
Andrey Lomakin - lomakin.andrey@gmail.com, twitter: @Andrey_LomakinLinkedIn: http://www.linkedin.com/in/andreylomakin
Artem Orobets – enisher@gmail.comtwitter: @Dr_EniSh
Anton Veretennik - tennik@gmail.com
top related