VoltDB talk at QCON-Brasil
-
Upload
edward-ribeiro -
Category
Technology
-
view
390 -
download
0
Transcript of VoltDB talk at QCON-Brasil
Edward Ribeiro – [email protected]://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!