voltdb talk at qcon-brasil

Post on 08-Jul-2015

390 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Edward Ribeiro – edward.ribeiro@gmail.comHttp://www.twitter.com/edward_ribeiroHttp://www.github.com/eribeiro

Big Data

Não vamosdeste BigData...

… mas sim deste BigData.

"The end of an architectural era: (it’s time for a complete rewrite),"M. Stonebraker, S. Madden, D. J. Abadi, S. Harizopoulos, N. Hachem, and P. Helland, in VLDB ’07: Proceedings of the 33rd international conference on Very large data bases, 2007, pp. 1150-1160.

OLTP OLAP

OLTP

● Transações envolvem pequenas quantidades de dados● Consultas simples e pontuais (where user_id = ?)● Acesso a dados indexados● Operações conhecidas a priori (sem ad hoc)● Consultas e atualizações frequentes

● Dados geralmente cabem em RAM● Se os dados históricos forem arquivados

periodicamente

"OLTP through the looking glass, and what we found there,"

S. Harizopoulos, D. J. Abadi, S. Madden, and M. Stonebraker, in SIGMOD ’08: Proceedings of the 2008 ACM SIGMOD international conference on Management of data, New York, NY, USA, 2008, pp. 981-992.

Divisão de Trabalho

"H-store: a high-performance, distributed main memory transaction processing system,"

R. Kallman, H. Kimura, J. Natkins, A. Pavlo, A. Rasin, S. Zdonik, E. P. C. Jones, S. Madden, M. Stonebraker, Y. Zhang, J. Hugg, and D. J. Abadi, Proc. VLDB Endow., vol. 1, iss. 2, pp. 1496-1499, 2008.

Características do VoltDB

● Distribuído (sharding)

● 100% in-memory

● ACID e SQL (sub-set)

● Interação entre aplicação e banco somente através de stored procedures

Características do VoltDB

● Implementado em C++ (execution engine) e Java (JNI)

● Clientes em Java, C++, Ruby*, Erlang*, e http-json● não tem JDBC/ODBC !!!

● Open Source (GPL)

● Linux 64 bits

Distribuído

● Sharding (particionamento horizontal)● Cada tabela, uma coluna é usada para o

particionamento (tabelas particionadas)● Transações ordenadas globalmente

● Peer-to-Peer (P2P)● Cluster LAN

100% Memória

● Dados + Stored Procedures + Index● 20 * 64 GB = 1.2 TB

● MAS● K-Safety para durabilidade (D em ACID)● Snapshots em disco

Stored Procedures

● A interação entre aplicações clientes e o BD se dá somente através de stored procedures● SQL ANSI (subset)● Java

● Vantagens: ● Sem bloqueios de usuário● Reduzir round-trip de rede● Transação = stored procedure

– sucesso → commit, exceção → abort

System Stored Procedures

● Chamada síncrona ou assíncrona● Manual de boas práticas para stored

procedures● Não “pesar” a SP● Maximizar o uso de single partition SP

● System Stored Procedures: @AdHoc, @Shutdown, @SnapshotRestore, @SnapshotSave, @Statistics, @SystemInformation, @UpdateApplicationCatalog, @UpdateLogging, etc.

Partições

● Uma participação contém:● Execution Engine (single-threaded)● Índice● Dados● Filas de execução● Cada partição corresponde a um núcleo de CPU

Partições

WorkQueue

execution engine

Table DataIndex Data

Transações

● Single-partition

update pontuacao = 1000 from jogadores

where jogador_id = ?;

● Multi-partition

select max(pontuacao) from jogadores;

Single Partition x Multi-Partition

1 101 21 101 34 401 2

1 knife2 spoon3 fork

Partition 1

2 201 15 501 35 502 2

1 knife2 spoon3 fork

Partition 2

3 201 16 601 16 601 2

1 knife2 spoon3 fork

Partition 3

table orders : customer_id (partition key)(partitioned) order_id

product_id

table products : product_id (replicated) product_name

select count(*) from orders where customer_id = 5single-partition

select count(*) from orders where product_id = 3multi-partition

insert into orders (customer_id, order_id, product_id) values (3,303,2)single-partition

update products set product_name = ‘spork’ where product_id = 3multi-partition

K-Safety

● Disponibilidade, Tolerância a falhas, e Durabilidade

● Cada tupla é replicada em um número “k” de máquinas.● k-1 → uma cópia além do original● k-2 → duas cópias além do original● ...

Snapshots

● Spooling para disco● Pode ser operação única, a intervalos

regulares ou continuamente● Dois propósitos:

● Back-up contra desastres● Exportar dados “vivos para outros sistemas

– Configura-se as tabelas a serem exportadas

Snapshots

Export tables

● Permite exportar tabelas para arquivos.● Exporta dados “vivos”

● Quaisquer modificações (insert, update, delete)● Somente inserções

● Tabelas especificadas pelo usuário● Flat files, jdbc/odbc em breve

Performance

● A princípio, 45x superior a um BD convencial

● Escalabilidade linear● 300.000 tx/s em ~ 15 nós (commodity PCs)● 1.000.000 tx/s (hardware high end SGI)

● http://www.mysqlperformanceblog.com/2011/02/28/is-voltdb-really-as-scalable-as-they-claim/

Versão Comercial

● Command Logging

● VoltDB Enterprise Manager

Command Logging

● Versão 1.5.5 e posteriores● Spool de chamadas a stored procedures para

disco● Não é WAL (sorry trolls...), mas o princípio é o

mesmo● Síncrono ou assíncrono.● Buffering e Replay

Casos de Uso (potenciais)

● Jogos on-line● Monitoramento do mercado financeiro● Reserva de passagens aéreas on-line● Propaganda on-line● Tracking de pacotes● Registro de chamadas telefônicas● Real-time Analytics● Fonte:http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-

actually-using-nosql-for.html

Perspectivas Futuras

● Particionamento de Dados Automático

● Modelagem Preditiva de Aplicações OLTP

● Execução Especulativa

● Suporte a WAN

● On-the-fly maintenance

● Acesse! ● Estude! ● Baixe! (GPL)● Experimente!● Contribua!

top related