35
Edward Ribeiro – [email protected] Http://www.twitter.com/edward_ribeiro Http://www.github.com/eribeiro

VoltDB talk at QCON-Brasil

Embed Size (px)

Citation preview

Page 1: VoltDB talk at QCON-Brasil

Edward Ribeiro – [email protected]://www.twitter.com/edward_ribeiroHttp://www.github.com/eribeiro

Page 2: VoltDB talk at QCON-Brasil

Big Data

Não vamosdeste BigData...

Page 3: VoltDB talk at QCON-Brasil

… mas sim deste BigData.

Page 4: VoltDB talk at QCON-Brasil

"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.

Page 5: VoltDB talk at QCON-Brasil

OLTP OLAP

Page 6: VoltDB talk at QCON-Brasil

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

Page 7: VoltDB talk at QCON-Brasil

"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.

Page 8: VoltDB talk at QCON-Brasil

Divisão de Trabalho

Page 9: VoltDB talk at QCON-Brasil

"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.

Page 10: VoltDB talk at QCON-Brasil

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

Page 11: VoltDB talk at QCON-Brasil

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

Page 12: VoltDB talk at QCON-Brasil

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

Page 13: VoltDB talk at QCON-Brasil

100% Memória

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

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

Page 14: VoltDB talk at QCON-Brasil

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

Page 15: VoltDB talk at QCON-Brasil

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.

Page 16: VoltDB talk at QCON-Brasil

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

Page 17: VoltDB talk at QCON-Brasil

Partições

WorkQueue

execution engine

Table DataIndex Data

Page 18: VoltDB talk at QCON-Brasil
Page 19: VoltDB talk at QCON-Brasil

Transações

● Single-partition

update pontuacao = 1000 from jogadores

where jogador_id = ?;

● Multi-partition

select max(pontuacao) from jogadores;

Page 20: VoltDB talk at QCON-Brasil

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

Page 21: VoltDB talk at QCON-Brasil

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● ...

Page 22: VoltDB talk at QCON-Brasil
Page 23: VoltDB talk at QCON-Brasil
Page 24: VoltDB talk at QCON-Brasil

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

Page 25: VoltDB talk at QCON-Brasil

Snapshots

Page 26: VoltDB talk at QCON-Brasil

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

Page 27: VoltDB talk at QCON-Brasil

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/

Page 28: VoltDB talk at QCON-Brasil

Versão Comercial

● Command Logging

● VoltDB Enterprise Manager

Page 29: VoltDB talk at QCON-Brasil

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

Page 30: VoltDB talk at QCON-Brasil
Page 31: VoltDB talk at QCON-Brasil
Page 32: VoltDB talk at QCON-Brasil

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

Page 33: VoltDB talk at QCON-Brasil

Perspectivas Futuras

● Particionamento de Dados Automático

● Modelagem Preditiva de Aplicações OLTP

● Execução Especulativa

● Suporte a WAN

● On-the-fly maintenance

Page 34: VoltDB talk at QCON-Brasil

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

Page 35: VoltDB talk at QCON-Brasil