Como todos os servidores SQL implementam diferentes partes de SQL, é trabalhoso escrever aplicativos SQL portáveis. Para selects/inserts muito simples é muito fácil, mas quanto mais recursos você precisa, mais difícil se torna. Se você quiser uma aplicação quue é rápida com muitos bancos de dados ela se torna ainda mais difícil.
Para fazer um aplicativo portável complexo você precisa escolher um número de servidores SQL com o qual ele deve trabalhar.
Você pode utilizar o MySQL programa/web-page
crash-me
- - para encontrar funções, tipos
e limites que você pode utilizar com uma seleção de
servidores de bancos de dados. O Crash-me agora testa quase tudo
possível, mas continua compreensível com aproximadamente 450
itens testados.
Por exemplo, você não deve ter nomes de colunas maior do que 18 caracteres se desejar utilizar o Informix ou DB2.
Os programas de benchmarks e crash-me
do
MySQL são bastante independentes do bancos de dados. Dando uma
olhada em como nós os tratamos, você pode sentir o que é
necessário para escrever sua aplicação independente do banco
de dados. Os benchmarks podem ser encontrados no diretório
sql-bench
na distribuição fonte do MySQL.
Eles são escritos em Perl com a interface de banco de dados DBI
(que resolve a parte do problema de acesso).
Veja http://www.mysql.com/information/benchmarks.html para os resultados deste benchmark.
Como pode ser visto nestes resultados, todos os bancos de dados tem alguns pontos fracos. Isto é, eles possuem diferentes compromissos de projeto que levam a comportamentos diferentes.
Se você procura por independencia de banco de dados, precisará ter uma boa idéia dos gargalos de cada servidor SQL. O MySQL é muito rápido para recuperação e atualização de dados, mas terá problemas em misturar leituras/escritas lentas na mesma tabela. O Oracle, por outro lado, possui um grande problema quando você tentar acessar registros que foram recentemente atualizados (até eles serem atualizados no disco). Bancos de dados transacionais geralmente não são muito bons gerando tabelas de resumo das tabelas log, nestes casos o travamento de registros é praticamente inútil.
Para fazer sua aplicação realmente independente de banco de dados, você precisará definir uma interface que possa ser expandida, por meio da qual você fará a manipulação dos dados. Como o C++ está disponível na maioria dos sistemas, faz sentido utilizar classes C++ para fazer a interface ao banco de dados.
Se você utilizar algum recurso específico para algum banco de
dados (como o comando REPLACE
no MySQL),
você deve codificar um método para os outros serviodores SQL
para implementar o mesmo recurso (mas mais lento). Com o MySQL
você pode utilizar a sintaxe /*! */
para
adicionar palavras chave específicas do MySQL para uma query. O
código dentro de /**/
será tratado como um
comentário (ignorado) pela maioria dos servidores SQL.
Se alta performance REAL é mais importante que exatidão, como em algumas aplicações WEB, uma possibilidade é criar uma camada de aplicação que armazena todos os resultados para lhe fornecer uma performance ainda mais alta. Deixando resultados antigos 'expirar' depois de um tempo, você pode manter o cache razoavelmente atual. Isto é muito bom no caso de uma carga extremamente pesada, pois neste caso você pode aumentar o cache dinamicamente e configurar o tempo de expiração maior até que as coisas voltem ao normal.
Neste caso a informação de criação de tabelas devem conter informações do tamanho inicial do cache e com qual frequência a tabela, normalmente, deve ser renovada.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.