• Nie Znaleziono Wyników

Posiada przyporządkowany unikalny identyfikator (klucz) wiersza

N/A
N/A
Protected

Academic year: 2022

Share "Posiada przyporządkowany unikalny identyfikator (klucz) wiersza"

Copied!
48
0
0

Pełen tekst

(1)

Bazy rodziny kolumn

(2)

Model danych

• Rodzina kolumn

Tabela to kolekcja podobnych wierszy (niekoniecznie identycznych)

• Wiersz

Wiersz to kolekcja kolumn columns

Powinien agregować porcję danych, która jest odczytywana razem

Posiada przyporządkowany unikalny identyfikator (klucz) wiersza

• Kolumna

Kolumna składa się z nazwy kolumny i wartości w kolumnie (oraz potencjalnie innych metadanych)

Agreguje wartości skalarne, ale również płaskie zbiory, listy czy mapy są dopuszczalne

(3)

Baza rodziny kolumn

• http://cassandra.apache.org/

• Właściwości

• Open-source, wysoka dostępność, skalowalność liniowa, partycjonowanie poziome (ang. sharding), replikacja typu peer-to-peer, regulowana spójność, wsparcie dla MapReduce

Zarządzany przez Apache Software Foundation

• Pierwotnie stworzony przez Facebook

• Zaimplementowany w języku Java

• Systemy operacyjne: dostępne dla wielu platform

• Pierwsze wydanie w 2008 r.

(4)

Struktura bazy danych

Instancja → przestrzeń kluczy → tabele → wiersze → kolumny

• Przestrzeń kluczy

• Tabela (rodzina kolumn)

• Kolekcja (podobnych) wierszy

Wiersze nie muszą mieć dokładnie tych samych kolumn

• Schemat tabeli musi być podany, ale może być modyfikowany później

• Wiersz

• Kolekcja kolumn

• Każdy wiersz jest jednoznacznie identyfikowalny przez wymagany klucz główny

• Kolumna

• Para klucz-wartość + inne metadane

(5)

Wartości kolumn

• Puste

null

• Wartości atomowe

Natywne typy danych ciągi znaków, liczby, daty itp.

• Krotki (ang. Tuples)

Analogia do kolekcji deksryptorów

Typy definiowane przez użytkownika (UDT)

Zbiór pól dowolnego typu

• Kolekcje

Listy, zbiory, mapy

Zagnieżdżone krotki, typy definiowane przez

użytkownika, czy kolekcje są dozwolone, jednakże tylko w trybie frozen.

(6)

Kolekcje:

Lista = uporządkowana kolekcja wartości.

• Porządek zależy od pozycji danej.

• Wartości nie muszą być unikalne.

Zbiór = kolekcja unikalnych wartości

• Wartości są wewnętrznie uporządkowane

Mapa = kolekcja par klucz-wartość

• Klucze muszą być unikalne

• Pary są wewnętrznie uporządkowane na podstawie kluczy

(7)

dane rok filmy

( 'S', 'Stallone' ) 1964 { 'Rambo', 'Niezniszczalni' }

Tabela aktorzy

id 'stallone'

'schwarzenegger ' dane rok

( 'A', 'Schwarzenegger' ) 1966 filmy

{ 'Niezniszczalni', 'Pamięć absolutna', 'Conan' }

dane rok filmy

( 'W', 'Snipes' ) 1973 { 'Pasażer 57' } 'snipes'

'norris' dane rok filmy

( 'C', 'Norris' ) 1936 { 'Strażnik Teksasu' }

(8)

Tabela filmy

tytul rok aktorzy gatunki

'Nietykalni' 2011 null [ 'komedia', 'dramat' ]

tytul rezyser rok

'Niezniszczalni' ( 'Sylvester', 'Stallone' ) 2010

wlasciwosci aktorzy

{ dlugosc: 100 } { 'stallone': 'Sylvester', 'jet': ‚Li' } Id

'nietykalni'

'niezniszczalni'

'tombraider' tytul rok

'Tomb Raider’ 2001

'hobbit' tytul rok actors gatunki

'Hobbit' 2012 {} [ 'fantasy', 'przygoda' ]

(9)

• Dodatkowe dane związane z…

-

Całą kolumną w przypadku atomowych danych, lub poszczególnego, indywidualnego elementu kolekcji

Czas życia (ang. Time-to-live (TTL))

- Po pewnym czasie (określonej liczbie sekund) dana kolumna lub element jest automatycznie niszczony

Czas modyfikacji (ang. Timestamp)

- Czas dokonania ostatniej modyfikacji

- Przyporządkowywany automatycznie lub ręcznie

• Zarówno porcja „zwykłych danych” jak i dodatkowe mogą być przedmiotem zapytań.

- Nie dotyczy to kolekcji i jej elementów

(10)

CQLSH

Interaktywna konsola do wydawania komend

• bin/cqlsh

Wykorzystuje CQL (Cassandra Query Language) Sterowniki klienckie:

• Dostarczone przez społeczność

• Dostępne dla wielu różnych języków programowania

np.

Java, Python, Ruby, PHP, C++, Scala, Erlang, itp.

(11)

CQL = Cassandra Query Language

• Deklaratywny język zapytań

Zainspirowany przez SQL

Wyrażenia DDL

CREATE KEYSPACE– stwórz nową przestrzeń kluczy CREATE TABLE– stwórz nową tabelę

Wyrażenia DML

SELECT– wybiera wiersze z pojedynczej tabeli INSERT– dodaje wiersze do tabeli

UPDATE– aktualizuje kolumny w wierszach DELETE– usuwa wiersze z tabeli

(12)

CREATE KEYSPACE

CREATE KEYSPACE CREATE KEYSPACE

IF NOTNOT EXISTSEXISTS

keyspace name keyspace name

WITHWITH option nameoption name = option valueoption value

Tworzy nową przestrzeń kluczy

Opcja Replication jest obowiązkowa

SimpleStrategy (tylko jeden poziom replikacji) NetworkTopologyStrategy

(indywidualny poziom replikacji dla każdego centrum danych)

CREATE KEYSPACE

WITH replication = {'class'moviedb: 'SimpleStrategy', 'replication_factor': 3}

Przestrzeń kluczy = Baza danych

(13)

USE keyspace name

USE

• Zmienia aktualnie używaną przestrzeń kluczy

USE keyspace name

DROP KEYSPACE

• Usuwa przestrzeń kluczy, wszystkie jej tabele i dane.

DROP

DROP KEYSPACEKEYSPACE keyspace namekeyspace name

IF EXISTSEXISTS

ALTER KEYSPACE

• Modyfikuje opcje związane z daną przestrzenią kluczy

(14)

CREATE TABLE

Tworzy nową tabelę w aktualnej przestrzeni kluczy

Każda tabela musi mieć dokładnie 1 klucz główny podany

• Żadna z kolumn nie jest wymagana (poza kluczem głównym)

(15)

Przykłady tabel aktorzy i filmy

CREATE TABLE aktorzy ( id TEXT PRIMARY KEY, dane TUPLE<TEXT, TEXT>, rok SMALLINT,

filmy SET<TEXT>

)

CREATE TABLE filmy( id TEXT,

tytul TEXT,

rezyser TUPLE<TEXT, TEXT>, rok SMALLINT,

aktorzy MAP<TEXT, TEXT>, gatunki LIST<TEXT>,

kraje SET<TEXT>, wlasciwosci details, PRIMARY KEY(id) )

(16)

Klucze główne posiadają dwie części

Obowiązkowy klucz partycjonujący

Przynajmniej 1 kolumna

Definiuje jak poszczególne wiersze są dystrybułowane na partycje

Opcjonalne kolumny grupujące

• Definiują kolejność w jakiej poszczególne wiersze są lokalnie przechowywane

Definicja klucza głównego na poziomie kolumny

• Dana kolumna (pojedyncza) staje się kluczem partycjonującym

• Nie ma opcjonalnych kolumn grupujących

(17)

Definicja klucza głównego na poziomie tabeli

• Pierwsza kolumna/wszystkie kolumny (w nawiasach klamrowych) stają się kluczem partycjonującym

• Wszystkie pozostałe kolumny (jeśli są) przyjmują rolę kolumn grupujących

PRIMARY

PRIMARY KEYKEY (

column name column name

( column name

,

) , column name

)

(18)

DROP TABLE

• Usuwa tabelę wraz z danymi które zawiera

DROP

DROP TABLETABLE table nametable name

EXISTS IF EXISTS

TRUNCATE TABLE

• Zachowuję tabelę, ale usuwa zawarte w niej dane

TRUNCATE TRUNCATE

TABLE TABLE

table name table name

ALTER TABLE

• Umożliwia zmianę, dodanie bądź usunięcie kolumn tabeli

(19)

Typy kolumn

• Natywne typy

Krotki

Kolekcje: listy, zbiory, mapy

Typy definiowane przez użytkownika

native type native type

TUPLE

TUPLE < typetype

,

>

LISTLIST < typetype >

SETSET < typetype >

MAP typetype , typetype >

user defined type MAP <

user defined type

(20)

Natywne typy danych

tinyint, smallint, int, bigint

Liczby całkowite ze znakiem(1B, 2B, 4B, 8B)

varint

Liczba całkowita o ustalonej precyzji

decimal

Liczba rzeczywista o ustalonej precyzji

float, double

Liczby rzeczywiste (4B, 8B)

boolean

Wartości boolowskie: true i false

(21)

Natywne typy danych

text, varchar

Ciąg znaków wykorzystujący kodowanie UTF8

Wyrażony w pojedynczych apostrofach (nie cudzysłów)

• ascii

Ciąg znaków wykorzystujący kodowanie ASCII

date, time, timestamp

Data, czas i timestamp

Np. '2016-12-05', '2016-12-05 09:15:00', 1480929300

(22)

Natywne typy danych

counter– 8B liczba całkowita (ze znakiem)

Wpiera tylko 2 operacje: inkrementacje i dekrementacje –

tj. nie można ustawić konkretnej wartości licznika

Restrykcje:

Liczniki nie mogą być częścią klucza głównego

Albo wszystkie kolumny (poza kluczem głównym) są licznikami, albo żaden z nich

Czas życia (TTL) nie jest wspierany

• blob– dowolny zestaw danych (binarnych)

• inet– adres IP (zarówno IPv4 jak i IPv6)

• Inne: uuid

https://cassandra.apache.org/doc/latest/cql/types.html

(23)

TUPLE type

Kropki (ang. Tuples)

• Deklaracja

TUPLE < type >

,

• Literały

(

term term

,

)

Np. ( 'Numer', '123-456-789' )

(24)

SET type

termterm

,

Zbiory

• Deklaracja

SET < type >

• Literały

{ }

Np. { 'Niezniszczalni', 'Rambo' }

(25)

LIST type

term

Listy

• Deklaracja

LIST < type >

• Literały

[ ]

term

,

Np. [ 'komedia', 'dramat' ]

(26)

MAP type type

Mapy

• Deklaracja

MAP < type , type >

• Literały

{ }

Np. { 'reżyser': 'Sylvester Stallone' }

(27)

CREATE TYPE type name field name

Typy definiowane przez użytkownika (UDT)

• Definicja

CREATE TYPE ( typetype

,

)

field name term

E.g. CREATE TYPE details ( dlugosc SMALLINT, adnotacja TEXT )

• Literały

{ }

: term

,

Np. { dlugosc: 100 }

Mogą być frozen

(28)

Wyrażenie SELECT

Wybiera pasujące wiersze z pojedynczej tabeli

SELECT clause

SELECT clause FROM clauseFROM clause

WHERE clause WHERE clause

GROUP BY clause

GROUP BY clause ORDER BY clauseORDER BY clause LIMIT clauseLIMIT clause

ALLOW

ALLOW FILTERINGFILTERING

(29)

Klauzule dozwolone w wyrażeniu SELECT:

• SELECT– kolumny lub wartości które powinny się pojawić w rezultacie

• FROM– określenie pojedynczej tabeli do której się odnosi zapytanie

• WHERE– warunki filtrowania nałożone na wiersze tabeli

• GROUP BY– kolumny użyte do grupowania wierszy

• ORDER BY– kryteria definiujące kolejność wierszy w rezultacie

• LIMIT– liczba wierszy jaka powinna być podana w rezultacie Przykład

SELECT id, tytul, aktorzy FROM filmy

WHERE rok = 2011 AND gatunki CONTAINS 'komedia'

(30)

Klauzula FROM clause

Definiuje pojedynczą tabelę do której będą wysyłane zapytania

Z aktualnej/wybranej przestrzeni kluczy

• Złączenie wielu tabel nie jest możliwe

FROMFROM

keyspace name

keyspace name .

table name table name

(31)

Klauzula WHERE

Jedno lub więcej kryteriów jakie wiersz musi spełniać by zostać dołączony do rezultatu zapytania

WHERE relation

AND WHERE relation

AND

Tylko proste warunki mogą zostać zapisane oraz nie wszystkie relacje/kryteria są dozwolone:

Tylko kolumny wchodzące w skład klucza głównego mogą zostać uwzględnione

Chyba, że istnieją pomocnicze struktury indeksujące Problem w przypadku niektórych relacji

(32)

Klauzula WHERE : relacje

column name

column name

term

term

CONTAINS

CONTAINS KEY column name

(

=

) !=

, <

<=

=>

>

IN ( )

,

term

(33)

Klauzula WHERE: relacje

Porównanie

=, !=, <, <=, =>, >

IN

Zwraca true jeśli wartość zawiera się w enumerowanej strukturze

CONTAINS

Może być używana w kolekcjach (listy, zbiory, mapy) Zwraca true, gdy kolekcja zawiera danych element

CONTAINS KEY

Może być używany tylko dla map

Zwraca true jeśli mapa zawiera dany klucz

(34)

Klauzula SELECT

Definiuje kolumny lub wartości jakie mają być uwzględnione w rezultacie

* Oznacza wszystkie kolumny Aliasy definiowane są przez AS

SELECT SELECT

DISTINCT

*

selector selector

AS identifier

,

DISTINCT – powielone wiersze są usuwane

(35)

Klauzula SELECT:

COUNT(*)

Liczba wierszy w grupie (patrz GROUP BY)

WRITETIME i TTL

Wybiera czas modyfikacji/ pozostały czas życia danej kolumny

Nie może zostać użyte na kolekcji i jej elementach

Nie może zostać użyte w innych klauzulach(np. WHERE)

(36)

Klauzula ORDER BY

Definiuje kolejność wierszy zwróconych w rezultacie

• Tylko uporządkowania wyznaczane przez kolumny grupujące są dozwolone!

ORDER BY

ORDER BY column namecolumn name

ASC

DESC ASC

DESC

,

Klauzula LIMIT

Ogranicza liczbę wierszy w zwróconym rezultacie

LIMIT

LIMIT integerinteger

(37)

Klauzula GROUP BY

Grupuje wiersze w tabeli na podstawie określonych kolumn

• Tylko grupowania na kolumnach klucza głównego są dozwolone!

GROUP BY

GROUP BY column namecolumn name

,

Jeżeli w klauzule SELECT zostałaby wymieniona bezpośrednio kolumna, która nie bierze udziału w grupowaniu (tzn. nie

będąca objętą funkcją agregującą), zawsze tylko pierwsza

wartość zostanie zwrócona.

(38)

Klauzula GROUP BY: agregacje

• Natywne agregacje

COUNT(kolumna)

Liczba wszystkich wartości w danej kolumnie Wartości null są ignorowane

MIN(kolumna), MAX(kolumna)

Minimalna / maksymalna wartość w kolumnie

SUM(kolumna)

Suma wszystkich wartości w danej kolumnie

AVG(kolumna)

Średnia arytmetyczna wszystkich wartości w danej kolumnie

• Funkcje agregacyjne definiowane przez użytkownika

(39)

Modyfikator ALLOW FILTERING

Domyślnie, tylko nie-filtrujące zapytania są dozwolone

Tzn. zapytania dla których

Liczba wierszy przeczytanych liczba wierszy zwróconych Takie zapytania mają przewidywalną złożoność

Ich czas wykonania jest wprost proporcjonalny do rozmiaru danych

ALLOW FILTERING umożliwia częściowe filtrowanie

(40)

Wyrażenie INSERT

Wstawia wiersz do danej tabeli

Gdy wiersz o podanym kluczu głównym już istnieje, jest on aktualizowany

• Przynajmniej wartości dla kolumn klucza głównego muszą być określone

• Nazwy kolumn muszą być zawsze podane jawnie

INSERT

INSERT INTOINTO

keyspace name

keyspace name .

table name table name

column name ( column name

,

VALUES

) VALUES ( termterm

,

)

IF NOTNOT EXISTSEXISTS USINGUSING update parametersupdate parameters

(41)

Przykład

INSERT INTO filmy (id, tytul, rezyser, rok, aktorzy, gatunki) VALUES ( 'zielonamila',

'Zielona Mila',

('Frank', 'Darabont'), 1999,

{ 'hanks': 'Tom', 'morse': 'David' }, [ 'komedia', 'dramat' ]

)

USING TTL 86400

(42)

Wyrażenie UPDATE

Aktualizuje wiersze w danej tabeli

Jeżeli wiersze o podanym kluczu jeszcze nie istnieje, zostanie on dodany

• Co najmniej wszystkie kolumny wchodzące w skład

klucza głównego muszą być podane w klauzule WHERE

UPDATE UPDATE

keyspace name

keyspace name .

table name table name

USING

USING update parametersupdate parameters

SETSET assignmen t

assignment

,

WHERE clause WHERE clause

(43)

Wyrażenie UPDATE: przypisania

• Określają modyfikacje jakie są dozwolone

• Dozwolone przypisania:

Wartość całej kolumny jest zmieniana

Wartość elementu mapy lub listy jest zmieniana

Elementy listy są numerowane od 0

• Wartość kolumny zawierającej typ definiowany przez użytkownika jest zmieniana

column name column name

column name [ term

column name . field name ]

= term

(44)

Przykład

UPDATEfilmy SET

rok = 2010,

rezyser = ('Sylwester', 'Stallone'),

aktorzy = { 'stallone': 'Barney Ross', 'schwarzenegger': 'Trench' }, gatunki = [ 'akcja' ], kraje = { 'USA' }

WHERE id = 'niezniszczalni'

UPDATEfilmy SET

aktorzy['norris'] = 'Chuck’, gatunki[1] = 'komedia', wlasciwosci.dlugosc = 99 WHERE id = 'niezniszczalni'

(45)

Przykład: modyfikacja elementów kolekcji

UPDATEfilmy SET

aktorzy = aktorzy + { 'itie': 'Giselle' }, gatunki = [ 'dramat' ] + gatunki, kraje = kraje + { 'BR' }

WHERE id = 'niezniszczalni' UPDATEfilmy

SET

aktorzy = aktorzy - { 'vicander', ‚west' }, gatunki = gatunki - [ 'dramat', 'sci-fi' ], kraje = kraje - { 'DE' }

WHERE id = 'tombraider'

(46)

Parametry UPDATE

TTL: czas życia

0, null lub pusty dla trwałych wartości

TIMESTAMP: czas zapisu

TIMESTAMP TIMESTAMP

TTL

integer integer

AND TTL

AND

• Ma to wpływ tylko na nowo - dodane / aktualizowane

wartości

(47)

Wyrażenie DELETE

Usuwa pasujące wiersze /

Zachowuje wiersze, ale usuwa wybrane kolumny / Zachowuje kolumny, ale usuwa elementy kolekcji

lub pola z wartościami definiowanymi przez użytkownika

DELETE DELETE

column name

column name [ term

column name . field name ]

,

FROM clause

FROM clause WHERE clauseWHERE clause

(48)

Dziękuję za uwagę!

Cytaty

Powiązane dokumenty

13. Serwis – system umożliwiający zakup biletów do CAL za pośrednictwem sieci Internet, dostępny na stronie www.bajka.kluczbork.pl. Regulamin określa zasady

Płyty styropianowe mogą być mocowane do ścian bez łączników mechanicznych, wyłącznie za pomocą zaprawy do wykonywania warstwy zbrojącej , pod warunkiem,

Branżowa Szkoła Specjalna I stopnia Nr 12, Kraków Spadochroniarzy 1 Szkoła Podstawowa Specjalna Nr 9, Kraków Spadochroniarzy 1 Szkoła Policealna Specjalna Nr 7,

Such a light treatment results in double the record benchmark photocurrent density for undoped and uncatalyzed BiVO 4 at 1.23 V RHE , a 0.3 V cathodic shi of the photocurrent

To, co dla orędowników postępu staje się wrogie (komercyjne media, kultura i wiedza głównego nurtu), dla Keena jest ostoją oraz bastionem starej, ale sprawdzonej już

Fundamentalna zasada dążenia do ustalenia w toku postępowania kar- nego prawdy materialnej nakłada na organy procesowe obowiązek realiza- cji czynności i oceny materiału

kwadratowej rozkładu ładunku w protonie (czyli pewnej miary jego rozciągłości). Wkład ten jest niewielki, ale większy niż dokładność pomiarów spektroskopowych i szacowany

Przedmioty metalowe wchodzące w skład depozytu poddanego szczegółowym badaniom osadniczym: 1-10 – Główczyce, kat... Przedmioty metalowe wchodzące w skład depozytu