apache cassandra, part 3 – machinery, work with cassandra

40
5/24/22 www.ExigenServices.com Apache Cassandra, part 3 – machinery, work with Cassandra

Upload: andrey-lomakin

Post on 25-May-2015

3.972 views

Category:

Technology


1 download

DESCRIPTION

Aim of this presentation to provide enough information for enterprise architect to choose whether Cassandra will be project data store. Presentation describes each nuance of Cassandra architecture and ways to design data and work with them.

TRANSCRIPT

Page 1: Apache Cassandra, part 3 – machinery, work with Cassandra

April 12, 2023 www.ExigenServices.com

Apache Cassandra, part 3 – machinery, work with Cassandra

Page 2: Apache Cassandra, part 3 – machinery, work with Cassandra

2 www.ExigenServices.com

V. Architecture (part 2)

Page 3: Apache Cassandra, part 3 – machinery, work with Cassandra

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.

Page 4: Apache Cassandra, part 3 – machinery, work with Cassandra

4 www.ExigenServices.com

SEDA Architecture advantages

Well conditioned system load

Preventing resources from being overcommitted.

Page 5: Apache Cassandra, part 3 – machinery, work with Cassandra

5 www.ExigenServices.com

SEDA in Cassandra - Usages

1. Read

2. Mutation

3. Gossip

4. Anti – Entropy

….

Page 6: Apache Cassandra, part 3 – machinery, work with Cassandra

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.

Page 7: Apache Cassandra, part 3 – machinery, work with Cassandra

7 www.ExigenServices.com

VI. Working with Cassandra

Page 8: Apache Cassandra, part 3 – machinery, work with Cassandra

8 www.ExigenServices.com

Installing and launching Cassandra

Download from http://cassandra.apache.org/download/

Page 9: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 10: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 11: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 12: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 13: Apache Cassandra, part 3 – machinery, work with Cassandra

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… |-->|

Page 14: Apache Cassandra, part 3 – machinery, work with Cassandra

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>

Page 15: Apache Cassandra, part 3 – machinery, work with Cassandra

15 www.ExigenServices.com

Describing environment

show cluster name;

show keyspaces;

show api version;

describe cluster;

describe keyspace [<KEYSPACE>];

Page 16: Apache Cassandra, part 3 – machinery, work with Cassandra

16 www.ExigenServices.com

Create keyspace

create keyspace <KEYSPACE>; create keyspace <KEYSPACE> with

<ATTR1> = <VAL1> and<ATTR2> = <VAL2> ...;

Attributes:– placement_strategy– replication_factor– …

Page 17: Apache Cassandra, part 3 – machinery, work with Cassandra

17 www.ExigenServices.com

Create keyspace

Example:create keyspace Keyspace1 with placement_strategy =

‘org.apache.cassandra.locator.RackUnawareStrategy’ and replication_factor = 4;

Page 18: Apache Cassandra, part 3 – machinery, work with Cassandra

18 www.ExigenServices.com

Update keyspace

Update attributes of created keyspace:

update keyspace <KEYSPACE> with<ATTR1> = <VAL1> and <ATTR2> = <VAL2> ...;

Page 19: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 20: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 21: Apache Cassandra, part 3 – machinery, work with Cassandra

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;

Page 22: Apache Cassandra, part 3 – machinery, work with Cassandra

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> ...;

Page 23: Apache Cassandra, part 3 – machinery, work with Cassandra

23 www.ExigenServices.com

Comparators and validators

Comparators – compare column names Validators – validate column values

Page 24: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 25: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 26: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 27: Apache Cassandra, part 3 – machinery, work with Cassandra

27 www.ExigenServices.com

Secondary indexes

Allows queries by value

get users where name = ‘Some user';

Can be created in background

Page 28: Apache Cassandra, part 3 – machinery, work with Cassandra

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

}];

Page 29: Apache Cassandra, part 3 – machinery, work with Cassandra

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;

Page 30: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 31: Apache Cassandra, part 3 – machinery, work with Cassandra

31 www.ExigenServices.com

Writing data

To write data use set command:

set Customers[‘ivan’][‘name’] = ‘Ivan’;

set Customers[‘makar’][‘info’][‘age’] = 96;

Page 32: Apache Cassandra, part 3 – machinery, work with Cassandra

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’

Page 33: Apache Cassandra, part 3 – machinery, work with Cassandra

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)

Page 34: Apache Cassandra, part 3 – machinery, work with Cassandra

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’

Page 35: Apache Cassandra, part 3 – machinery, work with Cassandra

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’

Page 36: Apache Cassandra, part 3 – machinery, work with Cassandra

36 www.ExigenServices.com

Deleting data

To delete all data in a column family use truncate command:

truncate Customers;

Page 37: Apache Cassandra, part 3 – machinery, work with Cassandra

37 www.ExigenServices.com

Drop column family or keyspace

drop column family Customers;

drop keyspace Keyspace1;

Page 38: Apache Cassandra, part 3 – machinery, work with Cassandra

38 www.ExigenServices.com

Q&A

Page 39: Apache Cassandra, part 3 – machinery, work with Cassandra

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

Page 40: Apache Cassandra, part 3 – machinery, work with Cassandra

40 www.ExigenServices.com

Authors

Lev Sivashov - [email protected]

Andrey Lomakin - [email protected], twitter: @Andrey_LomakinLinkedIn: http://www.linkedin.com/in/andreylomakin

Artem Orobets – [email protected]: @Dr_EniSh

Anton Veretennik - [email protected]