Introdução
Qual a diferença entre uma conexão remota, local e embarcada?
Num vídeo recente, falamos como conectar-se de modo embarcado com o Zeos – componente especial para acesso a banco de dados nas IDEs de programação Delphi e Lazarus – e surgiram dúvidas sobre a diferença entre conexão local, remota e embarcada.
Para os menos experientes há uma confusão com conexões "localhost" sendo tidas como "locais", será que são mesmo? Você sabia que o FirebirdSQL possui um protocolo especial para conexões realmente locais como xnet? Conexão embarcada e local é a mesma coisa?
Tipos de Conexão
Vamos esclarecer as diferenças entre os três tipos principais de conexão a bancos de dados:
Conexão Remota
Uma conexão remota ocorre quando o aplicativo cliente e o servidor de banco de dados estão em máquinas diferentes, comunicando-se através da rede. Neste caso, você precisa especificar o HostName (IP ou nome do servidor) e a Port (porta de comunicação).
Exemplo de string de conexão remota:
HostName: servidor.empresa.com
Port: 3050
Database: /caminho/remoto/banco.fdb
Conexão Local
Uma conexão local ocorre quando o aplicativo cliente e o banco de dados estão na mesma máquina, mas usando o protocolo de rede. Muitos programadores confundem "localhost" com conexão local, mas na verdade "localhost" ainda usa a infraestrutura de rede para localizar o próprio computador.
Para uma conexão verdadeiramente local no FirebirdSQL, você deve usar o protocolo xnet, que acessa o arquivo diretamente sem passar pela camada de rede:
Protocol: firebird
Database: xnet://C:\Caminho\para\o\banco.fdb
HostName: (não necessário)
Port: (não necessário)
O protocolo xnet é mais rápido que localhost porque não passa pela pilha de rede TCP/IP, acessando o arquivo diretamente.
Conexão Embarcada
Uma conexão embarcada (embedded) é quando o banco de dados é acessado diretamente pelo arquivo, sem necessidade de um servidor de banco de dados rodando. O FirebirdSQL oferece o modo embarcado através da biblioteca fbembed.dll (Windows) ou libfbembed.so (Linux).
Neste modo, o banco de dados é totalmente incorporado à aplicação, não requerendo instalação ou configuração de servidor. É ideal para aplicações desktop que precisam de um banco de dados local sem a complexidade de gerenciar um servidor.
Exemplo de configuração embarcada:
Protocol: firebird-2.5
LibraryLocation: fbembed.dll
Database: C:\Caminho\para\o\banco.fdb
HostName: (não necessário)
Port: (não necessário)
IMPORTANTE: Programadores, sim, você que tem a linguagem de programação e o banco de dados rodando no mesmo computador, parem de usar "localhost" quando na realidade o que quer é um acesso local. Ao criar seus programas, deixe-os fáceis para serem ajustados de forma que o usuário possa ajustá-lo para local ou remota e por favor, não assuma que "localhost" é local, pois não é.
Comparação Prática
Para entender melhor as diferenças, veja a tabela comparativa:
- Remota: Cliente e servidor em máquinas diferentes, comunicação via rede TCP/IP, requer HostName e Port
- Local (localhost): Cliente e servidor na mesma máquina, mas usando rede TCP/IP, requer HostName="localhost" e Port
- Local (xnet): Cliente e banco na mesma máquina, acesso direto ao arquivo, sem rede, mais rápido
- Embarcada: Banco incorporado à aplicação, sem servidor, acesso direto ao arquivo, ideal para aplicações standalone
Neste vídeo explico as diferenças:
Aprenda sobre os tipos de conexão na prática:
Assistir: Banco de dados: Diferença entre conexão local, remota e embarcado, em especial com FirebirdSQLConclusão
Entender a diferença entre conexão remota, local e embarcada é fundamental para escolher a melhor abordagem para sua aplicação. Use conexões remotas quando precisar de acesso distribuído, conexões locais (xnet) quando quiser performance máxima no mesmo computador, e conexões embarcadas quando precisar de simplicidade sem servidor.
Para mais informações sobre como configurar conexões com Zeos, consulte o artigo sobre Conectando uma base de dados com ZConnection.