Hypertable
Hypertable is een high performance, open source en zeer schaalbare NoSQL database. Het systeem is gebaseerd op een publicatie over Bigtable, Google’s eigen schaalbare databasesysteem. Het Hypertable open source project is begonnen in maart 2007 door ex-Inktomi engineers en werd gesponsord door Baidu, Rediff.com en Zvents Inc. In 2009 is Hypertable Inc. opgericht om ondersteuning te bieden aan bedrijven die Hypertable gebruiken.

Hypertable vs RDBMSen 
Hypertable is vergelijkbaar met traditionele RDBMSen, op het punt dat het bestaat uit tabellen met rijen en kolommen. Verder zijn de systemen erg verschillend. Zo zijn er geen verschillende datatypes, alles is een UTF-8 string. Ook zijn joins en transacties niet mogelijk, en is er slechts één sleutel. De tabellen kunnen dan ook het beste worden gezien als enorme tabellen met data, gesorteerd op slechts een enkele primaire sleutel, de row key. Omdat de data gesorteerd is op een primaire sleutel, is het DBMS goed geschikt voor applicaties die snel toegang willen tot grote hoeveelheden. Denk hierbij aan systemen zoals ebay en yelp.

Hypertable maakt van de tabelstructuur simpelweg een lijst van key/value paren. De key bestaat hierbij uit een minimum van 3 verschillende delen:
 De row key
 Een identifier voor de kolom
 Een timestamp

Elke cel in de tabel kan dus verschillende versies hebben, gekenmerkt door een timestamp. Een nieuwe waarde van de cel wordt toegevoegd met een nieuwe timestamp, maar overschrijft de oude data niet. Bij een query wordt standaard de meest recente versie teruggegeven.

Design 
Een Hypertable systeem bestaat uit een aantal onderdelen, waarvan de belangrijkste nu zijn: 
 Master
 RangeServers
 Hyperspace
 Filesystem brokers en Distributed File System (DFS)

Master 
Er is één Master. Deze is vooral verantwoordelijk voor metadata operaties, zoals create table/ drop table. Ook zorgt de Master voor load balancing van RangeServers. De Master behandelt absoluut geen client data, en 100% uptime is dus niet heel belangrijk. Een eventuele oplossing voor hoge uptime is een hot standby Master.

De load balancing van de Master werkt als volgt. Elke tabel in Hypertable begint als één simpele tabel, op één server. Er worden meer en meer records aangemaakt, totdat een bepaalde drempelwaarde wordt bereikt. Op dit moment wordt de tabel gesplitst. De ene helft blijft op de server, de andere helft wordt verplaatst naar een andere (range)server binnen het systeem. Naarmate deze delen van de tabellen groeien, zullen deze ook weer verdeeld worden over meerdere servers.

RangeServers 
De RangeServer regelt een gedeelte van de tabel data. Als er een commit binnenkomt, wordt dit eerst weggeschreven in een commit-log op het DFS, zodat deze niet verloren gaat als de RangeServer onverhoopt uitvalt. Vervolgens wordt het naar de zogeheten cellcache geschreven. Deze wordt periodiek weggeschreven naar de schijf, in een cellstore. 

Als de drempelwaarde van het aantal cellstores is bereikt, worden de cellstore samengevoegd en/of gecomprimeerd. 

De merge scanner itereert over zowel de cellcache en cellstores, en voegt waar nodig de data samen, om zo een algeheel beeld van de data op de RangeServer te geven.

Hyperspace 
Hyperspace is een Distributed Lock Manager (DLM) met zeer hoge beschikbaarheid. De Hyperspace module bevat een implementatie van een highly available lock service gemodelleerd naar het Chubby system.

Filesystem brokers en DFS 
Hypertable is gebouwd om op elk distributed filesystem (DFS) te kunnen draaien. Een voorbeeld van een veelgebruikt DFS is Hadoop. 

Er zijn brokers voor alle verschillende DFSen. Deze brokers zorgen voor de communicatie tussen de RangeServers en het gekozen DFS.

Hypertable Query Language (HQL) 
Hypertable heeft een eigen query taal: Hypertable Query Language (HQL). Deze wijkt af van SQL, vanwege de meerdere dimensies en omdat er geen datatype gedefinieerd hoeft/kan worden.

CREATE TABLE query 
Opbouw:CREATE TABLE tablename (column_family1, column_family2…. );

Een voorbeeld:
CREATE TABLE fruits (color, energy, protein, vitamins);

INSERT query 
Een insert query wijkt nog meer af. Je insert in een table, een waarde voor elke column voor elke row key. Deze row key wordt ook gelijk aangemaakt, en hoeft dus niet eerst gedefinieerd te worden.

OpbouwINSERT INTO tablename VALUES 
(rowkey_1, column_family1, value),
(rowkey_1, column_family2, value)....

Een voorbeeld:
INSERT INTO fruits VALUES ("apple", "color", "red"),
 ("apple", "energy", "207KJ"),
 ("apple", "protein", "0.4g"),
 ("apple", "vitamins:C", "15mg"),
 ("apple", "vitamins:B1", "0.02mg");

SELECT 
Uiteindelijk een select. 

VoorbeeldenSELECT CELLS * FROM fruits;
SELECT CELLS * FROM fruits WHERE ROW=”banana”;
SELECT CELLS vitamins FROM fruits WHERE ROW=”apple”;
SELECT CELLS vitamins:B1 FROM fruits;

Externe links 

 Officiële website
 Google Code pagina van het project
 Hypertable op myNoSQL
 GoGaRuCo 2009 - Hypertable and Rails by Rusty Burchfield and Josh Tyler
 Hypertable - An Open Source, High Performance, Scalable Database - by Doug Judd on Jul 31, 2009
 Google Chubby

Database