Nowe technologie baz danych
Partycjonowanie Partycjonowanie jest fizycznym podziałem danych pomiędzy różne pliki bazy danych Partycjonować można tabele i indeksy bazy danych Użytkownik bazy danych nie jest świadomy tego, czy struktura jest podzielona czy też nie jest. Partycjonowanie nie ma wpływu na zapytania SQL.
Korzyści z partycjonowania Podniesienie skalowalności i zarządzania tabelami o dużych rozmiarach (rzędu kilkuset megabajtów) Lepszy dostęp do danych Możliwość wykorzystania wieloprocesorowych serwerów (każdy procesor może wówczas obsługiwać różne partycje) Przykład: Dana jest tabela sprzedaż posiadająca rekordy dotyczące sprzedaży z wielu miesięcy. Zakładamy, że dzielimy tabelę po miesiącu. Na ostatnim miesiącu są wykonywane częste modyfikacje, a z poprzednich tylko odczyt. Modyfikacje z ostatniego miesiąca nie maja więc wpływu na wydajność z miesięcy poprzednich.
Konfigurowanie partycjonowania tworzenie bazy danych CREATE DATABASE [Data Partition DB] ON PRIMARY (NAME='Data Partition DB Primary FG', FILENAME= 'C:\Data\Primary\Data Partition DB Primary FG.mdf', SIZE=5, MAXSIZE=500, FILEGROWTH=1 ), FILEGROUP [Data Partition DB FG1] (NAME = 'Data Partition DB FG1', FILENAME = 'C:\Data\FG1\Data Partition DB FG1.ndf', SIZE = 5MB, MAXSIZE=500, FILEGROWTH=1 ), FILEGROUP [Data Partition DB FG2] (NAME = 'Data Partition DB FG2', FILENAME = 'C:\Data\FG2\Data Partition DB FG2.ndf', SIZE = 5MB, MAXSIZE=500, FILEGROWTH=1 ), FILEGROUP [Data Partition DB FG3] (NAME = 'Data Partition DB FG3', FILENAME = 'C:\Data\FG3\Data Partition DB FG3.ndf', SIZE = 5MB, MAXSIZE=500, FILEGROWTH=1 )
Konfigurowanie partycjonowania Tworzenie funkcji partycji: CREATE PARTITION FUNCTION [Data Partition Range](int) AS RANGE LEFT FOR VALUES (100000) Tworzenie schematu partycji: CREATE PARTITION SCHEME [Data Partition Scheme] AS PARTITION [Data Partition Range] TO ([Data Partition DB FG1], [Data Partition DB FG2]); Tworzenie tabeli na partycji: CREATE TABLE MyTable (ID INT NOT NULL, Date DATETIME, Cost money) ON [Data Partition Scheme] (ID);
Dodawanie danych declare @count int set @count =1 while @count <=100 begin insert into MyTable select @count,getdate(),100.00 set @count=@count+1 end set @count =100002 while @count <=100202 begin insert into MyTable select @count,getdate(),200.00 set @count=@count+1 end
Odczyt danych Partycjonowanie nie ma wpływu na polecenia SQL: select * from MyTable Odczyt danych z uwzględnieniem partycji: select $partition.[data Partition Range](t.ID), * from MyTable as t
Bazy danych: Key-Value Mamy unikalny klucz oraz jego wartość
Przykład baza relacyjna Persons: ID FIRST_NAME LAST_NAME 0 Steven Edouard 1 Sam Brightwood Accounts: ID ACCOUNT_TYPE ACCOUNT_BALANCE CURRENCY HOLDER (FK: Persons) 0 Investment 80000.00 USD 0 1 Savings 70400.00 USD 0 2 Checking 4500.00 USD 0 3 Checking 4500.00 YEN 1 4 Investment 4500.00 YEN 1 5 Savings 4500.00 YEN 1
Przykład: Key Value "person:0:first_name" = "Steven" "person:0:last_name" = "Edouard" "person:1:first_name" = "Sam" "person:1:last_name" = "Brightwood" "account:0:type" = "Investment" "account:0:balance" = "80000.00" "account:0:currency" = "USD" "account:1:type" = "Savings" "account:1:balance" = "70400.00" "account:1:currency" = "USD..
Przykład: Key Value "account:0:holder" = "person:0 "account:1:holder" = "person:0 "account:2:holder" = "person:0 "account:3:holder" = "person:1 "account:4:holder" = "person:1 "account:5:holder" = "person:1" Zapytanie: Kim jest posiadacz rachunku o ID=1 Jakie rachunki posiada Steven Edouard?
Przykład: Key Value Dodatkowe indeksy: "person:name:edouard_steven" = "person:0 "person:name:sam_brightwood" = "person:1 "person:0:accounts" = "[account:0, account:1, account:2] "person:1:accounts" = "[account:3, account:4, account:5]"
Przykłady Amazon s Dynamo Project Voldemord Redis Memcached and MemcacheDB
Kolumnowe bazy danych Wierszowe bazy danych: wiersze są umieszczone na stronach pamięci bazy danych Kolumnowe bazy danych: kolumny są umieszczone na stronach pamięci bazy danych.
Kolumnowe bazy danych
Wczesne łaczenie
Późne łączenie
Przykłady Google s Bigtable Cassandra HBase