Oracle RDBMS vs NoSQL Matthias Fuchs, Principal Consultant, esentri AG Nürnberg @hias222 DOAG Datenbanken – 30. Mai 2017 - Düsseldorf Über mich Matthias Fuchs Principal Conultant [email protected] @hias222 > > > > 10+ years Experience with Oracle Database, Middleware, SOA OCP Engineered Systems > Exadata > Exalogic Link with esentri 2 Agenda > > > > SQL, NoSQL, Cloud Oracle one for all your data JSON Von Partitioning bis Sharding > Oracle Partitoning > Oracle Sharding > Cassandra > Zukunft > Oracle RDBMS vs NoSQL - Agenda 3 SQL, NoSQL, Cloud EINFACH MEHR > MUT > Oracle RDBMS vs NoSQL 4 AWS – Databases > AWS Plattform > Database RDBMS Services > MySQL > MariaDB > PostgreSQL > Oracle > SQLServer > Aurora > Database on your own servers > Oracle RDBMS vs NoSQL 5 Pivotal Cloud Foundry > > > > > Cloud Native Entwicklung Spring Boot Umfeld MySQL Redis Amazon Aurora > Oracle RDBMS vs NoSQL SQL, NoSQL, Cloud – RDBMS vs NoSQL SQL- RDBMS NoSQL – Key/Value Konsistenz HoheDatensicherheit(ACID) Tunable Consistency (Cassandra) EventualConsitency Skalierung SkalierbardurchHardware oderCluster Einfachhorizontalskalierbar mitgängigerHardware Schnittstelle SQL SQL- ähnlicheSpracheoder nurAPIs – Java,Nodejs PartitionToleranz Ausfall beiverteilten Installationüber Rechenzentrenhinweg WeiterlaufenmöglichKonsistenz > Oracle RDBMS vs NoSQL 7 7 Oracle one for all your data EINFACH MEHR > MUT EINFACH MEHR > WERTE > Oracle RDBMS vs NoSQL 8 Oracle All Data > > > > JSON XML Oracle Text Oracle Multimedia (intermedia) > Oracle Secure Files and Large Objects > OLAP > R Statistik > Spatial and Graph > Oracle RDBMS vs NoSQL > In Memory > Sharding > > > > > SQL Plus Java in der Datenbank Pro*C/C++ Pro*Cobol Pro*Fortran All Data All Databases Text ElasticSearch, Solr JSON MongoDB, CouchDB, DocumentDB Sharding > Oracle RDBMS vs NoSQL Cassandra, Elastic Datenbanken und Daten Model – Ranking non relational JSON Database Ranking Licence Model MongoDB 5 GNUAGPLv3.0 BSON(JSON) Cassandra 8 ApacheLicense Widecolumn store (schema free) Redis 9 BSD3 Key-value store Elasticsearch 11 ApacheLicense SearchEngine,JSON Solr 14 ApacheLicense Searchengines https://db-engines.com > Oracle RDBMS vs NoSQL Sharding JSON > Oracle RDBMS vs NoSQL 12 XML und JSON XML > Extensible Markup Language > struktur-beschreibend > Felexible Schnittstellen > strikte Spezifizierung > Auszeichnungssprache JSON > JavaScript Object Notation > Syntax-Konvention > Regide Schnittstelle > Einfacher Syntax > Wenig overhead > Datenaustauschformat > ORACLE DB 10g/11g > Oracle DB 12c > Middleware meist SOAP (Simple Object Access Protocol) > Oracle RDBMS vs NoSQL > Middleware meist REST Services (REpresentational State Transfer ) JSON Data Guide 12.2 > Zusammenfassung über die Strukturen in einem JSON Dokument > Basis für die Entwicklung von Analysen und BI > Zum Abfragen und Suchen von JSON Inhalten > Neue JSON dagegen zu verfizieren > Direkte Abfrage der Daten > Views und virtuelle Spalten aus dem JSON Inhalt erzeugen No Oracle Text: CREATE SEARCH INDEX po_dg_only_idx ON j_purchaseorder (po_document) FOR JSON PARAMETERS ('SEARCH_ON NONE'); Dataguide off: ALTER INDEX po_search_idx REBUILD PARAMETERS ('DATAGUIDE OFF'); Tipps: https://apex.oracle.com/pls/apex/germancommunities/dbacommunity/tipp/5901/index.html > Oracle RDBMS vs NoSQL 14 1 JSON Data Guide DBMS_JSON.get_index_dataguide à > Example Flat Data Guide VirtualColumn DBMS_JSON.rename_column( 'J_PURCHASEORDER', 'PO_DOCUMENT', '$.PONumber', DBMS_JSON.TYPE_NUMBER, 'PONumber'); > Oracle RDBMS vs NoSQL 15 JSON in Oracle 12c > JSON Daten können gespeichert, indiziert und abgefragt werden ohne Schemadefinition > JSON kann ähnlich wie XML benutzt werden > JSON wird mit Datentypen VARCHAR2, CLOB und BLOB gespeichert > XML wird mit XMLType gespeichert > Funktionen: > json_value, json_query, json_table > Bedingungen > json_exists, is json, is not json, json_textcontains > Daten können, ähnlich wie in NoSQL Datenbanken, gespeichert werden in Kombination mit dem Konsistenz Model einer relationalen DB. > Oracle RDBMS vs NoSQL 16 Von Partitioning bis Sharding EINFACH MEHR > VERTRAUEN > Oracle RDBMS vs NoSQL 17 Table example Customers Orders CustId VARCHAR2(60)NOTNULL OrderId INTEGERNOTNULL FirstName VARCHAR2(60) CustId VARCHAR2(60)NOTNULL, LastName VARCHAR2(60) OrderDate TIMESTAMPNOT NULL, ClassVARCHAR2(10) Geo VARCHAR2(8) CustProfile VARCHAR2(4000) > Oracle RDBMS vs NoSQL SumTotal NUMBER(19,4) StatusCHAR(4) Partitioning > Immer: Tabellen größer 2 GB > Tabellen mit historischen Daten, neue Daten werden in neue oder die aktuelle Partition angehängt > Typisch sind z.B Montspartititonen > Die Partitionen können über uneterschiedliche Storagebackends verteilt werden > Information Lifecycle Management http://www.oracle.com/us/products/database/database-11g-managing-storage-wp-354099.pdf > Oracle RDBMS vs NoSQL Partitioning Types CREATE TABLE PART_Customers ( CustId VARCHAR2(60) NOT NULL, FirstName VARCHAR2(60), .... CONSTRAINT part_pk_customers PRIMARY KEY (CustId), CONSTRAINT part_json_customers CHECK (CustProfile IS JSON) )partition by hash (CustId) partitions 8 ; CREATE TABLE PART_Orders ( OrderId INTEGER NOT NULL, CustId VARCHAR2(60) NOT NULL, ... constraint part_pk_orders primary key (CustId, OrderId), constraint part_fk_orders_parent foreign key (CustId) references PART_Customers on delete cascade ) partition by reference (part_fk_orders_parent) >; Oracle RDBMS vs NoSQL Sharding > > > > Lineare Skalierung Eingrenzung von Fehlern - Fault Containment. > Shared Nothing > Probleme in einem Shard beeinflussen kein anderes Shard Rolling Upgrades. > Unabhängige Shards > Test auf kleinem Teil möglich Ready for Cloud – Deployments on > on-premises > cloud > hybrid > Oracle RDBMS vs NoSQL Sharding Example CREATE SHARDED TABLE Customers ( CustId VARCHAR2(60) NOT NULL, FirstName VARCHAR2(60), ..... CONSTRAINT pk_customers PRIMARY KEY (CustId), CONSTRAINT json_customers CHECK (CustProfile IS JSON) ) TABLESPACE SET TAB_PRIMA_SET PARTITION BY CONSISTENT HASH (CustId) PARTITIONS AUTO; CREATE SHARDED TABLE Orders ( OrderId INTEGER NOT NULL, CustId VARCHAR2(60) NOT NULL, .... constraint pk_orders primary key (CustId, OrderId), constraint fk_orders_parent foreign key (CustId) references Customers on delete cascade ) partition by reference (fk_orders_parent); > Oracle RDBMS vs NoSQL Application Server Application Server Directors (GSM) Shards Application Server Shard Catalog Shard Access ODBC > > Zugriff SQL -> Shard https://docs.oracle.com/database/122/JJDBC/database-sharding.htm sqlplus user_shard/root@‘ (description=(address=(protocol=tcp) (host=sharddemo1)(port=1571)) (connect_data= (service_name= sharddb.cust_sdb.oradbcloud) (region=region1) ([email protected]) ) )' OracleShardingKey sdkey =ods.createShardingKeyBuilder() .subkey(shardingKeyVal,OracleType.VARCHAR2) .build(); > Oracle RDBMS vs NoSQL Demo Oracle Partition Demo Oracle Shard Demo Oracle Jdev Cassandra > Tunable Data Consistency > Write > Any > One/Two/Three > Local_One > Quorum > Local_Quorum > Each_Quorum > All Reads > One/Two/Three > Local_One > Quorum > Local_Quorum > Each_Quorum > All > A I B 1. write 2. write H C G Anderes Rechenzentrum D F Unterschiedliches Rack E Entscheidung pro Insert > Oracle RDBMS vs NoSQL Cassandra Datenmodell Define Data Domain Millionen von orderIDs Jede orderID hat einen Kunden > Oracle RDBMS vs NoSQL Define Access pattern Abfrage von: OrderID CustomerID Primary Access Entities CustomerID Secondary Access Entities OrderID Sortierung nach Datum Review Partition ClusterKeys Customer ID als Partition Key, häufig Gruppierung mit ClusterKey Cassandra Joins and Performance > > > > ApacheSpark or DataStax ODBC connectors Daten Joins werden auf Applikationsebene durchgeführt Daten über den gesamten Cluster verteilen Anzahl der Partition Reads klein halten (Partition Key) > Oracle RDBMS vs NoSQL http://www.esentri.com/blog/2017/04/06/apache-cassandra-performance-explained/ Casandra Tabelle > Oracle RDBMS vs NoSQL Demo Cassandra Hochverfügbarkeit EINFACH MEHR > SCHWUNG > Oracle RDBMS vs NoSQL 32 Hochverfügbarkeit über Rechenzentrumsgrenzen > Oracle (Active) Data Guard > Data Guard Modes entscheiden über die Konsistenz (Max, Performance, Security, Avaiability) > In 12.2 viele Fetures zum schnelleren Umschalten (perwarming > Far Sync für zwischenspeichern der Redo Logs > Fast Sync für schnelleres schreiben auf der Standbyseite > Nologging Optimierungen > Sharding > Verteilt über mehrere Rechenzentren > Shards basieren auf Data Guard > Nur ein Shard wird bearbeitet > Cassandra > Tunable Consistency > Oracle RDBMS vs NoSQL 3 Ausfall > Ausfall Rechenzentrum > Partitioning -> Dataguard Switch > Sharding -> Dataguard Switch der Shards > Cassandra –> Gossip talks -> Nodes werden nicht entfernt, Admin Eingriff > CAP Consitency – Availibility – Partition Toleranz > Partitioning – CA (Dataguard Mode?) > Sharding – AP > Cassandra - AP No Go Strict Consistency Consistency Partition Toleranz > Oracle RDBMS vs NoSQL Availibility Eventual Consistency 34 Zukunft > Oracle RDBMS vs NoSQL 35 Zukunft > NewSQL – NoSQL DBS, welche SQL oder SQL ähnliche Sprache unterstützen > Google spanner (CP) > MySQL Derivate > Amazon Aurora > Oracle RDBMS vs NoSQL 36 Vielen Dank! 37