Posts Tagged “MySQL”

A notícia da semana: SUN compra MyAB que desenvolve o MySQL o banco de dados livre mais popular do mundo. O preço, 1 bilhão de dólares. A notícia virou destaque em vários lugares no Brasil e no mundo. Eu gosto muito do PostgreSQL, mas tenho que reconhecer o MySQL tem uma legião de usuários que fazem com que ele seja um jogador de peso no mercado. Particularmente na Internet, o MySQL é largamente utilizado. É simples, é rápido, é livre.

A SUN é uma empresa respeitável. Fez um bom negócio. A Oracle tentou comprar a MyAB há alguns anos sem sucesso. E olhe que estou falando da empresa que acabou de comprar a BEA Systems por 8,5 bilhões de dólares. Assim, vemos os grandes comprando os menores e o mercado vai se concentrando em grandes monopólios com suas soluções de “ponta-a-ponta”. Gostaria de lembrar que não tenho nada contra a SUN. Ela é uma das empresas que mais contribuiu com o Software Livre nos últimos tempos, inclusive com o PostgreSQL. Talvez o fato da SUN não possuir um SGDB de peso no mercado tenha feito com que ela invista neste setor.

Uma coisa curiosa que ocorre quando alguém vê a notícia da compra da MyAB é a reação: “Puxa vida, 1 Bilhão por um Software Livre!”. Então me lembro do texto “Os 5 Tipos de Projetos de Software Livre” do Sr. Josh Berkus. A MyAB tem algo em comum com outros projetos de Software Livre:

  • America On Line compra a Netscape, desenvolvedora do Firefox;
  • Oracle compra SleepCat, desenvolvedora do BerkeleyDB;
  • Oracle compra a Innobase, desenvolvedora do InnoDB;
  • Novell compra SUSE;

São todos casos em que uma empresa comprou outra empresa que desenvolve um Software Livre. Mas eles são de uma categoria especial de Software Livre, são projetos, segundo o Sr. Josh Berkus, do tipo corporativo, onde o desenvolvimento é dependente da empresa que detém a sua propriedade intelectual. Mesmo adotando licenças livres segundo a FSF OSI ou mesmo pelo Debian, eles costumam manter um controle rígido sobre o desenvolvimento do software. Isto significa que você tem garantido o direito de usar, distribuir e modificar o software, mas pode não ter a oportunidade de contribuir com código para o projeto.

Uma consequência direta sobre isso, é que os “projetos corporativos” de software livre tem preço. O MySQL teve seu preço avaliado em 1 bilhão de dólares. Outras empresas como Red Hat, Canonical, Zend e outras tem seu preço. Mas há projetos importantes que até o momento parecem resistir a essa idéia. O Kernel do Linux não está a venda, o PostgreSQL, o Debian, o Gentoo também não. Assim, vemos que existe um corte importante ao se olhar para projetos de Software Livre. É preciso olhar para como o Software Livre é desenvolvido para saber o que se pode esperar do seu futuro.

Não acredito que a SUN vá trazer malefícios para o MySQL, mesmo porque ele não compete com nenhum outro produto já existente dentro da SUN. Mas este tipo de coisa acontece muito. Em 2000 a IBM comprou o Informix que competia com o DB2 e ele foi sumindo silenciosamente do mercado. Em 92 FoxPro foi comprado pela Microsoft e teve o mesmo destino. Assim, vemos soluções algumas vezes muito boas sumindo para dar espaço por outras com mais fôlego financeiro.

Tags: , ,

Comments 3 comentários »

Eu acompanho o do Avi Alkalay há algum tempo e já o vi em alguns eventos por aí. Acho interessante acompanhar os posts de alguém bem antenado, com um bom nível cultural e… bem, e ver um pouco da IBM nas suas postagens. Neste em especial, acho que a visão da IBM no mercado de Software Livre ficou mais transparente, e gostaria de comentar um pouco. Antes de mais nada eu gostaria de dizer que respeito profundamente o trabalho deste profissional, e acredito que estou aqui discordando em alguns pontos sobre o que ele escreveu, mas estou discordando fraternamente.

Enfim, uma coisa que fica claro quando lemos o Guia Livre do governo federal (ver cap. 2.2.2 “Razões para adoção de Software Livre”) é que se você migra para Linux pensando apenas em cortar custos, você terá problemas no caminho. Uma das grandes vantagens costuma ser a independência de um único fornecedor. Ficar dependente de um fornecedor é ruim por natureza. É um princípio de mercado. Seus negócios não devem depender totalmente de um único fornecedor, seja de matéria-prima, serviços ou máquinas. Software Livre ainda tem haver com liberdade. Eu realmente admiro por exemplo o Oracle e o DB2, mas prefiro o PostgreSQL onde eu tenho liberdade de escolher quem vai me dar suporte. As distribuições como Debian, Gentoo, Slackware e os BSDs livres, tem comunidades muito sérias atrás. Eu sei, o pessoal sempre diz: “mas eu preciso de alguém para segurar o rojão quando tiver um problema sério. Não posso contar com a comunidade apenas!”. Bom, eu gostaria de dizer que o suporte de algumas empresas (IBM, Oracle, Red Hat, Novell) nem sempre é bom. São incontáveis as vezes em que a comunidade me oferece respostas mais rápidas. Se fosse realmente bom, eles não precisariam atrelar as atualizações de segurança a um contrato de suporte. Muitos acabam pagando o suporte somente por causa das atualizações, todos sabem.

Estas empresas ainda competem pela qualidade do produto e não do serviço. Eu estou preocupado com a qualidade do serviço. Mas como estas empresas tem o monopólio dos serviços prestados sobre seus produtos, a qualidade e as opções tendem a cair. Algumas empresas não permitem que você utilize uma “versão não homologada” do software deles. Isto significa não poder recompilar o Kernel ou outra aplicação por exemplo. Vou lhe dizer que existem excelentes opções de suporte pago para as distribuições mantidas por comunidades. Mas o interessante, é que as empresas que prestam suporte soluções realmente livres, só sobrevivem se prestarem serviços de excelente qualidade. A competitividade é maior e isto já está acontecendo também no Brasil. Conheço empresas que fornecem soluções de alta qualidade para seus clientes, com compilações de software especiais para as necessidades dos seus clientes a custos muito atraentes e utilizando profissionais altamente qualificados. E o melhor de tudo é que você tem o direito de não gostar da empresa e chamar outra para prestar exatamente o mesmo serviço.

Vender licenças de softwares amplamente utilizados parece estar saindo de moda. É um movimento lento mas inflexível, particularmente nas grandes empresas (que se preocupam mais com a independência de fornecedor). O modelo onde os custos dos serviços amortizam os custos do desenvolvimento pode também não sobreviver para sempre. Ao fim e ao cabo, o Software Livre traz na sua liberdade a questão de remunerar melhor a competência, e não o papel. Entenda por papel um certificado, uma licença, uma patente outros conjuntos de átomos que não precisam se converter obrigatoriamente em bytes. Isto coloca em cheque grandes empresas e dá oportunidade para profissionais talentosos. O modelo de negócios baseado em soluções livres precisa de pessoas que pensem diferente. A IBM é um exemplo de como a liberdade é importante. Ao lançar o IBM-PC com um barramento aberto, proporcionou o florescimento de um ecossistema fantástico a sua volta. Depois, quando lançou um barramento proprietário, o MCA, perdeu espaço rapidamente no mercado que criou novos padrões abertos.

Estes dias li documentos da IBM propondo a migração do PostgreSQL e MySQL para o DB2. Vejam por vocês mesmos os links aqui e aqui. É claro que o DB2 tem qualidades fantásticas. Algumas das quais eu sei que os SGDBs livres terão muito trabalho para implementar. O DB2 é um excelente SGDB e praticamente inventou o SQL, não sendo a toa que é um dos que tem melhor conformidade com o padrão - vale lembrar que a equipe do PostgreSQL nunca pode participar do comitê que normatiza o padrão SQL, apesar de serem os que mais investem na conformância com o seu padrão. Mas veja bem, você migraria?

No entanto eu não acredito que as grandes empresas vão deixar de existir, mas acredito que a concorrência os farão rever seus conceitos e melhorar seus serviços. Assim ocorreu a liberação das versões gratuitas do Oracle, DB2 e do SQL Server, assim como a Microsoft lançou versões mais baradas do seu SO. Assim será com a prestação de serviços, conforme outras empresas ganhem terreno na qualidade dos serviços prestados. Quem ganha com este movimento são os bons profissionais de informática que tem seus serviços valorizados em detrimento de valores construídos sobre pilhas de papel. Ganham também os tomadores de serviço que terão serviços de melhor qualidade, com opções mais diversificadas e custos mais compatíveis com a qualidade dos serviços contratados.

Tags: , , , , , , ,

Comments 4 comentários »

Após a publicação do resultado do Benckmark realizado pela Sun já comentado de passagem por aqui, comentários importantes se espalharam por aí. De olho no Blog do Sr. Josh Berkus, vi que ele publicou hoje comentários sobre o que foi publicado de notório sobre isso na Internet.

A primeira coisa interessante é notar o que a Information Week publicou sobre isso. Vale lembrar que o jornalista que escreveu o artigo não é um simpatizante do Software Livre. Aparentemente o pessoal do MySQL concordou graciosamente com a opinião do Josh, o que mostra que o pessoal que realmente entende disso no MySQL não fala mais bobagem sobre o assunto. É claro que estamos falando de um Benckmark focado em ambiente transacional, onde o uso do MyISAM é proibitivo. Vejamos como o MySQL vai se sair com o seu novo storage engine na próxima versão. Se eles conseguirem abandonar definitivamente o InnoDB (que pertence a Oracle, hoje) será realmente um feito notável e um grande avanço para os bancos de dados livres.

Já um blog sobre Oracle, questionou um pouco alguns resultados, mas de qualquer forma, isso não quer dizer que eles não sejam significativos. Seja como for… será interessante aguardar a disponibilização para download do Oracle 11g. Não postei nada sobre isso, por um motivo simples, a nova versão e sua documentação não estão disponíveis para download até a data deste post. De qualquer forma, o que vejo nas últimas versões do Oracle são grandes melhorias na parte de administração do Oracle e poucas melhorias na parte de performance. Já o PostgreSQL tem lançado uma versão por ano com um aumento de performance significativo. É claro que este aumento de performance a cada versão do PostgreSQL (e existem boas novidades previstas na versão 8.3) não poderão se manter neste ritmo por muitos anos, mas é esperado como certo que em alguns anos o PostgreSQL ultrapassará o Oracle, mantendo um TCO significativamente mais baixo.

Sem dúvida, teremos mais boas notícias em breve mostrando que as coisas mudam, e rapidamente!

Tags: , , , , ,

Comments 2 comentários »

Tradução do texto original de Josh Berkus publicado Postado em 28/11/2006 e 29/11/2006.

O que se segue é a versão editada de um conjunto de conselhos que eu tenho dado ao time da Sun no redesenho de uma aplicação em C++ que foi construída para MySQL, portado para o PostgreSQL, e nunca otimizado para performance. Ocorreu que estes conselhos podem ser geralmente úteis para a comunidade, então aí vão eles.

Projeto de aplicações para performance no PostgreSQL

Escrevendo regras de consultas

Para todos os sistemas gerenciadores de bancos de dados (SGDBs), o tempo por rodada significativo. Este é o tempo que leva para uma consulta passar pelo analisador de sintaxe da linguagem, o driver, a interface da rede, o analisador de sintaxe do banco de dados, o planejador, o executor, o analisador de sintaxe novamente, voltar pela interface de rede, passar pelo manipulador de dados do driver e para o cliente da aplicação. SGDBs variam na quantidade de tempo e CPU que elas levam para processar este ciclo, e por uma variedade de razões, o PostgreSQL possui um alto consumo de tempo e recursos do sistema por rodada.

Contudo, o PostgreSQL tem um overhead significativo por transação, incluindo o log de saída e as regras de acesso que precisam ser ajustadas em cada transação. Enquanto você pode pensar que não está utilizando transações para um simples comando de leitura SELECT, de fato, cada simples comando no PostgreSQL é uma transação. Na ausência de uma transação explícita, o comando é por si mesmo implicitamente uma transação.

Passando por isto, o PostgreSQL é claramente o segundo depois do Oracle em processamento de consultas complexas e longas com transações com vários comandos com fácil resolução de conflitos de concorrência. Ele também suporta cursores, tanto rolável quanto não rolável.

Dica 1: Nunca use várias consultas pequenas quando uma grande consulta pode fazer o trabalho.

É comum em aplicações MySQL lidar com joins no código da aplicação, ou seja, consultando o ID de um registro relacionado e então iterando através dos registros filhos com aquele ID manualmente. Isto pode resultar em rodar centenas de consultas por tela de interface com o usuário. Cada uma destas consultas levam 2 a 6 milissegundos por rodada, o que significa que se você executar cerca de 1000 consultas, neste ponto você estárá perdendo de 3 a 5 segundos. Comparativamente, solicitando estes registros numa única consulta levará apenas algumas centenas de milissegundos, economizando cerca de 80% do tempo.

Dica 2: Agrupe vários pequenos UPDATEs, INSERTs ou DELETEs em um único comando ou, se não for possível, em uma longa transação.

Antes, a falta de subselects nas versões anteriores do MySQL fizeram com que os desenvolvedores de aplicação projetassem seus comandos de modificação de dados (DML) da mesma forma que as junções em middleware. Esta é uma má idéia para o PostgreSQL. Ao invés, você irá tirar vantagem de subselects e joins no seu comando UPDATE, INSERT, e DELETE para tentar realizar modificações em lote com um único comando. Isto reduz o tempo da rodada e o overhead da transação.

Em alguns casos, contudo, não há uma única consulta que consiga alterar todas as linhas que você deseja e você irá usar um grupo de comandos em série. Neste caso, você irá querer se assegurar de envolver a sua séria de comandos DML em uma transação explícita (ex. BEGIN; UPDATE; UPDATE; UPDATE; COMMIT;). Isto reduz o overhead de transação e corta o tempo de execução em até 50%.

Dica 3: Considere realizar cargas em lotes ao invés de INSERTs seriais.

O PostgreSQL prove um mecanismo de carga em lote chamado COPY, que pode pegar uma entrada de um arquivo ou pipe delimitado por tabulações ou CSV. Quando o COPY pode ser usado no lugar de centenas de INSERTs, ele pode cortar o tempo de execução em até 75%.

Dica 4: O DELETE é caro

É comum para um desenvolvedor de aplicação pensar que o comando DELETE é praticamente não tem custo. Você está apenas desligando alguns nós, correto? Errado. SGDBs não são sistemas de arquivo; quando você apaga uma linha, índices precisam ser atualizados, o espaço liberado precisa ser limpo, fazendo a exclusão de fato mais cara que a inserção. Assim, aplicações que habitualmente apagam todas as linhas de detalhe e repõe elas com novas toda vez que é realizada qualquer alteração estão economizando esforço no lado da aplicação e empurrando este dentro do banco de dados. Quando possível, isto deve ser substituído pela substituição mais discriminada das linhas, como atualizar apenas as linhas modificadas.

Além disso, quando for limpar toda uma tabela, sempre use o comando TRUNCATE TABLE ao invés de DELETE FROM TABLE. A primeira forma é até 100 vezes mais rápida que a posterior devido ao processamento da tabela como um todo ao invés de uma linha por vez.

Dica 5: Utilize o PREPARE/EXECUTE para iterações em consultas

Algumas vezes, mesmo tentando consolidar iterações de consultas semelhantes em um comando mais longo, nem sempre isto é possível de estruturar na sua aplicação. É para isto que o PREPARE … EXECUTE serve; ele permite que o motor do banco de dados pule o analizador de sintaxe e o planejador para cada iteração da consulta. Por exemplo:

Preparar:
query_handle = query(’SELECT * FROM TABLE WHERE id = ?’)(parameter_type = INTEGER)

Então inicie as suas iterações:
for 1..100
query_handle.execute(i);
end

Classes para a preparação de comandos no C++ são explicadas na documentação do libpqxx.

Isto irá reduzir o tempo de execução na direta proporção do tamanho do número de iterações.

Dica 6: Use pool de conexões efetivamente

Para uma aplicação web, você irá perceber que até 50% do seu potencial de performance pode ser controlado através do uso, e configuração apropriada de um pool de conexões. Isto é porque criar e destruir conexões no banco de dados leva um tempo significativo no sistema, e um excesso de conexões inativas continuarão a requerer RAM e recursos do sistema.

Há um número de ferramentas que você pode utilizar para fazer um pool de conexões no PostgreSQL. Uma ferramenta de terceiros de código aberto é o pgPool. Contudo, para uma aplicação em C++ com requisitos de alta disponibilidade, é provavelmente melhor utilizar a técnica de pseudo-pooling nativa do libpqxx chamada de “conexões preguiçosas”. Eu sugiro contatar a lista de de e-mail para mais informações sobre como utilizar isto.

Com o PostgreSQL, você irá querer ter quantas conexões persistentes (ou objetos de conexão) forem definidas no seu pico normal de uso de conexões concorrentes. Então, se o uso máximo normal (no início da manhã, digamos) é de 200 conexões concorrentes de agentes, usuários e componentes, então você irá querer que ter esta quantidade definida para que sua aplicação não tenha que esperar por novas conexões durante o pico onde será lenta na criação.

Tags: , , ,

Comments 2 comentários »