320 likes | 443 Views
H ерелацион e баз e података. Појам нерелационих база података. У савременом развоју софтвера термин нерелационе базе података се односи на системе за управљање колекцијама података које: немају строгу статичку структуру података немају исцрпну проверу услова интегритета
E N D
Hерелационe базe података
Појам нерелационих база података • У савременом развоју софтвера термин нерелационебазе података се односи на системе за управљањеколекцијама података које: • немају строгу статичку структуру података • немају исцрпну проверу услова интегритета • не користе упитни језик SQL
Недостатак релационих база података: • релативно висока цена читања • због нередундантности и строге структуре података • отежано дистрибуирање • пре свега због конзистентности података • скупа промена структуре • због повезаности структуре са употребом и оптимизацијама
Пример: Веб апликације Данашње веб апликације сусрећу се са следећим проблемима: • конкурентни корисници • милиони • количина података • дневна производња терабајта и петабајта података • Обрада • свака активност корисника захтева неку обраду података • Оптерећење • непредвидив пораст оптерећења • неравномерно оптерећење • велика динамичност • непрекидно додавање нових могућности • промена постојећих компоненти
Дефиниција? Нема јединствене дефиниције, али се може рећи: • НРБП је БП која • не почива на релационом моделу података • или га се бар не држи чврсто • лако се дистрибуира • хоризонтално је скалабилна • тј. лако подноси значајне промене шеме • Друге честе карактеристике: • без статичке схеме • лака репликација • једноставан API • евентуална конзистентност • почива на скупу принципа BASE а не ACID • омогућава огромне количине података
NoSQL • Често се НРБП означавају као NoSQL базе података • изворно, одступање од SQL-а, као симбола РБП • данас многе теже да имају језик налик на SQL... • ...па се често тумачи као “not only SQL” • Сложене структуре података у специфичним доменима • објектне базе података • Висок ниво дистрибуирања • различите нерелационе базе података • Неопходне високе перформансе • меморијске базе података • Огромне количине података ниске сложености • различите врсте матричних база података
Модел каталога • Велики број нерелационих база података почива на моделу каталога • Основна колекција је каталог • Елемент каталога може бити проста или сложена вредност • Структура сложене вредности зависи одимплементације • обично је неки вид торке • Вредностима се приступа по кључу • Базу података чини скуп каталога • Обично се назива модел кључ-вредност
Иако концепти могу да подсећају на РБП (каталог-табела, вредност-ред,...) заправо постоје значајне разлике • структура вредности обично није строго предефинисана • обично је нетипизирана • не инсистира се на нередундантности • практично ретко има природних кључева • не постоји реф. Интегритет • ...
Apache Cassandra • Нерелациони СУБП • Примарно намењен за ДБП • Динамична шема • Почива на проширеном моделу каталога • Иницијално развијен од стране Facebook-а • Пројекат отвореног кода • Један од главних пројеката фондације Apache • Међу најраспрострањенијим НРСУБП-овима
Основни појмови • Cassandra почива на моделу каталога • Основни појмови су: • Колона • фамилија колона • Суперколона • фамилија суперколона • Кључ • простор кључева
Колона • једна вредност, праћена временом последње измене • појам колоне је близак појму атрибута код РБП • тројка (име, вредност, време измене) { name: “prezime”, value: “Perić”, timestamp: 123456789 } • поједностављен запис: prezime: “Perić”
Суперколона • сложена вредност, без времена последње измене • садржи једну или више колона • не постоји еквивалент код РБП, нешто као сложени атрибут { name: “licniPodaci”, value:{ ime: { name: “ime”, value: “Pera”,timestamp: 123456789 }, prezime: { name: “prezime”, value: “Perić”, timestamp: 123456789 }, grad: { name: “grad”, value: “Niš”, timestamp: 123456789 } } }
Фамилија колона • структура која може да садржи већи број редова(концептуално неограничено) • пресликава кључ у скуп колона • ред = скуп колона • појам фамилије колона је близак појму табеле код РБП • концептуално представља каталог редова Autori : { ivoAndric: { // pojednostavljen zapis, bez naziva i TS ime: “Ivo”, prezime: “Andrić”, ... }, jovanJovanovic: { ime: “Jovan”, prezime: “Jovanović”, ... }, }
Простор кључева • структура која садржи више фамилија колона илисуперколона • концептуално одговара појму базе података или шеме код РБП Cassandra има два нивоа угњеждености • први ниво је обавезан • чини га пар (име колоне, колона) • један ред (слог, record) се састоји од произвољног броја парова • парови су уређени само по имену колоне • ред има облик каталога • ред МОРА да има бар једну колону • други ниво је опцион • уместо да други елемент пара буде колона, то може бити колекција парова – суперколона
Имена колона • Имена колона представљају истовремено • кључеве и • вредности • сваки ред (или суперколона) може да садржи произвољно много колона • називи колона могу да имају улогу вредности • вредности колона могу да буду празне
Пример: твитови једног корисника • Свака порука представља посебну колону • означена је временом писања • колоне су уређене по имену, па тиме и по времену писања • вредности колона су празне
Пример: сви твитови са неким URL-oм • Назив суперколоне означава веб локацију • Вредност суперколоне је колекција колона којеидентификују поруке • вредности колона су празне
Инсталација система Cassandra • Препоручује се Linux, али може и Windows • Неке интерфејсе према програмским језицима је лакшеконфигурисати за Linux • Предуслови • Java 1.6
Командни интерфејс • Командни интерфејс се покреће командом: • .../bin/cassandra-cli [-host localhost -port 9160] • Из командног интерфејса се излази командама • quit; • exit; • Списак команди се може добити командом: • ?; • Синтакса изабране команде се може добитикомандом: • ? <команда>;
Повезивање • Пре било каквог рада потребно је да се успостави везаса системом који се жели користити: • connect localhost/9160; • После тога се могу извршавати команде, нпр.: • show api version; • show keyspaces; • show schema;
Прављење простора кључева • Пример прављења новог простора кључева: • 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;
Читање података • Сви подаци из фамилији колона се могу приказати са: • list user; • Један ред се може прочитати са: • get User[‘mika’]; • Једна вредност се може прочитати са: • get user[‘mika’][‘fname’];
Типови колона • Типови колона се не морају дефинисати, али ако су непознати,не могу се проверавати подаци који се уносе, нити читкоисписивати подаци који се читају • Типови колона се могу одредити командом: 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];
Индекси • Тражење је иницијално могуће само по кључу • Да би било могуће тражење по другим колонама, потребни су индекси • Индекси се могу дефинисати одређивањем врсте индекса за колону: 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;
Архитектура индекса • При употреби индекса неопходно је бити пажљив • архитектура индекса се значајно разликује у односу на РБП • сваки индекс је заправо нова фамилија колона...
Инсталација у Windows окружењу • 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
5.Модификујте configфајл d:\cassandra\conf\cassandra.yaml Променити следеће: <CommitLogDirectory>/var/lib/cassandra/commitlog</CommitLogDirectory> у <CommitLogDirectory>d:/cassandra/commitlog</CommitLogDirectory> Такође креирајте и директоријумd:/cassandra/commitlog Следеће шта треба да се уради је: /var/lib/cassandra/data промените у <DataFileDirectory>d:/cassandra/data</DataFileDirectory> И поново креирајте директоријумd:/cassandra/data 6. Сад можете стартовати Cassandra базу Идите у директоријумd:\cassandra\bin\ и куцајтеstart cassandra.bat
Кад стартујете сервер требало би да добијете изглед сличан следећем: 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, indexAccessModeismmap 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...
API https://github.com/sebgiroux/Cassandra-Cluster-Admin Cassandra-Cluster-Admin - Cassandra cluster u Web browseru!