Qual o melhor banco de dados embutido?

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?

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.

1 curtida

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.

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

1 curtida

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.");
    }
}

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

1 curtida

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.

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