MulX-‐modelová databáze Caché

Transkript

MulX-‐modelová databáze Caché
Mul$-­‐modelová databáze Caché Ondřej Hoferek Mo$vace •  Spravujeme různorodá data, která vyžadují různý přístup k ukládání •  Nabízí se použiH více databází podporujících jeden přístup (polyglot persistence) –  např. MySQL pro relační a MongoDB pro dokumentový –  Každá z nich má vlastní specifika (architektura, administrace, dotazování, …) –  Konzistence, transakce a JOINy napříč různě ukládanými daty? Mo$vace •  Ta samá data vyžadují v různých situacích různé přístupy k ukládání –  Nárazově ukládám obrovské množství dat ze smart meterů –  Později nad těmito daty provádím analy$cké dotazy •  SQL, indexy Mul$-­‐modelové databáze •  Podporují více přístupů k ukládání dat –  Relační –  Objektový –  Key-­‐value –  Vícerozměrná pole –  Sloupcový –  Dokumentový –  Grafový •  NoSQL jako Not only SQL •  Často umožňují použiH klasických transakčních modelů Databáze InterSystems Caché •  Historicky (od roku 1966) aplikační servery s vlastním programovacím jazykem M (MUMPS) –  Integrované úložiště vícerozměrných polí s podporou ACID •  InterSystems MUMPS -­‐> Caché (1997) –  Objektová a SQL nadstavba –  Nyní přidávány další modely -­‐ dokumentový Vícerozměrné pole v Javě • 
• 
• 
• 
• 
• 
int[][] people = new int[2][5] ; people[0][3] = 25; Pevně daný počet rozměrů Pevně daná velikost jednotlivých rozměrů Číselné indexy V pamě$ Vícerozměrná pole v Caché (globály) • 
• 
• 
• 
• 
Persistentní Dynamická Asocia$vní Řídká Setříděná •  Hierarchická (stromy) Vícerozměrná pole v Caché -­‐ dynamická ^Sample.Person(2) = “Bob” ^Sample.Person = 3 ^Sample.Person(1) = “Alice” ^Sample.Person(3) = “Cindy” •  Strukturu ani rozměry není třeba předem deklarovat ani alokovat •  Indexům pole říkáme subskripty –  Nechceme si plést s DB indexy •  ^ je symbol pro uvození názvu globálu Vícerozměrná pole v Caché (globály) ^Sample.Person = 3 ^Sample.Person(1) = $LB(“Alice”, 24) ^Sample.Person(2) = $LB( “Bob” , 26) ^Sample.Person(3) = $LB( “Cindy” , 24) •  Globály jsou automa$cky setříděné •  $LB je struktura pro list/seznam v Caché Vícerozměrná pole v Caché -­‐ asocia$vní ^Sample.Person = 3 ^Sample.Person(1, ”Age”) = 24 ^Sample.Person(1, ”Name”) = “Alice” ^Sample.Person(2, ”Age”) = 26 ^Sample.Person(2, ”Name”) = “Bob” ^Sample.Person(3, ”Age”) = 24 ^Sample.Person(3, ”Name”) = “Cindy” Vícerozměrná pole v Caché -­‐ řídká ^Sample.Person(1) = “Alice” ^Sample.Person(2) = “Bob” ^Sample.Person(658) = “Cindy” ^Sample.Person(“crazy”) = “Jeremy” Vícerozměrná pole v Caché (globály) ^Sample.Person = 3 ^Sample.Person(1) = “Alice” ^Sample.Person(1, “loves”) = 2 ^Sample.Person(2) = “Bob” ^Sample.Person(2, “loves”) = 3 ^Sample.Person(3) = “Cindy” Vícerozměrná pole v Caché (globály) ^Sample.Person = 3 ^Sample.Person(1) = $LB(“Alice”, 24) ^Sample.Person(1, “loves”, 1) = 2 ^Sample.Person(2) = $LB(“Bob”, 26) ^Sample.Person(2, “loves”, 1) = 3 ^Sample.Person(3) = $LB(“Cindy”, 24) ^Sample.Person(3, “loves”, 1) = 2 ^Sample.Person(3, “loves”, 2) = 1 Vícerozměrná pole v Caché (globály) ^Sample.Person = 3 ^Sample.Person(1) = $LB(“Alice”, 24) ^Sample.Person(1, “loves”) = 1 ^Sample.Person(1, “loves”, 1) = 2 ^Sample.Person(2) = $LB(“Bob”, 26) ^Sample.Person(2, “loves”) = 1 ^Sample.Person(2, “loves”, 1) = 3 ^Sample.Person(3) = $LB(“Cindy”, 24) ^Sample.Person(3, “loves”) = 2 ^Sample.Person(3, “loves”, 1) = 2 ^Sample.Person(3, “loves”, 2) = 1 Vícerozměrná pole v Caché (globály) ^Sample.Person = 3 ^Sample.Person(1) = $LB(“Alice”, 24) ^Sample.Person(1, “loves”) = $LB(2) ^Sample.Person(2) = $LB(“Bob”, 26) ^Sample.Person(2, “loves”) = $LB(3) ^Sample.Person(3) = $LB(“Cindy”, 24) ^Sample.Person(3, “loves”) = $LB(2, 1) Vícerozměrná pole v Caché (globály) ^Sample.Person = 3 ^Sample.Person(1) = $LB(“Alice”, 24) ^Sample.Person(1, “loves”) = $LB(2) ^Sample.Person(2) = $LB(“Bob”, 26) ^Sample.Person(2, “loves”) = $LB(3) ^Sample.Person(3) = $LB(“Cindy”, 24) ^Sample.Person(3, “loves”, ”a bit”) = $LB(1) ^Sample.Person(3, “loves”, ”a lot”) = $LB(2) Vícerozměrná pole v Caché (globály) ^Sample.Person = 3 ^Sample.Person(1) = $LB(“Alice”, 24) ^Sample.Person(1, “loves”) = $LB(2) ^Sample.Person(2, “loves”) = $LB(3) ^Sample.Person(3) = $LB(“Cindy”, 24) ^Sample.Person(3, “loves”, ”a lot”) = $LB(2) ^Sample.Person(3, “loves”, ”a bit”) = $LB(1) •  Žádná schémata ani omezení Manipulace s globály •  Knihovny pro rozšířené jazyky/pla|ormy –  C++, Java, .Net, JavaScript, … •  Integrovaná VM pro vlastní jazyk Caché Object Script (COS) –  Objektový –  Dynamicky typovaný –  Explicitní příkazy (do, set, for, while, …) –  PoužiH jako samostatný aplikační server Caché Object Script set a = "hello world" do obj.method() set b = ##class(pkgName.clsName).clsMethod() for i = 1:1:5 { set a(i) = i + 2 } write a write $NOW // systémová funkce write "bye" Manipulace s globály -­‐ COS •  Příkazy –  set ^global = 1 –  kill ^global •  Reference -­‐ funkce –  set local = ^global // výjimka, pokud není nastaven –  set local = $GET(^global) // bezpečné –  set globalExists = $DATA(^global) // test •  Iterace -­‐ funkce –  $ORDER(^global(“”)) // na jedné úrovni v hierarchii –  $QUERY(^global(“”)) // zanořování do hierarchie •  Sekvence – funkce –  $SEQUENCE(^global) // o jedničku –  $INCREMENT(^global, increment) // o increment $ORDER vs. $QUERY ^P = 2 ^P(1) = “Alice” ^P(1, “loves”) = 2 ^P(2) = “Bob” $ORDER(^P(“”)) = 1 $ORDER(^P(1)) = 2 $ORDER(^P(1, “loves”)) = “” $ORDER(^P(2)) = “” $QUERY(^P(“”)) = ^P(1) $QUERY(^P(1)) = ^P(1, “loves”) $QUERY(^P(1, “loves”)) = ^P(2) $QUERY(^P(2)) = “” Transakce •  Klasická transakční primi$va –  Příkazy TSTART, TCOMMIT, TROLLBACK –  Vnořené transakce (funkce $TLEVEL) •  Zamykání –  Příkaz LOCK –  Exkluzivní (write), shared (read) –  Zámky jsou uvolněny až na konci transakce Persistence globálů •  Stromy (≈ B+ stromy) bloků o velikos$ 8kB –  Operace s globály v (pseudo) O(1) •  Přesněji O(log N) s obrovským základem •  Nad 1 TB dat navšHvím maximálně 4 bloky •  Bufferování do sdílené pamě$ •  Transakční log •  Online zrcadlení globálů mezi dvěma instancemi Caché –  Jednoduché a robustní řešení pro vysokou dostupnost Objekty v Caché •  Typované –  Předem dané schéma –  Pomocí tříd •  Dědičnost –  Vícenásobná –  Polymorfismus •  Dynamické –  Bez schématu –  Dokumentový model Třídy v Caché Class Sample.Person Extends %Persistent { Property Surname As %String; Property GivenNames As %String; Index SurnameIdx On Surname; Method GetFullName() As %String { … } Storage Default { … } } Třídy v Caché •  Balíková strkuktura (Package) –  PackageName1.PackageName2.ClassName •  Vlastnos$ (Property) –  Persistentní –  Pouze v pamě$ –  Vypočítávané •  Vztahy (Rela$onship) –  Referenční integrita •  Metody –  Instance (Method) –  Třídy (ClassMethod) •  Parametry (Parameter) –  ≈ konstanty Základní bázové třídy •  %RegisteredObject -­‐  Mohou existovat v pamě$, nemohou být uloženy do DB -­‐  Metoda %New() -­‐  %Persistent -­‐  Samy o sobě mohou být uloženy do DB -­‐  Automa$cky generovaná ID -­‐  Dědí od %RegisteredObject -­‐  Metody %OpenId() a %Save() -­‐  %SerialObject -­‐  Mohou bý uloženy do databáze jako součást persistentního (%Persistent) objektu Persistentní třídy •  Indexy –  Pro vyhledávání objektů podle jiných atributů než automa$cky generovaného ID •  Možnost definice vlastního primárního klíče, unikátních klíčů –  Klasické, bitmapy, bitslice, vlastní (API) •  Storage –  Mapování persistentních vlastnosH a indexů na globál(y) –  Generované automa$cky podle definice třídy nebo definované ručně •  Triggery –  později Mapování objektových dat na globály •  Datový globál (primární index) ^PkgName.ClsNameD(ID) = $LB(Prop1, Prop2, …) –  Reference na jiné objekty / vztahy – ID •  Indexový globál –  Klasický ^PkgName.ClsNameI(IdxName, IdxProp1, ..., ID) = $LB(DataProp1, …) –  Bitmapa ^PkgName.ClsNameI(IdxName, IdxVal1, …) = bitstring –  Bitslice ^PkgName.ClsNameI(IdxName, bit) = bitstring Objekty a transakce •  Viz COS práce s tranakcemi •  Navíc možnos$ izolace na úrovni objektů –  Pro všechny objekty stejná výchozí úroveň –  Individuální nastavení při %New() / %OpenId() –  5 úrovní •  None •  Atomic – pokud je objekt uložen do více globálů, shared lock během otevření a exclusive lock během uložení •  Shared -­‐ vždy shared lock během otevření a exclusive lock během uložení •  Shared & Retained – shared lock od otevření do uvolnění z pamě$, exclusive lock během uložení •  Exclusive – exclusive lock od otevření objektu po uvolnění z pamě$ Vyhledávání objektů •  Žádný dotazovací jazyk nad objekty •  Pouze otevírání objektů podle jejich primárního či unikátního klíče •  Vyhledávání podle jiných vlastnosH –  Přímý přístup k datovým/indexovým globálům Vyhledávání objektů •  Žádný dotazovací jazyk nad objekty •  Pouze otevírání objektů podle jejich primárního či unikátního klíče •  Vyhledávání podle jiných vlastnosH –  Přímý přístup k datovým/indexovým globálům –  SQL Caché SQL •  Kompilace třídy -­‐> vytvoření SQL projekce (tabulky) a mapování na globály –  Název tabulky: PkgName1_PkgName2.ClsName •  DML –  SQL engine při vyhodnocování dotazů prochází datové/indexové globály dle vytvořeného mapování •  DDL –  Vygenerování odpovídající třídy Specifika Caché SQL •  Ve třídach lze vytvářet předdefinované dotazy –  Pomocí SQL –  Ručně (metody pro execute, fetch a close) •  Žádné procedurální rozšíření SQL •  Metody/dotazy tříd mohou být volány jako stored procedures / func$ons •  Implicitní JOIN (-­‐>) pro vztahy SELECT * FROM Sample.Person WHERE Friend-­‐>Name = ... Transakce a Caché SQL •  SQL příkazy –  START/SET TRANSACTION –  COMMIT –  ROLLBACK –  LOCK TABLE •  Úrovně izolace –  READ UNCOMMITTED –  READ COMMITTED Trigerry •  V definici třídy –  Spuštění pro objekty / tabulky nebo oboje •  SQL CREATE TRIGGER –  Spouštěno pouze pro SQL •  Neexistují triggery pro přímý přístup ke globálům Vytváření schématu •  Vytvořím třídu –  Mapování na globály a SQL projekce se vytvoří automa$cky •  SQL DDL –  Odpovídající třída a mapování na globály se vytvoří automa$cky •  Navrhnu strukturu globálů –  Musím vytvořit třídu a definovat mapování na globály ručně –  SQL projekce se vygeneruje automa$cky Caché jako aplikační server •  Integrovaná VM pro jazyk COS –  Práce s globály a objekty –  Objektová (de)serializace z/do XML a JSON –  API pro běh SQL –  Bohatá aplikační knihovna •  REST/SOAP klient & server •  Framework pro dynamické HTML & AJAX •  Možnost architektury klient (JS) – REST server (Caché) Caché a OLAP •  Vestavěný BI Engine DeepSee •  Tvorba vícerozměrných kostek –  Extrakce dat ze zdrojových tříd/tabulek/globálů –  Pravidelná synchronizace dat •  Až pseudo real-­‐$me BI •  Prostředí pro tvorbu pivotů, grafů a reportů •  MDX dotazování a REST API •  Vyhodnocování PMML modelů Caché a nestrukturovaná data •  Vestavěná technologie iKnow •  Extrakce konceptů a vztahů mezi nimi bez nutnos$ použiH slovníku •  Vhodné pro první krok analýzy dat Caché a integrace •  Produkt Ensemble –  Nadstavba Caché –  Knihovny a uživatelské rozhranní pro správu ESB •  REST, SOAP, JMS, HTTP, … –  Modelování business procesů –  Grafický návrhář datových transformací –  Jednododuchý ucelený design Přístup k datům v Caché •  Globálové API •  En$ty Framework •  Hibernate •  JDBC, ODBC, ADO.Net •  Proxy třídy pro C++, Javu, .Net, Python, Perl –  Je důležitá znalost specifik objektů Caché Budoucnost Caché •  Sharding –  Plnohodnotný SQL a objektový přístup –  Podpora transakcí •  Podpora dalších modelů –  Integrace s SQL –  Dokumentový, grafový, key-­‐value •  Integrace s R •  Integrace s UIMA Dokumentový model •  Ukládání JSON dokumentů v kolekcích –  Dokumenty jsou objekty nebo pole –  Přidělené sekvenční ID •  Indexování dokumentů –  Klasické, bitmapy, vlastní (API) • 
• 
• 
• 
API pro COS, REST, (Javu, .Net) Integrace JSON do COS SQL/JSON Mapování do globálů je binární –  Nelze s nimi přímo manipulovat –  Kromě vlastních indexů •  Verzování Integrace JSON do COS set obj = { “name” : “Alice” } write obj.name, obj.$get(“name”) set array = [ “Alice”, 1, obj ] write array.$get(1) •  Dynamické objekty a pole –  Instance %Object a %Array SQL/JSON •  Standard v pracovní verzi •  JSON_OBJECT, JSON_ARRAY –  Vytvoření JSON objektu/pole z tabulky SELECT JSON_OBJECT('FullName': Name, 'DateOfBirth': DOB) FROM Table SELECT JSON_ARRAY(Name, DOB) FROM Table •  JSON_TABLE –  Dotazy nad kolekcí dokumentů –  Vytváří tabulku JSON_TABLE •  Kolekce People obsahuje dokumenty ve tvaru { “Name” : String, “Age” : Number} SELECT Name, Age FROM JSON_TABLE('People', '$' COLUMNS (Name VARCHAR(50) PATH '$.Name', Age SMALLINT(3) PATH '$.Age' )) WHERE Age >16 API pro COS, REST Vytváření, mazání a výpis kolekcí Vytváření, úprava a mazání indexů pro kolekce Vytváření dokumentů Úprava, nahrazování a mazání dokumentů dle ID •  Dotazování dokumentů s podmínkami alá JSON_TABLE • 
• 
• 
• 
–  Vrací celé dokumenty, ne tabulku Databáze Caché •  Úložiště vícerozměrných polí (globálů) •  Jednotné mapování pro objekty a SQL •  Separátní mapování pro dokumenty –  Integrace dokumentů v SQL (SQL/JSON) –  Dynamické objekty • 
• 
• 
• 
Podpora transakcí a různých úrovní izolace Vestavěný aplikační server (REST rozhraní, …) Vestavěný (pseudo) real-­‐$me BI modul Integrační pla|orma Ensemble jako nadstavba Caché Kdy použít Caché •  Řídká vícerozměrná pole vys$hují charakter ukládaných dat –  Hierarchie –  Hodně vztahů mezi en$tami •  Je třeba využít různé modely pro ukládání dat a eventuelně zaručit transakční zpracování •  Dokážu využít vysokou míru přizpůsobení –  Nízkoúrovňový přístup k datům, vlastní indexy •  Chci zaručit vysokou dostupnost databáze •  Zjednodušení architektury aplikace –  Caché jako aplikační server Děkuji za pozornost •  Ondřej Hoferek –  [email protected] –  +420 244 466 773 •  docs.intersystems.com •  community.intersystems.com •  learning.intersystems.com 

Podobné dokumenty

e-book - Smartsupp

e-book - Smartsupp zákazníky na webových stránkách. Později si ale uvědomí, že ne všichni zákazníci chtějí na chatu komunikovat anebo je dotazů zase příliš mnoho a nestíhají na ně reagovat. V nejhorším případě chat z...

Více

Kolonie

Kolonie Našetřit své žalostné úspory ho stálo sedmnáct let poctivé šetrnosti a lakotného sebezapření. O všechno přijít se mu podařilo za podstatně méně než sedmnáct minut. Takže Eddie O'Hare je v hotelovém...

Více

Dodatek č. 1/2013/1 - Státní fond dopravní infrastruktury

Dodatek č. 1/2013/1 - Státní fond dopravní infrastruktury d) na úhradu ostatních výdajů jmenovitých akcí, u nichž je uzavřena Rámcová smlouva, nebo jmenovitých akcí připravovaných ke spolufinancování z fondů EU v rámci OPD, pro něž není ještě uzavřena Rám...

Více

Dodatek č. 1/2014/2 - Státní fond dopravní infrastruktury

Dodatek č. 1/2014/2 - Státní fond dopravní infrastruktury Rámcová smlouva, nebo jmenovitých akcí připravovaných ke spolufinancování z fondů EU v rámci OPD2, pro něž není ještě uzavřena Rámcová smlouva, ale jsou zařazeny do akcí spolufinancovaných z fondů ...

Více

média ve věku globalizace: náhled do diskurzu

média ve věku globalizace: náhled do diskurzu hmatatelný, více méně kompaktní a historicky distinktivní fenomén, který radikálně mění dosavadní struktury ekonomických, politických i sociálních vztahů. Sociologie globalizace v této souvislosti ...

Více

131219_text Smlouva 1-2014 - Vyplňování Kontrolních zpráv a

131219_text Smlouva 1-2014 - Vyplňování Kontrolních zpráv a předfinancování výdajů, které mají být kryty prostředky z fondů EU ve výši odpovídající podílu dotací z fondů EU na spolufinancované akce. Seznam těchto akcí, u nichž je dotace z fondů EU již schvá...

Více

Medikamentózní léčba kastračně rezistentního karcinomu - I-COP

Medikamentózní léčba kastračně rezistentního karcinomu - I-COP  chemoterapie  kabazitaxel  +  prednison   –  prokázáno  prodloužení  celkového  přežiH  a  paliaVvní  efekt  ve  srovnání  s  CT  mitoxantron  +  prednison  ...

Více

Stáhnout - Trilobit

Stáhnout - Trilobit Principem checkpointingu je snímkování aktuálního stavu procesu a jeho zaznamenávání do nezávislého úložiště - žurnálu procesů. V případě, že vznikne jakákoliv porucha, systém dokáže provést rollba...

Více