BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias SQLFire 1.0 da VMware: foco em escalabilidade e paralelismo

SQLFire 1.0 da VMware: foco em escalabilidade e paralelismo

[Esta nota foi reestruturada e otimizada pela equipe editorial do InfoQ Brasil]

A VMware lançou em dezembro de 2011 a primeira versão estável do SQLFire, um banco de dados SQL distribuído, voltado para alta disponibilidade e escalabilidade horizontal, que oferece replicação e particionamento de tabelas, além da execução de consultas paralelas.

O SQLFire oferece a maioria dos recursos esperados de um sistema de banco de dados relacional tradicional (RDBMS), incluindo o suporte a consultas SQL e drivers JDBC (suporta também .NET). Pode ser implantado no modo embarcado (dentro de um processo Java) ou em uma arquitetura cliente-servidor. Em teoria, o SQLFire pode ser usado em aplicações Java como um repositório de dados SQL auto-contido, já que o driver JDBC, o mecanismo de consultas e o servidor de rede do SQLFire vêm diretamente do Apache Derby, que é um dos componentes da solução.

(Note que, embora muitos dos componentes sejam open source, o SQLFire em si é uma solução proprietária, sendo oferecido como um produto comercial. É possível obter uma versão para fins de avaliação, no entanto.)

O SQLFire oferece recursos adicionais que vão além do paradigma de um único servidor de banco de dados monolítico. Combina a interface SQL tradicional com a tecnologia GemFire, que é baseada em clusters horizontais e pode ser implantado em grupos de clusters com vários hosts. Esses grupos podem conter:

  • Nós (nodes) de armazenamento, que hospedam os dados e podem executar instruções SQL;
  • Nós de acesso, que são capazes de executar instruções SQL, mas não armazenam dados;
  • Nós de localização, que não armazenam dados e não executam instruções, sendo usados apenas para a descoberta de clusters.

Todos os nós têm acesso direto a outros nós e a arquitetura em cluster é completamente abstraída do código de aplicação, que se conecta ao SQLFire via JDBC. Nos bastidores, o SQLFire oferece ainda:

  • Replicação e particionamento de tabelas em todo o cluster;
  • Execução paralela de consultas (Map-Reduce nativo);
  • Transações distribuídas;
  • Persistência em disco opcional;
  • Possibilidade de usar um banco de dados relacional externo (ex.: MySQL) para o armazenamento de dados.

O SQLFire introduz extensões DDL personalizadas que ativam as funcionalidades adicionais. Segue um exemplo em que uma tabela "Airlines" (linhas aéreas) é replicada para os nós do cluster e a tabela "Flights" (voos) é particionada de acordo com uma coluna específica:

    CREATE TABLE AIRLINES
    (
        AIRLINE CHAR(2) NOT NULL CONSTRAINT AIRLINES_PK PRIMARY KEY,
        AIRLINE_FULL VARCHAR(24),
        ECONOMY_SEATS INTEGER,
        BUSINESS_SEATS INTEGER,
        FIRSTCLASS_SEATS INTEGER
    ) REPLICATE;

    CREATE TABLE FLIGHTS
    (
        FLIGHT_ID CHAR(6) NOT NULL ,
        ORIG_AIRPORT CHAR(3),
        DEPART_TIME TIME,
        DEST_AIRPORT CHAR(3),
        ARRIVE_TIME TIME,
        MILES INTEGER,
        AIRCRAFT VARCHAR(6),
        CONSTRAINT FLIGHTS_PK PRIMARY KEY (
        FLIGHT_ID)
    )
    PARTITION BY COLUMN (FLIGHT_ID);

Note que ambas as tabelas são armazenadas apenas na memória por padrão, uma vez que a palavra-chave PERSISTENT do SQLFire não foi utilizada. Há também outras extensões disponíveis, para se definir co-location de tabelas, agrupamento de servidores, execução de procedimentos paralelos etc. Ao selecionar uma combinação dessas funcionalidades, é possível implantar o SQLFire como:

  • Banco de dados SQL independente (stand-alone) em memória;
  • Banco de dados SQL independente com persistência em disco;
  • Banco de dados distribuído misto (com apenas um subconjunto de tabelas em memória, replicadas e/ou particionadas);
  • Cache de memória (várias políticas de despejo são disponibilizadas);
  • Cache para um banco relacional existente.

O último cenário (cache para um banco relacional) é especialmente interessante, pois procura dividir os dados de um banco relacional em duas categorias distintas:

  • Dados históricos que dispensam acesso rápido e podem ser acessados pelo banco relacional;
  • Dados transacionais ou que mantêm estado da aplicação (sessões de usuários, por exemplo), que são acessados através do SQLFire, fazendo o papel de um cache intermediário.

Para conhecer mais sobre o SQLFire, consulte oguia de referência e o blog do produto.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT