Transcript 8. NoSQL

Hерелационe базe података

1

 ◦ ◦ ◦ У савременом развоју софтвера термин нерелационе базе података се односи на системе за управљање колекцијама података које: немају строгу статичку структуру података немају исцрпну проверу услова интегритета не користе упитни језик SQL 2

 Недостатак релационих база података: релативно висока цена читања ◦ ◦ ◦ ◦ ◦ због нередундантности и строге структуре података отежано дистрибуирање пре свега због конзистентности података скупа промена структуре због повезаности структуре са употребом и оптимизацијама 3

•     Данашње веб апликације сусрећу се са следећим проблемима: конкурентни корисници ◦ милиони количина података ◦ дневна производња терабајта и петабајта података Обрада ◦ ◦ ◦ свака активност корисника захтева неку обраду података Оптерећење непредвидив пораст оптерећења неравномерно оптерећење ◦ ◦

велика динамичност

непрекидно додавање нових могућности промена постојећих компоненти 4

  Нема јединствене дефиниције, али се може рећи: НРБП је БП која ◦ не почива на релационом моделу података ◦ ◦  или га се бар не држи чврсто лако се дистрибуира хоризонтално је скалабилна ◦ ◦ ◦ ◦ ◦  тј. лако подноси значајне промене шеме Друге честе карактеристике: без статичке схеме лака репликација једноставан API евентуална конзистентност  почива на скупу принципа BASE а не ACID омогућава огромне количине података 5

     Често се НРБП означавају као података NoSQL базе ◦ ◦ ◦ изворно, одступање од SQL-а, као симбола РБП данас многе теже да имају језик налик на ...па се често тумачи као “ not only SQL” SQL...

Сложене структуре података у специфичним доменима објектне базе података ◦ ◦ Висок ниво дистрибуирања ◦ различите нерелационе базе података Неопходне високе перформансе ◦ меморијске базе података Огромне количине података ниске сложености различите врсте матричних база података 6

  ◦ ◦ ◦ Велики број нерелационих база података почива на моделу каталога Основна колекција је каталог Елемент каталога може бити проста или сложена вредност Структура сложене вредности зависи од имплементације ◦ ◦  обично је неки вид торке Вредностима се приступа по кључу Базу података чини скуп каталога Обично се назива модел кључ-вредност 7

 ◦ ◦ ◦ ◦ ◦

Иако концепти могу да подсећају на РБП (каталог-табела, вредност-ред,...) заправо постоје значајне разлике структура вредности обично није строго предефинисана

обично је нетипизирана не инсистира се на нередундантности практично ретко има природних кључева не постоји реф. Интегритет ...

8

        Нерелациони СУБП Примарно намењен за ДБП Динамична шема Почива на проширеном моделу каталога Иницијално развијен од стране

Facebook-а

Пројекат отвореног кода Један од главних пројеката фондације

Apache

Међу најраспрострањенијим НРСУБП-овима 9

 

Cassandra почива на моделу каталога

◦ ◦ ◦ ◦ ◦ ◦

Основни појмови су: Колона фамилија колона Суперколона фамилија суперколона Кључ простор кључева

10

Колона

◦ једна вредност, праћена временом последње измене ◦ појам колоне је близак појму атрибута код РБП ◦ тројка (име, вредност, време измене) { name: “prezime”, value: “Perić”, timestamp: 123456789 ◦ } поједностављен запис:

prezime: “Perić”

11

 ◦ ◦ ◦ Суперколона сложена вредност, без времена последње измене садржи једну или више колона не постоји еквивалент код РБП, нешто као сложени атрибут } { name: “licniPodaci”, value: { ime: { name: “ime”, value: “Pera”, timestamp: 123456789 }, prezime: { name: “prezime”, value: “Perić”, timestamp: 123456789 }, grad: { name: “grad”, value: “Niš”, timestamp: 123456789 } } 12

 Фамилија колона ◦ структура која може да садржи већи број редова (концептуално неограничено) ◦ ◦ ◦  пресликава кључ у скуп колона ред = скуп колона појам фамилије колона је близак појму табеле код РБП концептуално представља каталог редова } Autori : { ivoAndric: { ...

// pojednostavljen zapis, bez naziva i TS ime: “Ivo”, prezime: “Andrić”, }, jovanJovanovic: { ...

ime: “Jovan”, prezime: “Jovanović”, }, 13

 Простор кључева ◦ структура која садржи више фамилија колона или суперколона ◦ концептуално одговара појму базе података или шеме код РБП   Cassandra

има два нивоа угњеждености

◦ ◦ ◦ први ниво је обавезан ◦ чини га пар (име колоне, колона) ◦ један ред (слог, record) се састоји од произвољног броја парова парови су уређени само по имену колоне ред има облик каталога ред МОРА да има бар једну колону други ниво је опцион ◦ уместо да други елемент пара буде колона, то може бити колекција парова – суперколона 14

  ◦ ◦

Имена колона представљају истовремено

◦ ◦

кључеве и вредности сваки ред (или суперколона) може да садржи произвољно много колона називи колона могу да имају улогу вредности вредности колона могу да буду празне

15

16

 ◦ ◦ ◦ Свака порука представља посебну колону означена је временом писања колоне су уређене по имену, па тиме и по времену писања вредности колона су празне 17

  ◦ Назив суперколоне означава веб локацију Вредност суперколоне је колекција колона које идентификују поруке вредности колона су празне 18

   Препоручује се

Linux, али може и Windows

Неке интерфејсе према програмским језицима је лакше конфигурисати за

Linux

◦ Предуслови Java 1.6

19

20

    ◦ Командни интерфејс се покреће командом: .../bin/cassandra-cli [-host localhost -port 9160] ◦ ◦ Из командног интерфејса се излази командама quit; exit; Списак команди се може добити командом: ◦ ?; ◦ Синтакса изабране команде се може добити командом: ? < команда>; 21

  ◦ ◦ ◦ Пре било каквог рада потребно је да се успостави веза са системом који се жели користити: ◦ connect localhost/9160; После тога се могу извршавати команде, нпр.: show api version; show keyspaces; show schema; 22

     ◦ Пример прављења новог простора кључева: create keyspace Test Избор простора кључева који се користи: ◦ ◦ use Test; Прављење фамилије колона: ◦ create column family User with comparator = UTF8Type; Од верзије 0.8 подразумева се да су кључеви бројеви, али се то може променити: ◦ ◦ ◦ ◦ update column family User with key_validation_class=UTF8Type; Додавање података (не разликује се додавање од мењања): set User[’mika']['fname'] = ’Mika'; set User[’mika']['lname'] = 'Mikić'; set User[‘laza']['fname'] = ‘Laza'; set User[‘laza']['lname'] = null; 23

  

Сви подаци из фамилији колона се могу приказати са:

◦ list user;

Један ред се може прочитати са:

◦ ◦ get User[‘mika’];

Једна вредност се може прочитати са:

get user[‘mika’][‘fname’]; 24

   Типови колона се не морају дефинисати, али ако су непознати, не могу се проверавати подаци који се уносе, нити читко исписивати подаци који се читају Типови колона се могу одредити командом: update column family User with column_metadata = [ {column_name: fname, validation_class: UTF8Type}, {column_name: lname, validation_class: UTF8Type}, ]; ◦ ◦ ◦ Сада се подаци другачије исписују: list user; get User[mika]; get user[mika][fname]; 25

    Тражење је иницијално могуће само по кључу Да би било могуће тражење по другим колонама, потребни су индекси Индекси се могу дефинисати одређивањем врсте индекса за колону: update column family User with column_metadata = [ {column_name: fname, validation_class: UTF8Type, index_type: KEYS}, {column_name: lname, validation_class: UTF8Type}, ]; Сада је могуће приступати подацима на основу вредности у индексираној колони: ◦ get User where fname = Mika; 26

   При употреби индекса неопходно је бити пажљив архитектура индекса се значајно разликује у односу на РБП сваки индекс је заправо нова фамилија колона...

27

1.

2.

3.

4.

Cassandra је Јava базирана апликација, тако да прво она мора бити инсталирана на машини. Најновија верзија JRE може се скинути са: http://www.oracle.com/technetwork/java/javase/downloads/index.html

Download Cassandra бинарни фајл са адресе: http://cassandra.apache.org/download/ Разпакујте Cassandra source фајл. Нпр. на D:\cassandra Поставити environment променљиве (Go to System Properties -> Tab Advanced -> button Environment Variables ... И додајте system variables на) JAVA_HOME=c:\Program Files\Java\jre6\ (треба да буде пут ка jre директоријуму, не ка bin директоријуму ...) CASSANDRA_HOME=d:\cassandra . 28

5.

Модификујте config фајл d:\cassandra\conf\cassandra.yaml Променити следеће: /var/lib/cassandra/commitlog у d:/cassandra/commitlog Такође креирајте и директоријум d:/cassandra/commitlog Следеће шта треба да се уради је: /var/lib/cassandra/data промените у d:/cassandra/data И поново креирајте директоријум d:/cassandra/data 6. Сад можете стартовати Cassandra базу Идите у директоријум d:\cassandra\bin \ и куцајте start cassandra.bat 29

Кад стартујете сервер требало би да добијете изглед сличан следећем: D:\cassandra\bin>cassandra.bat

Starting Cassandra Server Listening for transport dt_socket at address: 8888 INFO 13:47:17,274 DiskAccessMode 'auto' determined to be mmap, indexAccessModeis mmap INFO 13:47:17,808 Saved Token not found. Using 157384470883646000501029173271571041806 INFO 13:47:17,809 Saved ClusterName not found. Using Test Cluster INFO 13:47:17,815 Creating new commitlog segment d:/cassandra/commitlog\CommitLog 1280922437815.log

INFO 13:47:17,886 LocationInfo has reached its threshold; switching in a fresh Memtable at CommitLogContext(file='d:/cassandra/commitlog\CommitLog-128092243781 5.log', position=419) INFO 13:47:17,903 Enqueuing flush of Memtable-LocationInfo@1370440457(169 bytes, 4 operations) INFO 13:47:17,905 Writing Memtable-LocationInfo@1370440457(169 bytes, 4 operations) INFO 13:47:18,082 Completed flushing d:\cassandra\data\system\LocationInfo-1-Data.db

INFO 13:47:18,122 Starting up server gossip INFO 13:47:18,196 Binding thrift service to localhost/127.0.0.1:9160 INFO 13:47:18,204 Cassandra starting up...

30

API https://github.com/sebgiroux/Cassandra-Cluster-Admin

Cassandra

-

Cluster

-

Admin

- Cassandra cluster u Web browseru!

31

32