none
OBDC connection ou SQL connection? RRS feed

  • Pergunta

  • Olá pessoal!

    Eu estava prestando um pouco mais de atenção nesses 2 tipos de conexões que são possíveis ao SQL SERVER. Vou dar um exemplo, em PHP você pode usar obdc_connection ou mssql_connection.

    Bom, eu queria mesmo é saber qual tipo de conexão usar? Porque? Qual tem melhor desempenho? Qual a vantagem de cada uma? Qual a mais segura?

    Abraço.
    domingo, 25 de outubro de 2009 02:16

Respostas

  • Olá GuhMP,

    Um assunto bastante útil que se diz respeito diretamente à conexão com banco de dados que um programador deve sempre ter em mente é o recurso Connection Pooling ou Pool de conexões como preferir chamar.

    Veja só, um processo de abertura normal de conexão com o banco de dados exige um certo volume de carga no servidor, principalmente em aplicações Web onde a abertura e fechamento das conexões são feitas varias vezes e em curtos períodos de tempo.

    Então para melhorar reduzindo essa carga no servidor foi implementado esse recurso Connection Pooling que atua como uma fila de conexões. Na pratica o que acontece é que quando você fecha a conexão com o banco de dados ela não é fechada isso não quer dizer que você não precise fechar a conexão e sim ficar disponível no Pool de conexões, quando uma nova conexão é aberta é verificando se tem uma conexão no Pool com as mesmas características, se sim essa conexão é utilizada só se não tiver uma conexão disponível que será aberta uma nova conexão com o banco de dados.

    Então resumindo, isso quer dizer que uma conexão pode ser reaproveitada através do recurso Connection Pooling melhorando o desempenho da  aplicação.

    Cada provider implementa o Connection Pooling da sua própria maneira mas sempre com o mesmo objetivo, o provider do SQL Server por exemplo só permite re-uso de conexões com a mesma string de conexão, então se algum dos parâmetros da string de conexão for diferente será criada um novo Pool de conexões.

    Vale lembrar que as conexões que estão no Pool ficam disponivel por um determinado tempo, e também existe um limite de conexões que podem ficar no Pool para serem re-aproveitadas, mas você não precisa se preocupar com isso, pois esse processo é feita de forma transparente para os programadores.

    Como o Connection Pooling é habilitado por padrão, você não precisa se preocupar em explicitar na string de conexão, mas se caso desejar desabilitar basta setar o parâmetro Pooling como false como mostra o exemplo que segue.

    "Persist Security Info=False; User ID=******; Password=******;
     InitialCatalog=NomedoBancodeDados; Server=SeuServidorSQL; Pooling=False"

    Espero que tenha ajudado a entender um pouco sobre conexãoes.

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

     

    • Sugerido como Resposta Heberton Melo domingo, 25 de outubro de 2009 18:55
    • Marcado como Resposta GuhMP domingo, 25 de outubro de 2009 21:17
    domingo, 25 de outubro de 2009 18:54
  • Olá GuhMP,

    Sim,  o MySQL também possui Pool de conexão, então isso significa que dentro dos valores do Pool de conexão temos o Pooling na ConnectionString do MySQL.

    Quanto a diferença, se você acessar o link http://www.connectionstrings.com/mysql você verá que existe varias string de conexões, porem divididos em tipos.

    Como por exemplo. 

    .NET Framework Data Provider for OLE DB
    .NET Framework Data Provider for OLE DB
    MySQL Connector/ODBC 3.51
    MySQL Connector/ODBC 5.1
    .NET Framework Data Provider for ODBC 

    Em cada modulo existe o tipo e um link que mostra mais informação sobre o mesmo, segue um exemplo do link sobre o tipo .NET Framework Data Provider for ODBC.

    .
    NET Framework Data Provider for ODBC
    http://www.connectionstrings.com/Providers/net-framework-data-provider-for-odbc

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

    • Marcado como Resposta GuhMP domingo, 25 de outubro de 2009 22:57
    domingo, 25 de outubro de 2009 22:47
  • Olá GuhMP,

    Veja bem, C# é uma linguagem de programação orientada o objetos desenvolvida pela Microsoft na qual faz parte da plataforma .NET, e o SQL Server é uma plataforma corporativa de alto valor que fornece funcionalidades críticas a uma fração do custo de soluções concorrentes e também foi desenvolvida pela Microsoft, então isso significa que a armoniosidade entre os dois são mais satisfatório.

    Um exemplo disso é o Visual Studio Team System 2008. Quando você instala o mesmo, ele também instalar em sua máquina uma instancia do SQL Server 2005 Express para que possa trabalhar com acesso a dados  no ambiente de desenvolvimento da plataforma .NET com as linguagem de programação que a mesma dispõe.

    Mas falando de Sistema Gerenciador de Banco de Dados, O SQL Server se sobre sai em relação o MySQL, principalmente na versão 2008 que foi incluído vários recursos novos.

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

    • Marcado como Resposta GuhMP domingo, 25 de outubro de 2009 23:39
    domingo, 25 de outubro de 2009 23:26

Todas as Respostas

  • Olá GuhMP,

    Um assunto bastante útil que se diz respeito diretamente à conexão com banco de dados que um programador deve sempre ter em mente é o recurso Connection Pooling ou Pool de conexões como preferir chamar.

    Veja só, um processo de abertura normal de conexão com o banco de dados exige um certo volume de carga no servidor, principalmente em aplicações Web onde a abertura e fechamento das conexões são feitas varias vezes e em curtos períodos de tempo.

    Então para melhorar reduzindo essa carga no servidor foi implementado esse recurso Connection Pooling que atua como uma fila de conexões. Na pratica o que acontece é que quando você fecha a conexão com o banco de dados ela não é fechada isso não quer dizer que você não precise fechar a conexão e sim ficar disponível no Pool de conexões, quando uma nova conexão é aberta é verificando se tem uma conexão no Pool com as mesmas características, se sim essa conexão é utilizada só se não tiver uma conexão disponível que será aberta uma nova conexão com o banco de dados.

    Então resumindo, isso quer dizer que uma conexão pode ser reaproveitada através do recurso Connection Pooling melhorando o desempenho da  aplicação.

    Cada provider implementa o Connection Pooling da sua própria maneira mas sempre com o mesmo objetivo, o provider do SQL Server por exemplo só permite re-uso de conexões com a mesma string de conexão, então se algum dos parâmetros da string de conexão for diferente será criada um novo Pool de conexões.

    Vale lembrar que as conexões que estão no Pool ficam disponivel por um determinado tempo, e também existe um limite de conexões que podem ficar no Pool para serem re-aproveitadas, mas você não precisa se preocupar com isso, pois esse processo é feita de forma transparente para os programadores.

    Como o Connection Pooling é habilitado por padrão, você não precisa se preocupar em explicitar na string de conexão, mas se caso desejar desabilitar basta setar o parâmetro Pooling como false como mostra o exemplo que segue.

    "Persist Security Info=False; User ID=******; Password=******;
     InitialCatalog=NomedoBancodeDados; Server=SeuServidorSQL; Pooling=False"

    Espero que tenha ajudado a entender um pouco sobre conexãoes.

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

     

    • Sugerido como Resposta Heberton Melo domingo, 25 de outubro de 2009 18:55
    • Marcado como Resposta GuhMP domingo, 25 de outubro de 2009 21:17
    domingo, 25 de outubro de 2009 18:54
  • Foi uma bela dica, muito obrigado.

    Mas você não me falou sobre quais as diferenças entre usar uma conexão OBDC e uma conexão normal (MSSQL,MYSQL etc...)

    Como você tocou nesse assunto de pooling, eu queria saber se o MySQL também tem. Abraço.

    domingo, 25 de outubro de 2009 21:19
  • Olá GuhMP,

    Sim,  o MySQL também possui Pool de conexão, então isso significa que dentro dos valores do Pool de conexão temos o Pooling na ConnectionString do MySQL.

    Quanto a diferença, se você acessar o link http://www.connectionstrings.com/mysql você verá que existe varias string de conexões, porem divididos em tipos.

    Como por exemplo. 

    .NET Framework Data Provider for OLE DB
    .NET Framework Data Provider for OLE DB
    MySQL Connector/ODBC 3.51
    MySQL Connector/ODBC 5.1
    .NET Framework Data Provider for ODBC 

    Em cada modulo existe o tipo e um link que mostra mais informação sobre o mesmo, segue um exemplo do link sobre o tipo .NET Framework Data Provider for ODBC.

    .
    NET Framework Data Provider for ODBC
    http://www.connectionstrings.com/Providers/net-framework-data-provider-for-odbc

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

    • Marcado como Resposta GuhMP domingo, 25 de outubro de 2009 22:57
    domingo, 25 de outubro de 2009 22:47
  • Obrigado novamente Heberton.

    Bom, eu não queria criar um tópico só para isso, então já vou aproveitar esse para perguntar o seguinte:

    Eu estou iniciando um projeto de um emulador para um MMORPG, trabalha muito com banco de dados, muitas "leitura e escrita" no banco de dados, será qual se sai melhor, MySQL ou MSSQL? Irei usar C#. Abraço
    domingo, 25 de outubro de 2009 22:58
  • Olá GuhMP,

    Veja bem, C# é uma linguagem de programação orientada o objetos desenvolvida pela Microsoft na qual faz parte da plataforma .NET, e o SQL Server é uma plataforma corporativa de alto valor que fornece funcionalidades críticas a uma fração do custo de soluções concorrentes e também foi desenvolvida pela Microsoft, então isso significa que a armoniosidade entre os dois são mais satisfatório.

    Um exemplo disso é o Visual Studio Team System 2008. Quando você instala o mesmo, ele também instalar em sua máquina uma instancia do SQL Server 2005 Express para que possa trabalhar com acesso a dados  no ambiente de desenvolvimento da plataforma .NET com as linguagem de programação que a mesma dispõe.

    Mas falando de Sistema Gerenciador de Banco de Dados, O SQL Server se sobre sai em relação o MySQL, principalmente na versão 2008 que foi incluído vários recursos novos.

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

    • Marcado como Resposta GuhMP domingo, 25 de outubro de 2009 23:39
    domingo, 25 de outubro de 2009 23:26
  • Pois é, quando o assunto é MySQL, acho que vale a pena só se for, PHP + MySQL, ou então JAVA + MySQL (afinal a Sun comprou a empresa desenvolvedora do MySQL)

    Não é por nada que eu já vi arquivos do servidor originais de jogos MMORPG rodar em LINUX, porém o banco de dados eles fizeram questão de rodar em WINDOWS para usar o MSSQL.

    Isso acho que explica tudo! huahuauha

    Bom, só tem um porém, como o MySQL é mais leve, acho que seria ideal se fosse usar em uma maquina mais fulerinha, mas se o assunto é um servidor de grande porte, o ideal é usar MSSQL mesmo.

    Dúvida: O MSSQL é muito pesado em relação ao MySQL? Pois meu servidor (host) não é tããão bom quanto um servidor original que tem milhares de jogadores conectados ao mesmo tempo.

    Abraço e obrigado mais uma vez
    domingo, 25 de outubro de 2009 23:45
  • Olá GuhMP,

    É verdade, até mesmo pelo fato de o MySQL, JAVA e PHP serem ferramentas FREE, embora algumas versões delas já estarem sendo paga, mas em fim, deve ser analisado bem qual tipo de tecnologia deve ser utilizado em um projeto, se custo não for problema vale apena investir sim em tecnologias mais robustas, não desmerecendo as outras, longe de mim, pois o sistema do Banco  do Brasil é todo feito em JAVA, tudo tem os positivos e contras, e tudo isso deve ser analisado.

    Veja essa materia que fala sobre o barato saiu caro, trata-se de uma analise mal sucedida em escolher entre software livre e proprietário.


    Porem sempre digo, tudo tem que ser bem analisado antes de ser implementado.

    O Grátis saiu mais caro.
    http://veja.abril.uol.com.br/170506/p_068.html

    Quanto ao SQL Server ser mais pesado em relação ao MySQL, isso vai depender da versão do SQL Server, veja só, a versão mais robusta do SQL Server 2005 e 2008 é a Enterprise, porem esses valores que irei falar são do SQL Server 2005, onde o mínimo de memória é de 256 MB e o recomendado é 512 MB, porem esses requisitos são apenas para o SQL Server, então isso significa que deve ser levado em considerações as outras aplicações que serão executadas no computador.

    O espaço em disco é de 50 MB a 300MB, isso varia de acordo com as opções escolhida durante a instalação, porem um instalação padrão ocupa em torno de 250 MB e já o processador o solicitado é de um clock de 600 MHz e o recomendado é que o mesmo ultrapasse 1GHz.

    Eu particularmente não acho o SQL Server pesado, o SQL Server na versão 2008 veio muito bom mesmo.

     

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

    segunda-feira, 26 de outubro de 2009 04:43