Transcript Document

Šiuolaikinės duomenų bazių valdymo
sistemos
Sergejus Topolovas, IFM-9/2
Paskaitos tikslas
• Supažindinti su šiais laikais populiariomis
duomenų bazių valdymo sistemomis bei
alternatyviais duomenų valdymo sprendimais
2010.05.12
S. Topolovas
2
Paskaitos planas
• BigTable DBVS
• HBase DBVS
• Hypertable DBVS
• CouchDB DBVS
• SimpleDB DBVS
• HSQLDB DBVS
2010.05.12
S. Topolovas
3
Paskirstytos DBVS
• Atsiradimą įtakojo:
– Apdorojamų duomenų kiekio augimas
– Didelių skaičiavimų resursų poreikis duomenims
apdoroti
– Griežti atliekamų operacijų laiko reikalavimai
2010.05.12
S. Topolovas
4
Paskirstytų DBVS failų sistemos (1)
• Pagrindinės paskirstytos failų sistemos:
– Google File System (GFS)
– Hadoop Distributed File System (HDFS)
– GlusterFS, CloudStore (buvusi KFS) ir kitos
2010.05.12
S. Topolovas
5
Paskirstytų DBVS failų sistemos (2)
• GFS, HDFS: panaši architektūra bei veikimo
principai
• 4 principai:
– Našumas
– Paskirstamumas
– Patikimumas
– Pasiekiamumas
• Sudarytos iš pagrindinio (master) serverio ir
darbinių serverių (chunk server, region server)
2010.05.12
S. Topolovas
6
Paskirstytų DBVS failų sistemos (3)
• Pagrindinis serveris:
– Duomenų struktūros medis
– Informacijos apie darbinius serverius pateikimas
klientams
– Darbinių serverių valdymas, administravimas ir t.t.
• Darbiniai serveriai:
– Darbas su duomenimis
2010.05.12
S. Topolovas
7
Paskirstytų DBVS failų sistemos (4)
2010.05.12
S. Topolovas
8
BigTable DBVS: Informacija
• Google projektas
• Paskirstytų DBVS pradininkas
• Plačiai naudojamas didžiojoje daugumoje Google
aplikacijų: tinklapių indeksavimas, Google Earth,
Google Finance, Google Analytics ir t.t.
• Lanksti duomenų struktūros forma
2010.05.12
S. Topolovas
9
BigTable DBVS: Struktūra (1)
• Remiasi GFS, Chubby ir SSTable
• Chubby – paskirstytų užraktų valdymo sistema
(failų medis, sesijos, kelios replikos, lentelių
serverių valdymas ir t.t.)
• SSTable – saugomų duomenų formatas
(surikiuota duomenų struktūra, greita paieška,
galimybe sukelt į operatyviąją atmintį)
2010.05.12
S. Topolovas
10
BigTable DBVS: Struktūra (2)
• Loginis lygmuo
2010.05.12
S. Topolovas
11
BigTable DBVS: Struktūra (3)
• Fizinis lygmuo: trijų lygių B- medžio tipo struktūra
2010.05.12
S. Topolovas
12
BigTable DBVS: Map ir Reduce (1)
• Karkasas didelio masto paskirstytam duomenų
apdorojimui.
• Dvi funkcijos: Map ir Reduce
• Map: duomenų atrinkimas, paruošimas.
– map(raktas, reikšmė) -> sąrašas(raktas, reikšmė)
• Tarpinis žingsnis: grupavimas pagal raktus:
– sąrašas(raktas, reikšmė) -> (raktas -> sąrašas(reikšmė))
• Reduce: duomenų grupavimas, papildomi
skaičiavimai.
– (raktas -> sąrašas(reikšmė)) -> sąrašas(reikšmė)
2010.05.12
S. Topolovas
13
BigTable DBVS: Map ir Reduce (2)
• Veiksmai su duomenų grupėmis yra atliekami
lygiagrečiai
• Pavyzdys: žodžių kiekio dokumente skaičiavimas
map(String key, String value):
for each word w in value:
EmitIntermediate(w, "1");
reduce(String key, Iterator values):
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
2010.05.12
S. Topolovas
14
BigTable DBVS: Pavyzdys (1)
• Modifikavimas bei šalinimas
// Atidaroma lentelė
Table *T = OpenOrDie("/bigtable/web/webtable");
RowMutation r1(T, "com.cnn.www");
// Reikšmės pakeitimas
r1.Set("anchor:www.c-span.org", "CNN");
// Reikšmės šalinimas
r1.Delete("anchor:www.abc.com");
Operation op; Apply(&op, &r1);
2010.05.12
// Atliekamos nurodytos operacijos
S. Topolovas
15
BigTable DBVS: Pavyzdys (2)
• Išrinkimas
Table *T = OpenOrDie("/bigtable/web/webtable"); // Atidaroma lentelė
Scanner scn(T);
Stream *stream;
// Nurodoma imti stulpelių šeimą
stream = scn.FetchColumnFamily("anchor");
stream->SetReturnAllVersions();
// „anchor“ ir visas jos versijas
scn.Lookup("com.cnn.www");
// iš eilutės „com.cnn.www“
for (; !stream->Done(); stream->Next()) {
// Spausdinimas
printf("%s %s %lld %s\n", scn.RowName(),
stream->ColumnName(), stream->MicroTimestamp(),
stream->Value()); }
2010.05.12
S. Topolovas
16
HBase DBVS: Informacija
• Atviro kodo BigTable analogas, parašytas Java
kalboje
• Plačiai naudojamas Yahoo! aplikacijose
• Struktūriškai labai panašus į BigTable: tie patys
principai ir realizacijoje naudojami sprendimai
• Sparčiai augantis sistemos našumas su kiekviena
nauja versija
• Hadoop karkaso dukterinis projektas. Hadoop –
karkasas, skirtas paskirstytų duomenims reiklių
aplikacijų palaikymui bei valdymui
2010.05.12
S. Topolovas
17
HBase DBVS: Hadoop
• Core – bendro panaudojimo įrankių rinkinys (dabar: Hadoop
Common)
• Avro – duomenų serializacija
• Chukwa – paskirstytų duomenų surinkimas ir analizė
• Hive – duomenų saugyklos infrastruktūros valdymo sistema
• Pig – aukšto lygio programavimo kalba, skirta darbui su
paskirstytais duomenimis ir paskirstytų skaičiavimų vykdymui
• ZooKeeper – aukšto našumo
paskirstytų aplikacijų
koordinavimo sistema (Google
Chubby analogas)
2010.05.12
S. Topolovas
18
HBase DBVS: Struktūra
2010.05.12
S. Topolovas
19
Hypertable DBVS: Informacija
• Atviro kodo BigTable analogas, parašytas C++
kalboje
• Struktūriškai labai panašus į BigTable
• Palaiko įvairias failų sistemas (GFS, HDFS ir
kitas) specialios realizuotos sąsajos dėka
• Speciali užklausų kalba – HQL.
2010.05.12
S. Topolovas
20
Hypertable DBVS: Struktūra
2010.05.12
S. Topolovas
21
Hypertable DBVS: HQL (1)
• Hypertable užklausų kalba (Hypertable Query
Language - HQL)
• Sintaksiškai labai panaši į standartinį SQL
• Aptarsime svarbiausias komandas: CREATE
TABLE, DROP TABLE, ALTER TABLE, INSERT,
SELECT
2010.05.12
S. Topolovas
22
Hypertable DBVS: HQL (2)
• CREATE TABLE:
CREATE TABLE [parametras ...] vardas '(' [aprašas, ...] ')
Parametrai: MAX_VERSIONS, TTL, BLOCKSIZE,
REPLICATION, COMPRESSOR
• CREATE TABLE pavyzdžiai:
CREATE TABLE foo (a, b);
CREATE TABLE foo (a, b, c, ACCESS GROUP bar (b, c));
CREATE TABLE foo (a MAX_VERSIONS=1, b, c, ACCESS GROUP
group BLOCKSIZE=1024 (b, c));
2010.05.12
S. Topolovas
23
Hypertable DBVS: HQL (3)
• DROP TABLE:
DROP TABLE [IF EXISTS] lentelės_vardas
• DROP TABLE pavyzdys:
DROP TABLE foo
• ALTER TABLE:
ALTER TABLE lentelės_vardas pakeitimo_tipas '(' [pakeitimas] ')'
[pakeitimo_tipas '(' pakeitimas ')' ... ]
Pakeitimo tipai: ADD, DROP, RENAME
2010.05.12
S. Topolovas
24
Hypertable DBVS: HQL (4)
• ALTER TABLE pavyzdys:
CREATE TABLE foo (a, b, c, ACCESS GROUP bar (b, c));
ALTER TABLE foo ADD (d MAX_VERSIONS=2) DROP (c);
• INSERT:
INSERT INTO lentelės_vardas VALUES reikšmių_sąrašas
• INSERT pavyzdys:
INSERT INTO foo VALUES ("raktas", "b", "10");
2010.05.12
S. Topolovas
25
Hypertable DBVS: HQL (5)
• SELECT:
SELECT ('*' | stulpelio_vardas [',' stulpelio_vardas]*) FROM
lentelės_vardas [where_predikatai] [opcijos]
Opcijos: REVS, LIMIT
WHERE predikatuose galima naudot ROW, CELL,
TIMESTAMP
• SELECT pavyzdžiai:
SELECT * FROM foo WHERE ROW=“eilė“;
SELECT * FROM foo WHERE ROW=^”386” AND "2008-11-13
05:00:00" <= TIMESTAMP < "2008-11-13 06:00:00";
2010.05.12
S. Topolovas
26
BigTable, HBase ir Hypertable
našumo palyginimas
Hypertable
Eksperimentas eilučių kiekis
(eil./s.)
Atsitiktinis
431
skaitymas
Atsitiktinis
1903
rašymas
Nuoseklus
621
skaitymas
Nuoseklus
1563
rašymas
Perrinkimas
HBase eilučių
kiekis (eil./s.)
BigTable
eilučių kiekis
(eil./s.)
1106
1208
2834
8850
5433
4425
5140
8547
15420
15385
-
Palyginimo metu eilute buvo skaitoma vienas 1000 baitų didžio poros
(raktas, reikšmė) elementas.
2010.05.12
S. Topolovas
27
CouchDB DBVS: Informacija
• Nauja ir smarkiai populiarėjanti atviro kodo
paskirstyta DBVS
• Aplikacijų kūrimo karkasas CouchApp
• Administravimo įrankis Futon
• HTTP užklausom (PUT, GET, POST, COPY,
DELETE) bei JSON paremtas valdymo modelis
• Lanksti duomenų struktūra
• Palaiko tiek Linux, tiek Windows operacines
sistemas
2010.05.12
S. Topolovas
28
CouchDB DBVS: Struktūra (1)
• Duomenys saugomi dokumentais
• Kiekvienas dokumentas turi unikalų identifikatorių
bei revizijos numerį
• Dokumentai sudaryti iš porų (lauko_vardas,
reikšmė) (Gerai atitinka JSON notaciją)
• Dokumento laukų kiekis bei saugomų duomenų
dydis yra neribojami
• Duomenų neperrašymo principas
2010.05.12
S. Topolovas
29
CouchDB DBVS: Struktūra (2)
• Vaizdai palengvintam operavimui duomenimis
(paremti Map ir Reduce funkcijomis)
• Vaizdai generuojami dinamiškai, saugomi šalia
dokumentų, nekeičia pačių duomenų (tik
apdoroja)
• Vaizdai gali būti laikini arba pastovūs
2010.05.12
S. Topolovas
30
CouchDB DBVS: Pavyzdžiai (1)
• JSON objekto pavyzdys:
{
„firstName": "Joe",
„lastName": "Lennon",
„email": [
"[email protected]",
"[email protected]"
],
„web": http://xyz.com
}
2010.05.12
S. Topolovas
31
CouchDB DBVS: Pavyzdžiai (2)
• Pavyzdžiai paremti Linux Curl programa HTTP
užklausoms siuntinėti
curl -X DELETE http://127.0.0.1:5984/contacts
curl -X PUT http://127.0.0.1:5984/contacts
curl -X PUT http://127.0.0.1:5984/contacts/joelennon -d
'{"firstName":"Joe","lastName":"Lennon","email":"[email protected]"}‚
curl -X GET http://127.0.0.1:5984/contacts/joelennon
{"_id":"joelennon","_rev":"1-45597617", "firstName":"Joe",
"lastName":"Lennon", "email":"[email protected]"}
2010.05.12
S. Topolovas
32
CouchDB DBVS: Pavyzdžiai (3)
curl -X COPY http://127.0.0.1:5984/contacts/joelennon -H "Destination:
johnsmith"
Atsakymas: {"rev":"1-4152282996"}
curl -X PUT http://127.0.0.1:5984/contacts/johnsmith –d
'{"_rev":"1-4152282996", "firstName":"John", "lastName":"Smith", "email":
["[email protected]","[email protected]"], "phone":"(555) 5555555"}'
Atsakymas: {"ok":true,"id":"johnsmith","rev":"2-843046980"}
2010.05.12
S. Topolovas
33
CouchDB DBVS: Pavyzdžiai (4)
• Vaizdo kūrimo pavyzdys (atlieka žodžių kiekio
dokumente skaičiavimą):
function(doc) {
var words = doc.text.toLowerCase().replace(/[^a-z]+/g, ' ').split(' ');
for(word in words)
emit(words[word], 1);
}
function(key, values, rereduce) {
return sum(values);
}
2010.05.12
S. Topolovas
34
CouchDB DBVS: Pavyzdžiai (5)
2010.05.12
S. Topolovas
35
CouchDB DBVS: Pavyzdžiai (6)
2010.05.12
S. Topolovas
36
SimpleDB DBVS: Informacija
• Amazon firmos paskirstyta laisvo duomenų
formato DBVS
• Siūloma kaip paslauga – jokių administravimo
darbų!
• Valdoma per REST užklausas arba Web-Servisus
• Autentifikacija per saugumo ir prieinamumo raktus
• Trūkumai:
– Mokesčiai už suvartotą kompiuterių darbo laiką bei
saugomų duomenų kiekį
– Ne ypatingai didelis geografinis klasterių prieinamumas
2010.05.12
S. Topolovas
37
SimpleDB DBVS: Struktūra
2010.05.12
S. Topolovas
38
SimpleDB DBVS: Pavyzdys (1)
NameValueCollection appConfig = ConfigurationManager.AppSettings;
// Aprašomi autentifikacijos duomenys
AmazonSimpleDB sdb = AWSClientFactory.CreateAmazonSimpleDBClient(
appConfig["AWSPrieigosRaktas"], appConfig["AWSSaugumoRaktas"]);
String domainName = "MyStore";
CreateDomainRequest createDomain = (new
CreateDomainRequest()).WithDomainName(domainName);
sdb.CreateDomain(createDomain);
// Sukuriamas domenas MyStore
2010.05.12
S. Topolovas
39
SimpleDB DBVS: Pavyzdys (2)
String itemNameOne = "Item_01";
PutAttributesRequest putAttributesActionOne = new
PutAttributesRequest().WithDomainName(domainName).WithItemName(itemNameOne);
List<ReplaceableAttribute> attributesOne = putAttributesActionOne.Attribute;
attributesOne.Add(new
ReplaceableAttribute().WithName("Category").WithValue("Clothes"));
attributesOne.Add(new
ReplaceableAttribute().WithName("Subcategory").WithValue("Sweater"));
attributesOne.Add(new ReplaceableAttribute().WithName("Name").WithValue("Cathair
Sweater"));
attributesOne.Add(new ReplaceableAttribute().WithName("Color").WithValue(“Blue"));
attributesOne.Add(new ReplaceableAttribute().WithName("Size").WithValue("Small"));
attributesOne.Add(new ReplaceableAttribute().WithName("Size").WithValue("Large"));
sdb.PutAttributes(putAttributesActionOne); // Sukuriamas elementas Item_01 su atributais
2010.05.12
S. Topolovas
40
SimpleDB DBVS: Pavyzdys (3)
String selectExpression = "Select * From MyStore Where Category = 'Clothes'";
SelectRequest selectRequestAction = new SelectRequest().WithSelectExpression(selectExpression);
SelectResponse selectResponse = sdb.Select(selectRequestAction);
// Atliekamas duomenų išrinkimas pagal parašytą užklausą
SelectResult selectResult = selectResponse.SelectResult;
foreach (Item item in selectResult.Item)
{
Console.WriteLine(" Elemento pavadinimas: {0}", item.Name);
foreach (Amazon.SimpleDB.Model.Attribute attribute in item.Attribute) {
Console.WriteLine(" Atributo pavadinimas: {0}", attribute.Name);
Console.WriteLine(" Atributo reikšmė: {0}", attribute.Value);
}
}
2010.05.12
S. Topolovas
41
SimpleDB DBVS: Pavyzdys (4)
Amazon.SimpleDB.Model.Attribute deleteValueAttribute = new
Amazon.SimpleDB.Model.Attribute().WithName(“Size").WithValue(“Large");
DeleteAttributesRequest deleteValueAction = new
DeleteAttributesRequest().WithDomainName("MyStore").WithItemName("Item_01").WithAttribute(dele
teValueAttribute);
sdb.DeleteAttributes(deleteValueAction);
// Atributo Large pašalinimas iš elemento Item_01
DeleteAttributesRequest deleteItemAction = new
DeleteAttributesRequest().WithDomainName("MyStore").WithItemName("Item_01");
sdb.DeleteAttributes(deleteAttributeAction);
2010.05.12
// Elemento Item_01 pašalinimas
S. Topolovas
42
HSQLDB DBVS: Informacija
• Reliacinė aukšto našumo Java kalboje parašyta
DBVS (Hyper Structured Query Language
Database - HSQLDB)
• Naudoja JDBC tvarkyklę duomenų valdymui
(paprastumas, lankstumas)
• Duomenų saugojimas operatyviojoje atmintyje
(didelis našumas atliekant įvairias operacijas)
• Palaiko didžiąją dali SQL standartų
• Naudojama daugelyje produktų, pavyzdžiui
OpenOffice.org
2010.05.12
S. Topolovas
43
HSQLDB DBVS: Struktūra
• JAR failas, susidedantis iš 4 komponentų:
– Reliacinis DBVS variklis
– JDBC tvarkyklė
– DB valdymo aplikacija su grafine vartotojo sąsaja
– SQL komandų per komandinę eilutę interpretatorius
• Duomenų bazė = katalogas
• Katalogo tipai: mem, file, res
• Keli lentelių tipai: MEMORY, CACHED, TEXT
2010.05.12
S. Topolovas
44
HSQLDB DBVS: Našumas
2010.05.12
S. Topolovas
45
Palyginimas su MS SQL, Oracle,
MySQL ir išvados
• Standartinės reliacinės DB yra netinkamos darbui su labai
dideliais duomenų kiekiais
• Laisvai pasirenkamas duomenų formatas – didžiulis pliusas
ne reliacinėms DBVS, tačiau nereikia užmiršti duomenų
atsikartojimo problemos
• Reliacinėse sistemose sunku tinkamai paskirstyti darbą
norint išnaudoti keliolikos kompiuterių suminius skaičiavimo
pajėgumus
• Augant duomenų kiekiams bei jų apdorojimo reikalavimams
vis didesnę svarbą pradeda vaidinti paskirstomos duomenų
bazių valdymo sistemos.
2010.05.12
S. Topolovas
46
Klausimai?
2010.05.12
S. Topolovas
47
Ačiū už dėmesį !
2010.05.12
S. Topolovas
48