Qual o melhor banco de dados embutido?

7 respostas
sqlitesqlhsqldb
MIOR

Qual banco de dados embutido vocês recomendam? Ou vai depender do tipo da aplicação?

Estive testando HyperSQL, H2, SQLite e Derby.

Pelo que notei o HyperSQL e o H2 são de longe os mais rápidos (extremamente rápido), porem velocidade não é tudo. Notei também que o SQLite é o mais simples, cria apenas 1 simples arquivo, porem ele é o mais lento. E o Derby é da apache só isso que posso dizer.

Na opinião e experiencia de vocês qual vale mais a pena usar?

7 Respostas

TerraSkilll

Tudo sempre depende da aplicação. Avalie e explique o que quer fazer, pois sem mais informações, qualquer sugestão serve.

Quando precisei, o SQLite me atendeu. Mas foram projetos realmente pequenos. Usei H2 uma vez, HyperSQL e Derby não sei.

Para coisas mais parrudas, prefiro um DB completo como Firebird (que também tem versão embutida) ou MySQL/MariaDB, principalmente por ter mais familiaridade.

Abraço.

MIOR

Estou criando uma aplicação desktop que necessita de um banco embutido. No Android você tem uma API própria para manuseio de SQLite então não tem nem porque querer usar outra coisa, porem na questão de desktop existem varias alternativas. Eu acho que nesse meu caso onde é uma aplicação simples que não vai passar dos 5 ou 10 mil dados por ano eu acho que HyperSQL ou H2 já vão servir.

FearX

Eu acho melhor o SQLite pra embutido. Tem esse exemplo no github que mostra como usar o básico do SQLite com JDBC.

MIOR

Você já fez testes comparando eles? Já viu alguma discussão sobre isso? Todos os 4 são fáceis de usar, a maneira como você cria o db e chama a conexão é a mesma maneira, unica coisa que muda é o driver e a url. Outra diferença também é que o SQLite já vem no Android por padrão por isso ele é mais conhecido.
Esses são os métodos que eu usei pra testar a conexão dele.

public static void testarSQLite() {
    try {
        Class.forName("org.sqlite.JDBC");
        
        File path = new File(System.getProperty("user.home"));
        String host = path.getAbsolutePath() + File.separator + "databases" + File.separator + "sqlite.db";

        DriverManager.getConnection("jdbc:sqlite:" + host);
        System.out.println("[SQLite]     Conexão efetuada com sucesso!");

    } catch (ClassNotFoundException | SQLException e) {
        System.err.println("[SQLite]     Falha ao tentar conectar-se.");
    }
}

public static void testarHyperSQL() {
    try {
        Class.forName("org.hsqldb.jdbcDriver");
        
        File path = new File(System.getProperty("user.home"));
        String host = pathgetAbsolutePath() + File.separator + "databases" + File.separator + "hypersql.db";

        DriverManager.getConnection("jdbc:hsqldb:" + host);
        System.out.println("[HyperSQL]   Conexão efetuada com sucesso!");

    } catch (ClassNotFoundException | SQLException e) {
        System.err.println("[HyperSQL]   Falha ao tentar conectar-se.");
    }
} 

public static void testarH2() {
    try {
        Class.forName("org.h2.Driver");
        
        File path = new File(System.getProperty("user.home"));
        String host = path.getAbsolutePath() + File.separator + "databases" + File.separator + "h2.db";

        DriverManager.getConnection("jdbc:hsqldb:" + host);
        System.out.println("[H2]         Conexão efetuada com sucesso!");

    } catch (ClassNotFoundException | SQLException e) {
        System.err.println("[H2]         Falha ao tentar conectar-se.");
    }
}

public static void testarDerby() {
    try {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        
        File path = new File(System.getProperty("user.home"));
        String host = path.getAbsolutePath() + File.separator + "databases" + File.separator + "derby.db";
        
        DriverManager.getConnection("jdbc:derby:" + host + ";create=true");
        System.out.println("[Derby]      Conexão efetuada com sucesso!");

    } catch (ClassNotFoundException | SQLException e) {
        System.out.println(e);
        System.err.println("[Derby]      Falha ao tentar conectar-se.");
    }
}
FearX

Não e sim. Num devbar conversamos sobre isso uma vez. Opiniões divididas e bem acirradas

MIOR

Como eu já citei antes, eu fiz alguns testes aqui inserindo alguns milhares de dados e obtendo eles de volta, e sem duvidadas o HyperSQL e o H2 são os mais velozes disparado, não da nem pra comparar. Porém velocidade não é tudo.
Eu queria saber a opinião de profissionais que já usaram ambos na pratica pra poder ter uma noção e comparar em questões de produção mas não encontrei ninguém.

FearX

Para o fluxo de dados que você tem, não vai fazer diferença.

Criado 14 de maio de 2019
Ultima resposta 15 de mai. de 2019
Respostas 7
Participantes 3