Definicja. Not Only SQL

Podobne dokumenty
Przetwarzanie danych z wykorzystaniem technologii NoSQL na przykładzie serwisu Serp24

Zaawansowany kurs języka Python

MongoDB. wprowadzenie. dr inż. Paweł Boiński, Politechnika Poznańska

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

NoSQL & relax with CouchDB

Nowe technologie baz danych

Hurtownie danych wykład 5

Bazy danych NoSQL. wprowadzenie. Szymon Francuzik Poznań,

Wprowadzenie do NoSql. Maksymilian Wiesiołek

Bazy danych NoSQL. Szymon Francuzik Poznań,

*Grafomania z. Neo4j. Praktyczne wprowadzenie do grafowej bazy danych.

Wst p Model Danych Saklowalno± + replikacja Spójno± Ograniczenia. Cassandra. Paweª Róg. Pozna«, maj 2011

Szkolenie wycofane z oferty. Apache Cassandra - modelowanie, wydajność, analiza danych

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

BAZY DANYCH. NIERELACYJNE BAZY DANYCH NoSQL I ASOCJACYJNE STRUKTURY DANYCH. Adrian Horzyk. Akademia Górniczo-Hutnicza

Organizacyjnie. Prowadzący: dr Mariusz Rafało (hasło: BIG)

BAZY DANYCH WYKŁAD 5 NO-SQL DATABASE

Narzędzia i trendy Big Data

Hbase, Hive i BigSQL

Big Data i 5V Nowe wyzwania w świecie danych Krzysztof Goczyła

akademia androida Składowanie danych część VI

Db4o obiektowa baza danych wersja.net

PHP: bazy danych, SQL, AJAX i JSON

Programowanie w Ruby

Wprowadzenie do Hurtowni Danych

Więzy integralności referencyjnej i klucze obce. PYTANIE NA EGZAMIN LICENCJACKI

Technologie Informacyjne

Programowanie obiektowe

dziennik Instrukcja obsługi

Programowanie w Ruby

Podstawowe wykorzystanie Hibernate

Tworzenie aplikacji bazodanowych

Projektowanie rozwiązań Big Data z wykorzystaniem Apache Hadoop & Family

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Bazy danych Wprowadzenie Wykład dla IV i V roku matematyki

Kurs rozszerzony języka Python

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

Zaawansowany kurs języka Python

Architektura rozproszonych magazynów danych

Jak zatrudnić słonie do replikacji baz PostgreSQL

Programowanie w Ruby

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Paweł Cieśla. Dokumentacja projektu

Zrąb webowy dla perfekcjonistów z terminami. autor: Kamil Adamczyk

Firebird Alternatywa dla popularnych darmowych systemów bazodanowych MySQL i Postgres

NARZĘDZIA WIZUALIZACJI

Programowanie obiektowe

Instalacja SQL Server Konfiguracja SQL Server Logowanie - opcje SQL Server Management Studio. Microsoft Access Oracle Sybase DB2 MySQL

Hadoop i Spark. Mariusz Rafało

egroupware czy phpgroupware jest też mniej stabilny.

Wybrane działy Informatyki Stosowanej

Bazy danych NoSQL Część II. Maciej Zakrzewicz Politechnika Poznańska, Instytut Informatyki,

Migracja do PostgreSQL za pomocą narzędzi Enterprise DB

Programowanie w języku Java. Bazy danych SQLite w Javie

Tematy projektów Edycja 2014

Projektowanie aplikacji z bazami danych

Specjalizacja magisterska Bazy danych

Projektowanie rozwiązań Big Data z wykorzystaniem Apache Hadoop & Family

Bazy danych 12. Bazy NoSQL. P. F. Góra

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

METODY PROGRAMOWANIA

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

WIELOKROTNE PRZYSPIESZENIE DZIAŁANIA APLIKACJI POPRZEZ ZASTOSOWANIE TECHNOLOGII NIERELACYJNYCH BAZ DANYCH

Projektowanie: architektura baz danych

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

010 NOSQL. Prof. dr hab. Marek Wisła

Projektowanie systemów baz danych

Technologia informacyjna

Oracle11g: Wprowadzenie do SQL

WYKORZYSTANIE I ROZWÓJ WOLNEGO OPROGRAMOWANIA W WOJEWÓDZKIM WĘŹLE INFRASTRUKTURY INFORMACJI PRZESTRZENNEJ

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Tuning SQL Server dla serwerów WWW

Programowanie Komponentowe WebAPI

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

Instytut Teleinformatyki

Google Web Toolkit. Piotr Findeisen

Bazy Danych. C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000

Database Connectivity

Dokumentacja instalacyjna i konfiguracyjna Aplikacja ADR. Wersja dokumentu 1.0. Strona 1/9

Zaawansowany kurs języka Python

Seminarium Bazy Danych I. BigTable. Piotr Świgoń Uniwersytet Warszawski

CouchDB. Michał Nowikowski

Język SQL, zajęcia nr 1

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Współczesne systemy baz danych

Podstawy programowania III WYKŁAD 2

Technologie wyszukiwania pełnotekstowego

ZSE - Systemy baz danych 1 SIECIOWE SERWERY BAZ DANYCH

Jak okiełznać frontend w Django? Piotr Maliński

Zabbix -Monitoring IT bez taśmy klejącej. Paweł Tomala Barcamp 15 czerwca 2015

Programowanie obiektowe

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Wprowadzenie do Doctrine ORM

Aplikacje RMI

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Transkrypt:

Definicja Not Only SQL Baza danych NoSQL to program zapewniający szybki dostęp do danych różniący się w jakiś sposób od stadardowych baz RDBMS. Baza NoSQL to szereg różnych rozwiązań nazwanych jednym określeniem. NoSQL często rezygnuje z pośrednictwa SQL przy manipulacji danymi i zapewnia alternatywny sposób.

Kto korzysta? MongoDB: Foursquare, Disney, SourceForge CauchDB: Ubuntu One, BBC, CERN Hbase: Adobe, Facebook, Twitter, Yahoo Cassandra: Rackspace, Twitter, Reddit Redis: Flickr, GitHub, StackOverflow Riak: Mozilla Fundation, AOL Wydajne sieciowe aplikacje z olbrzymią ilością danych

Dlaczego nie SQL? Skalowalność Replikacja danych Rozporszenie Ekstremalna wydajność Olbrzymia ilość danych Nieustruktualizowane dane Dla ORM SQL jest tylko obciążeniem

Typy baz NoSql Klucz wartość Redis Kolumnowe Cassandra, HBase (Big Table) Objektowe Db4o, Versant Dokumentowe MongoDB, CrouchDB Grafowe Neo4J XML - Apache Xindice, MarkLogic Server

prosta baza typu klucz wartość klucz string (odzielanie : tylko konwecja) wartość: string, zbiory, listy, hashmap licencja BSD redis-cli wiersz poleceń prosta i wydajna replikacja dobra dla wielu prostych danych bardzo wydajna, wyszukiwanie O(log(N) + M) cała baza działa tylko w pamięci

Redis: Api - przyklad import java.util._ import redis.clients.jedis._ object RedisExample { def main(args:array[string]) { val localhost_pool = new JedisPool(new JedisPoolConfig(), localhost ) val localhost_redis = localhost_pool.getresource try { localhost_redis.set( user:1:name, Miki ) localhost_redis.zadd( user:1:phone, 1, 0700000100 ) localhost_redis.zadd( user:1:phone, 3, 0599888444 ) val phones = localhost_redis.zrange( user:1:phone, 0, -1) println( User 1 phones: + phones) localhost_redis.set( user:2:name, Cyryl ) localhost_redis.lpush( user:2:phone, 0599999555 ) localhost_redis.lpush( user:2:phone, 0456043235 ) localhost_redis.rpush( user:2:phone, 0600700800 ) val phone2 = localhost_redis.lrange( user:2:phone, 0, -1) println( User 2 phones: + phone2) } finally { localhost_pool.returnresource(localhost_redis) } localhost_pool.destroy(); }

oparta o JSON (zapis w BSON) napisana w C++ GridSF przechowywanie plików o dowolnych rozmiarach replikacja duża wydajność Query Expression Objects wiersz poleceń opraty o JavaScript

MongoDB: Api - przyklad import net.liftweb._ import mongodb._ import org.bson.types.objectid import java.util.date case class Address(street: String, city: String) case class Child(name: String, age: Int, birth: Option[Date]) object Person extends MongoDocumentMeta[Person] { override def collectionname = "mypersons" override def formats = super.formats + new ObjectIdSerializer + new DateSerializer } case class Person(_id: ObjectId, name: String, age: Int, address: Address, children: List[Child]) extends MongoDocument[Person] { def meta = Person } val p = Person(ObjectId.get,"Joe",27,Address("Bulevard", "Helsinki"),List(Child("Mary", 5, Some(date("2004-09-04"))), Child("Mazy", 3, None))) p.save

Cassandra zainspirowana przez Google Big Table klucz wartość powiązane z column family jeden proces na węźle (inaczej niż Hbase) wysoka wydajność replikacja zainspirowana Amazon Dynamo korzysta z Apache Hadoop Cassandra Query Language zamiast SQL

Cassandra - schemat

Wydajnosc porownanie

Porownanie MySQL 1000 MySQL > 50GB Odczyt: ~350ms Zapis: ~300ms Cassandra > 50GB Odczyt: ~15ms Zapis: ~0,12ms 100 10 1 Odczyt Zapis 0,1 MySQL Cassandra

Cassandra: Api - przyklad CQL cassandra query language: CREATE KEYSPACE test with strategy_class='simplestrategy' and strategy_options:replication_factor=1; Api w większości popularnych języków: val tr:ttransport = new TSocket(HOST, PORT) val tf = new TFramedTransport(tr) val proto:tprotocol = new TBinaryProtocol(tf) val client = new Cassandra.Client(proto) tf.open() val id = 1.toBytes val CL = ConsistencyLevel.ONE val clock = new Clock(System.currentTimeMillis()) client.insert(id, cp, new Column("name".getBytes(UTF8), "George Clinton".getBytes(), clock), CL) val col = client.get(id, name.getbytes(utf8), CL).getColumn println( Name: + col.name + Value: + col.value + Timestamp: + col.clock.timestamp)

licencja GPL lub komercyjna tylko Java i.net Native Query zapisywanie każdego obiektu cała baza w pliku wersja wbudowana plik jar wersja client serwer szybki odczyt złożonych danych

Płaskie obiekty DB4O - wydajnosc

Obiekty złożone DB4O - wydajnosc

DB4O: api - przyklad import com.db4o._ import com.db4o.query.predicate case class Pupil(nr:Int, lastname:string, firstname:string) object Main { def main(argc:array[string]){ val db = Db4o.openFile("database.db") try { db.store(pupil(1,"kowalski","jan")) db.store(pupil(2,"kowalski","piotr")) db.store(pupil(3,"nowak","anna")) val r = db.querybyexample(pupil(0,"kowalski",null)) println("query By Example") while (r.hasnext) println(r.next) val pupils = db.query(new Predicate[Pupil](){ def `match`(p:pupil) = { p.nr == 1} }) println("native Query") while (pupils.hasnext) println(pupils.next) } finally { db.close() } println("koniec") }}

Podsumowanie Kiedy warto przemyśleć użycie NoSQL: duża ilość danych konieczna replikacja potrzebna duża wydajność nie wszystkie dane nadają się do tabelek dane są głębokie (dużo złączeń SQL) do większości prostych stron nadaje się MongoDB Nie warto: mała aplikacja system bankowy

Dziękuję za uwagę! Pytania?