• Nenhum resultado encontrado

MySQL e o Futuro (o TODO)

No documento 1 Informa¸c˜ oes Gerais . . . . 1 (páginas 60-67)

1 Informa¸c˜ oes Gerais

1.6 MySQL e o Futuro (o TODO)

unica string de resultado, o que ´e extremamente ´util. Veja Se¸c˜ao 6.3.7 [Group by functions and modifiers], P´agina 555.

A se¸c˜ao de novidades neste manual incluem uma lista mais completa de recursos. Veja Se¸c˜ao C.2 [Novidades na vers˜ao 4.1.x], P´agina 948.

1.5.2.2 Stepwise Rollout

Novos recursos est˜ao sendo adicionados ao MySQL 4.1. A vers˜ao Alfa j´a st´a dispon´ivel para download. Veja Se¸c˜ao 1.5.2.3 [Nutshell Ready for Immediate Use], P´agina 26.

O conjunto de recursos que est˜ao sendo adicionados a vers˜ao 4.1 est˜ao, na maioria, cor-rigidos. Desenvolvimento adicional j´a est´a em andamento na vers˜ao 5.0. O MySQL 4.1 passam pelos passos de Alfa (tempo no qual os novos recursos ainda podem ser adiona-dos/alterados), Beta (quando j´a implementamos todos os recursos e apenas corre¸c˜oes de erros s˜ao realizados0) e Gamma (indicando que ima distribui¸c˜ao de produ¸c˜ao est´a quase pronta). No fim deste processo, o MySQL 4.1 se tornar´a o nova distribui¸c˜ao de produ¸c˜ao).

1.5.2.3 Pronto para Uso em Desenvolvimento Imediato

O MySQL 4.1 est´a atualmente no est´agio alfa e os bin´arios est˜ao dispon´iveis para download em http://www.mysql.com/downloads/mysql-4.1.html. Todas as distribui¸c˜oes bin´arias passaram por nossos extensivos teste sem nenhum erro na plataforma em que testamos.

Veja Se¸c˜ao C.2 [Novidades na vers˜ao 4.1], P´agina 948.

Para aqueles que desejam usar o fonte mais recente do desenvolvimento do MySQL 4.1, deix-amos nosso reposit´orio do BitKeeper publicamente dispon´ivel. Veja Se¸c˜ao 2.3.4 [Installing source tree], P´agina 100.

1.5.3 MySQL 5.0, A Pr´ oxima Distribui¸c˜ ao de Desenvolvimento

O novo desenvolvimento para o MySQL est´a focado na distribui¸c˜ao 5.0, comrecursos como Stored Procedures entre outros. Veja Se¸c˜ao 1.6.2 [TODO MySQL 5.0], P´agina 27.

Para aqueles que desejam dar uma olhada no desenvolvimento do MySQL, deixamos o nosso reposit´orioo do BitKeeper para o MySQL vers˜ao 5.0 dispon´ivel publicamente. Veja Se¸c˜ao 2.3.4 [Instalando a ´arvore fonte], P´agina 100.

1.6 MySQL e o Futuro (o TODO)

Esta se¸c˜ao lista os recursos que planejamos impementar no MySQL Server. As listas s˜ao apresentadas por vers˜ao, e os itens est˜ao aproximadamente na ordem em que ser˜ao feitos.

Nota: Se vocˆe ´e um usu´ario corporativo com uma necessidade urgente de um recurso par-ticular, por favor, contatesales@mysql.compara conversarmos sobre patroc´inio. Financia-mento feito por uma ou mais companhias nos permite alocar recursos adicionais para aquele prop´osito espec´ifico. Um exemplo de um recurso patrocinado no passado ´e a replica¸c˜ao.

1.6.1 Novos Recursos Planejados Para a Vers˜ ao 4.1

Os recursos abaixo ainda n˜ao est˜ao implementados no MySQL 4.1, mass est˜ao planejados para implementa¸c˜ao antes que o MySQL 4.1 v´a para a fase beta. Para uma lista do que j´a est´a feito no MySQL 4.1, veja Se¸c˜ao 1.5.2.1 [Nutshell 4.1 features], P´agina 24.

Suporte OpenSSL est´avel (o MySQL 4.0 tem suporte rudimentar ao OpenSSL, n˜ao testado 100%).

Mais teste de instru¸c˜oes preparadas

Mais testes de m´ultiplos conjunto de caracteres para uma tabela.

1.6.2 Novos Recursos Planejados Para a Vers˜ ao 5.0

Os seguintes recursos est˜ao planejados para inclus˜ao no MySQL 5.0. Note que como pos-suimos diversos desenvolvedores que est˜ao trabalhando em diferentes projetos, haver˜ao tamb´em muitos recursos adicionais. H´a tamb´em um pequena chance qie alguns destes recursos sejam adicionados ao MySQL 4.1. Para uma lista do que j´a est´a feito no MySQL 4.1, veja Se¸c˜ao 1.5.2.1 [Nutshell 4.1 features], P´agina 24.

Para aqueles que desejam dar uma olhada nas novidades do desenvolvimento do MySQL, deixamos nosso reposit´orio BitKeeper para o MySQL vers˜ao 5.0 publicamente dispon´ivel.

Veja Se¸c˜ao 2.3.4 [Instalando a ´arvore fonte], P´agina 100.

Stored Procedures

Stored procedures est˜ao sendo implementadas atualmente. Este esfor¸co ´e baseado no SQL-99, o que tem m sintaxe b´asica similar (mas n˜ao idˆentica) a do Oracle PL/SQL. N´os tamb´em implementaremos o framework do SQL-99 para enganchar em linguagens externas e (onde poss´ivel) compatibilidade com p.ex. PL/SQL e T-SQL.

Nova funcionalidade

Suporte a cursores elementares.

A habilidade de especificar explicitamente para tabelas MyISAM que um

´indice deve ser criado como um ´indiceRTREE. Na vers˜ao 4.1, ´indicesRTREE s˜ao usados internamente para dados geom´etricos (tipos de dados GIS), mas n˜ao podem ser criados no pedido.

Registros de tamanhos dinˆamicas para tabelasHEAP.

Compatibilidade com o padr˜ao, portabilidade e migra¸c˜ao

Adiciona suporte real a VARCHAR (tamanho de colunas maiores que 255, e sem corte de espa¸cos em branco extras). (J´a existe suporte para isto nos mecanismos de armazenamento do MyISAM, mas ainda n˜ao est´a dispon´ivel a n´ivel de usu´ario).

Aumento na velocidade

SHOW COLUMNS FROM nome_tabela(usado pelo clientemysql para permitir expans˜oes de nomes de colunas) n˜ao deve abrir a tabela, apenas o arquivo de defini¸c˜ao. ISto exigir´a menos mem´oria e ser´a muito mais r´apido.

Permite que o DELETEem tabelasMyISAMusem a cache de registros. Para fazer isto, precisamos atualizar a thread da cache de registro quando atu-alizarmos os arquivos ‘.MYD’.

Melhores tabes em mem´oria (HEAP):

Registro de tamanhos dinˆamoicos.

Tratamento de registro mais r´apido (menos c´opia).

Internacionaliza¸c˜ao

Ap usarSET CHARACTER SETdevemos traduzir toda a consulta de uma vez e n˜ao apenas as strings. Isto permitir´a que os usu´arios usem caracteres traduzidos nos nomes de banco de dados, tabelas e colunas.

Aprimoramento da usabilidade

Resolver a quest˜ao deRENAME TABLEem uma tabela usada em uma tabela MERGEativa, o que possivelmente corrompe a tabela.

1.6.3 Novos Recursos Planejados Para a Vers˜ ao 5.1

Novas funcionalidades

SuporteFOREIGN KEY para todos os tipos de tabelas.

Restri¸c˜oes a n´ivel de colunas.

Replica¸c˜ao seguro a falhas.

Backup online com baixa queda de desempenho. O backup online tornar´a mais f´acil adicionar um novo slave de replica¸c˜ao sem desligar o master.

Aumento de velocidade

Novo formato dos arquivos de defini¸c˜ao e tabelas baseados em texto (ar-quivos ‘.frm’) e uma cache de tabelas para a defini¸c˜ao de tabelas. Isto nos permitir´a fazer consultas mais r´apidas da estruturas de tabela e dar um suporte a chaves estrangeiras mais eficiente.

Otimizar o tipoBITpara gastar 1 bit (agoraBITgasta 1 byte; e ´e tratado como um sinˆonimo paraTINYINT.)

Aprimoramento da usabilidade

Adicionar op¸c˜oes ao protocolo cliente/servidor para obter notas de pro-gresso para longos comandos em execu¸c˜ao.

Implementar RENAME DATABASE. Para tornar isto seguro para todos os mecanismos de armazenamento, ele deve funcionar como a seguir:

Cria um novo banco de dados.

Para cada tabelas, renomeie-a para outro banco de dados, o qual faze-mos com o comandoRENAME.

Apagar o banco de dados antigo.

Nova altera¸c˜ao da interface de arquivo interno. Isto far´a todos os manip-uladores de arquivos mais gerais e tornar´a mais f´acil adicionar extens˜oes tipo RAID.

1.6.4 Novos Recursos Planejados Para a Vers˜ ao em um Futuro Pr´ oximo

Novas funcionalidade

Comando como do OracleCONNECT BY PRIOR ...para estruturas de busca tipo ´arvore (hier´arquica)

Adicionar todos os tipos que faltam do SQL-92 e ODBC 3.0.

AdicionarSUM(DISTINCT).

INSERT SQL_CONCURRENT emysqld --concurrent-insert para fazer uma inser¸c˜ao concorrente no fim do arquivo se o arquivo tiver lock de leitura.

Permitir a atualiza¸c˜ao de vari´aveis nas instru¸c˜oes UPDATE. Por exemplo:

UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c.

Alterar quando as vari´aveis de usu´arios s˜ao atualizadas e assim pode se us´a-las comGROUP BY, como no exemplo a seguir: SELECT id, @a:=COUNT(*), SUM(sum_col)/@a FROM nome_tabela GROUP BY id.

Adicionar a op¸c˜ao IMAGE a LOAD DATA INFILE para n˜ao atualizar campos TIMESTAMP eAUTO_INCREMENT.

Adicionar a sintaxeLOAD DATA INFILE ... UPDATE que funciona assim:

Para tabelas com chaves prim´arias, se o registro de entrada cont´em um valor de chave prim´aria, linhas existentes correspondendo `as chaves prim´arias s˜ao atualizadas para o restante das colunas de entrada. No entanto, colunas faltosas na inser¸c˜ao dos registros de entradas n˜ao s˜ao alteradas.

Para tabelas com chaves prim´arias, se um registro de entrada n˜ao cont´em um valor de chave prim´aria ou estr´a faltando alguma parte da chave, o registro ´e tratado como um LOAD DATA INFILE ... REPLACE INTO.

Fazer com que LOAD DATA INFILEentenda a sintaxe do tipo:

LOAD DATA INFILE ’file_name.txt’ INTO TABLE tbl_name TEXT_FIELDS (text_field1, text_field2, text_field3) SET table_field1=CONCAT(text_field1, text_field2),

table_field3=23 IGNORE text_field3

Isto pode ser usado para saltar colunas extras no arquivo texto, ou atualizar colunas baseadas nas express˜oes dos dados lidos.

Novas fun¸c˜oes para tyrabalhar com tipos de colunasSET:

ADD_TO_SET(valor,conjunto)

REMOVE_FROM_SET(valor,conjunto)

Se vocˆe abortar o mysql no meio de uma consulta, vocˆe deve abrir outra conex˜ao e matar a consulta antiga em execu¸c˜ao. Alternativamente, deve ser feita um tentativa de detec¸c˜ao deste problema no servidor.

Adicione um interface do mecanismo de armazenamento para informa¸c˜oes da tabela assim que vocˆe puder us´a-la como uma tabela de sistema. Isto se-ria um pouco mais lento se vocˆe pedisse informa¸c˜oes sobre todas as tabelas,

mas muito flex´ivel. SHOW INFO FROM tbl_name para informa¸c˜oes b´asicas das tabelas deve ser implementado.

PermiteSELECT a FROM crash_me LEFT JOIN crash_me2 USING (a); neste caso ´e considerado queavem da tabela crash_me.

Op¸c˜oesDELETEeREPLACE para a instru¸c˜aoUPDATE(isto deletar´a registros quando se tiver um erro de chave duplicada durante a atualiza¸c˜ao).

Altera o formato deDATETIMEpara armazenar fra¸c˜oes de segundo.

Possibilitar o uso da nova biblioteca regexp GNU em vez da atual (a bib-lioteca GNU deve ser muito mais r´apida que a antiga).

Compatibilidade com os padr˜oes, portabilidade e migra¸c˜ao

N˜ao adicionar valoresDEFAULTautom´aticos as colunas. Enviar um erro ao usar umINSERTque n˜ao contenha uma coluna que n˜ao tenha umDEFAULT.

Adicionar as fun¸c˜oes de agrupamentoANY(),EVERY()eSOME(). No padr˜ao SQL isto s´o funciona em colunas booleanas, mas podemos extendˆe-las para funcionar em qualquer coluna/express˜ao tratando valores 0 como FALSE e valores diferentes de 0 como TRUE.

Corrigir para que o tipo de MAX(coluna)seja o mesmo do tipo da coluna:

mysql> CREATE TABLE t1 (a DATE);

mysql> INSERT INTO t1 VALUES (NOW());

mysql> CREATE TABLE t2 SELECT MAX(a) FROM t1;

mysql> SHOW COLUMNS FROM t2;

Aumento de velocidade

N˜ao permitir mais que um n´umero definido de threads fa¸cam a recupera¸c˜ao do MyISAM ao mesmo tempo.

Alterar INSERT ... SELECT para usar inser¸c˜oes concorrentes opcionalmente.

Adicionar uma op¸c˜ao para descarregar paginas de chaves para tabelas com delayed keys se elas n˜ao forem usados por um tempo.

Permitir joins em partes de chaves (otimiza¸c˜ao).

Adicionar simula¸c˜ao de pread()/pwrite() no Windows para permitir inser¸c˜oes concorrentes.

Um analizador de arquivos de log que possam analizar informa¸c˜oes sobre quais tabelas s˜ao usadas com mais frequˆencia, a frequˆencia com que joins multi-tables s˜ao executados, etc. Isto deve ajudar os usu´arios a identi-ficar ´areas ou projetos de tabelas que podiam ser otimizados para executar consultas muito mais eficientes.

Internacionaliza¸c˜ao

Aprimoramentos de usabilidade

Retorna os tipos dos campos originais ao se fazerSELECT MIN(coluna) ...

GROUP BY.

Possibilita especificar long_query_time com uma granularidade em mi-crosegundos.

Ligue o c´odigomyisampackno servidor assim ele poder´a realizar opera¸c˜oes PACK eCOMPRESS.

Adicionar uma cache de chaves tempor´aria duranteINSERT/DELETE/UPDATE para podermos fazer um recupera¸c˜ao se o ´indice ficar cheio.

Se vocˆe realizar um ALTER TABLE em uma tabela que ´e ligada simbolica-mente a outro disco, crie tabelas tenpor´arias neste disco.

Implementar um tipo DATE/DATETIME que trate as informa¸c˜oes de fusos hor´arios de forma apropriada e assim lidar com datas em diferentes fusos hor´arios ser´a mais f´acil.

Corrigir o configure para se poder compilar todas as bibliotecas (como no MyISAM) sem threads.

Permitir vari´aveis SQL emLIMIT, como emLIMIT @a,@b.

Sa´ida autom´atica do mysqlpara um navegador web.

LOCK DATABASES(com diversas op¸c˜oes).

Muito mais vari´aveis para SHOW STATUS. Leitura e atualiza¸c˜ao de reg-istros. Selects em 1 tabela e select com joins. N´umero de tabelas na select.

N´umero de consultasORDER BYe GROUP BY.

mysqladmin copy database novo-banco_dados; exige que o comando COPY seja adicionado aomysqld.

Lista de processos deve mostar o n´umero de consultas/threads.

SHOW HOSTSpara xibir informa¸c˜oes sobre a cache de nome de m´aquina.

Alterar o nome de tabelas de string vazias para NULL para colunas calcu-ladas.

N˜ao usarItem_copy_stringem valores num´ericos para evitar a convers˜ao number->string->number no casos de: SELECT COUNT(*)*(id+0) FROM nome_tabela GROUP BY id

Alterar aqueles ALTER TABLE que n˜ao abortam clientes que executam INSERT DELAYED.

Colunas referˆenciadas em uma cl´ausulaUPDATEir˜ao conter os valores anti-gos antes da atualiza¸c˜ao iniciar.

Novos sistemas operacioais.

Portar os clientes MySQL para LynxOS.

1.6.5 Novos Recursos Planejados Para a Vers˜ ao em um Futuro a M´ edio Prazo

Implementar fun¸c˜ao: get_changed_tables(timeout,table1,table2,...)

Alterar leitura atrav´es de tabelas para usar mapeamento de mem´oria quando poss´ivel.

Atualmente somente tabelas compactadas usam mapeamento de mem´oria.

Tornar o c´odigo de timestamp autom´atico melhor. Adicionar timestamps para o log de atualiza¸c˜oes com SET TIMESTAMP=#;

Usar mutex de leitura/escrita em alguns lugares para obter maior velocidade.

Views simples (inicialmente em uma tabela, depois em qualquer express˜ao). Veja Se¸c˜ao 1.8.4.6 [ANSI diff Views], P´agina 51.

Fechar algumas tabelas automaticamente se uma tabela, tabela tempor´aria ou arquivos tempor´arios obtiverem o erro 23 (n˜ao pode abrir arquivos suficientes).

Melhor propaga¸c˜ao de constantes. Quando uma ocorrˆencia denome_col=n´e encontrada em uma express˜ao, para algumas constantes n, substitua outras ocorrˆencias de nome_

col dentro da express˜ao por n. Atualmente, isto ´e feito somente para alguns casos simples.

Alterar todas express˜oes const com express˜oes calculadas se poss´ivel.

Chave otimizadora = express˜ao. No momento somente a chave = campo ou a chave = constante s˜ao otimizadas.

Melhorar o c´odigo de algumas das fun¸c˜oes de c´opia

Alterar ‘sql_yacc.yy’ para um analizador em linha para reduzir seu tamanho e obter melhores mensagems de erro (5 dias).

Alterar o analisador para usar somente uma regra para diferentes n´umeros de argu-mentos em uma fun¸c˜ao.

Utilizar nomes de c´alculo completos na parte de ordena¸c˜ao. (For ACCESS97)

MINUS,INTERSECTeFULL OUTER JOIN. (AtualmenteUNION[na 4.0] eLEFT OUTER JOIN s˜ao suportados).

SQL_OPTION MAX_SELECT_TIME=# para colocar um limite de tempo em uma pesquisa.

Fazer o log de atualiza¸c˜oes gravar em um banco de dados.

LIMIT negativo para recuperar dados do fim.

Alarmes em fun¸c˜oes clientes de conex˜ao, leitura e escrita.

Por favor, perceba as altera¸c˜oes ao mysqld_safe: de acordo com o FSSTND (que o Debian tenta seguir) arquivos PID dever ir em ‘/var/run/<progname>.pid’ e arquivos de log em ‘/var/log’. Seria ´otimo se vocˆe puder colocar o diret´orio de dados na primeira declara¸c˜ao de "pidfile" e "log", para que a coloca¸c˜ao destes arquivos possa ser alterada com uma simples instru¸c˜ao.

Permitir um cliente requisitar log.

Adicionar uso de zlib() a LOAD DATA INFILE, para permitir que as instru¸c˜oes leiam arquivos compactados comgzip.

Corrigir ordena¸c˜ao e agrupamento de colunas BLOB (parcialmente resolvida agora).

Alterar para o uso de sem´aforos quando contar threads. Devemos primeiro implementar uma biblioteca de sem´aforos para a MIT-pthreads.

Adicionar suporte pleno para JOIN com parˆenteses.

Como uma alternativa para uma thread / conex˜ao gerencie uma fila de threads para manipular as pesquisas.

Permitir obter mais de um bloqueio com GET_LOCK. Quando isto for feito, ser˜ao, tamb´em, tratados os poss´iveis deadlocks que essa altera¸c˜ao ir´a acarretar.

O tempo ´e fornecido de acordo com a quantidade de trabalho, e n˜ao tempo real.

1.6.6 Novos Recursos que N˜ ao Planejamos Fazer

Nada; Planejamos ser totalmente compat´iveis com o ANSI 92 / ANSI 99.

No documento 1 Informa¸c˜ oes Gerais . . . . 1 (páginas 60-67)