Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Almir Bispo

CSV Comp-Apresentação e Testes (Seja curioso !)

Recommended Posts

Li vários posts tentando entender qual o motivo que faz com que haja tanto interesse por aplicações em sistema gerenciador de base de dados.

 

Como autor e desenvolvedor do CSV Comp Framework,que é um conjunto de :

-Sistema gerenciador de base de dados e (documentos) ;

-Conjunto de aplicativos para elaboração de aplicativos inerente ao sistema.

-Framework com linguagem para WEB,Desktop e relação em tabelas (*csv*,planilhas).

Codigo fechado,aplicação free.

 

São duas versões.Uma para desktop Windows (32 bits) e uma versão para servidor Apache (cgi).

com ele é possivel contruir chat,aplicações de CRUD,etc.

 

Linguagem CQL

A linguagem cql foi projetada de maneira e facilitar a interação de novos usuários.Ela possibilita a interação (em qualquer camada,desktop ou internet) entre aplicações e breve em microcontroladores.

Pode relacionar campos em várias tabelas (somando,subtraindo,excluindo,etc)

 

Como sou o único mantenedor do sistema,tenho grande trabalho em fazer documentação e testes de cada parte do aplicativo,mas,tem sido bem gratificante (graças a Deus).

 

Exemplo da capacidade do cql

 

Em um arquivo de milhoes de linhas (csv) é possivel buscar todas as ocorrencias de "DADO" apenas usando a sintaxe cql (embutida em aplicações desktop ou web):

 

Em python:

import osmycql=str('')mycql='''{   Arquivo_ou_tabela_csv;   @algo;   (DADO);   0;0;0;   query=0;   destino=0}'''driver=open('caminho//inpout_comp.exe','w') #entrada do parserdirver.write(str(mycql))driver.closeos.startfile('caminho//CSV_Parser.exe')          #executa query,aplicação#Os resultados podem ser lidos emresultado=open('caminho//Arquivo_ou_tabela_csv.que','r') #leia resultadoprint(resultado.readlines())

ou php...C++,VB,Pascal ou direto da web com CQL

 

 

 

 

Pequeno Exemplo de Aplicação Web

 

 

 

Considere que ja tenha o Apache instalado na sua maquina.

Crie um arquivo html chamado "Cadastro.html" dentro da pasta de seu site (.../htdocs)

 

Instale o aplicativo do CSV Comp (.../cgi-bin/executa.exe)

 

Conteudo do arquivo Cadastro.html:

<html><form action='http://seu_servidor/cgi-bin/executa.exe/default'>   //<a acão so tem um unico nome em todo framework ("default")<h1>Cadstro de amigos</h1>Digite nome de amigo:<br><input type='text' name='id_amigo'></a><p>Digite fone de amigo:<br><input type='text' name='id_fone'></a><p><input type='submit' name='script_cql.cql' value='Cadastrar'></a><p></form></html>//salve esta pagina no htdocs//abaixo temos o codigo do "script_cql.cql"{       c:\caminho\apache2\htdocs\Tabela_Amigos;     //Configure caminho da tabela csv       @adicionar;       (       id_amigo;       id_fone;       );       0;0;0;       query=0;       destino=0}//salve como script_cql.cql e coloque dentro da pasta cgi-binCrie no bloco de notas um arquivo chamado "Tabela_Amigos.csv" e salve no htdocs.Crie os campos da sua tabela:AMIGO;FONE      //estes campos são escritos na primeira linha do csv,separados por ponto e virgula (";").

Depois ,navegue até http://seu_servidor/cadastro.html e faça experimentos.Confira os dados no arquivo Tabela_Amigos.csv.

Caso queriam conhecer mais,pode enviar email.

 

 

Uma coisa que deve ser posto em publico aqui neste forum.

 

 

Sobre o nome da linguagem CQL.

Tenho documento desde antes de 6/10/2010 chamando o nome desta linguagem de CQL (Comma Query Language).

Descobri que o Cassandra adotou este mesmo nome para a linguagem do banco deles em:

 

"0.8, released Jun 2 2011, added the Cassandra Query Language (CQL), self-tuning memtables, and support for zero-downtime upgrades"

 

fonte: http://en.wikipedia.org/wiki/Cassandra_%28database%29

portanto,eu havia adotado o nome anos antes.

 

 

CQL do Cassandra adotado em 2011:

 

 

http://cassandra.apache.org/doc/cql/CQL.html

 

CQL do CSV Comp Framework adotado em 2009:

http://www.youtube.com/results?search_query=csv+comp

 

(Lógico que terei que reenomear o nome do meu cql.Eu armei minha barraca no lote antes.Mas se chegar uma empreiteira e quiser me remover,basta usar o trator,mesmo que o terreno não seja deles.)

 

 

Transação relacional em tabelas *.CSV

 

 

 

Temos então,numa aplicação (desktop ou web), 2 tabelas.A de Produtos.csv e a de Vendas.csv.Estas tabelas são mantidas no formato csv para registro de transação relacional num comercio.Ao clicar em comprar (numa aplicação),o script CQL será executado via CSV Comp e promoverá uma transação relacional.

Sendo a de produtos:

 

CODIGO;PRODUTO;PRECO;ESTOQUE

0001;ARROZ;12,54;1000

0002;FEIJAO;7,54;800

 

E a de vendas:

 

CODIGO;PRODUTO;TOTAL_VENDIDO

0001;ARROZ;0,00

0002;FEIJAO;0,00

{;;;Este é o conteudo do script CQL.Na tabela de PRODUTOS,o sistema faz uma busca pelo codigo e (subtrai -) a id_qtd (da venda no evento) ao campo do registro no campo de ESTOQUE  ;;;}{	Produtos;	-;	CODIGO;	(id_codigo);	(id_qtd);	ESTOQUE;	query=0;	destino=3}{;;;Essa parte,soma (+) no campo de TOTAL_VENDIDO na tabela de VENDAS valor (preçoXquantidade) em totalização ;;;}{	Vendas;	+;	CODIGO;	(id_codigo);	(totalizacao);	TOTAL_VENDIDO;	query=0;	destino=2}{;;; Todo script acima citado,faz parte de um unico arquivo CQL.Um unico evento pode gerenciar  infinitas tabelas;;;}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A iniciativa de criar algo novo ou diferente merece ser elogiada.

 

Mas note que está desenvolvendo para windows (pelo menos foi o que entendi) o que pode atrapalhar a adoção pois a maioria dos servidores usam linux.

 

Fora isso, ao escolher um formato já conhecido como o csv, embora a adoção e uso seja, em tese, mais facilmente aceito, ele provavelmente possui restrições quanto ao numero de registros suportados, tempo de resposta de uma query numa base de dados grande, criação (ou não de indices), consistencia dos dados, etc...

 

O uso do csv aguentaria quantos registros sem perder a peformance ?

Se inserirmos alguns milhões de registros todos os dias e realizarmos diversas consultas sobre esses dados, como se comportará o tempo de resposta ?

Como fazer para melhorar isso sem ter que fazer upgrades de hardware ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A iniciativa de criar algo novo ou diferente merece ser elogiada.

 

(Muito obrigado pelo reconhecimento e pela sua preciosa atenção).

 

Mas note que está desenvolvendo para windows (pelo menos foi o que entendi) o que pode atrapalhar a adoção pois a maioria dos servidores usam linux.

 

(Você tem razão.Esse projeto é criado com o Lazarus.Os fontes podem ser compilados para linux,mac,etc...)

 

Fora isso, ao escolher um formato já conhecido como o csv, embora a adoção e uso seja, em tese, mais facilmente aceito, ele provavelmente possui restrições quanto ao numero de registros suportados,

 

(suporta milhoes e milhoes.Depende da capacidade de disco e hardware)

 

tempo de resposta de uma query numa base de dados grande,

(Fiz pesquisas:Em uma base de 1.404 498 registros,ele faz uma busca e substitui todas as ocorrencias de um item em menos de 9 segundos)

 

criação (ou não de indices),

(cada campo é um indice)

 

consistencia dos dados, etc...

(Consistencia persiste.Controle de Concorrencia)

 

O uso do csv aguentaria quantos registros sem perder a peformance ?

(Sim.Melhor que XML,JSON)

 

Se inserirmos alguns milhões de registros todos os dias e realizarmos diversas consultas sobre esses dados, como se comportará o tempo de resposta ?

(o tempo é proporcional a quantidade de dados e capacidade do hardware como qualquer aplicativo)

 

Como fazer para melhorar isso sem ter que fazer upgrades de hardware ?

(Criar sistemas com categorias.Ja comparei uma query dele com a do Firebird.Firebird come poeira)

 

O ponteiro percorre um arquivo de 700 mil linhas em menos de 1 segundo. !!!

Caso queira uma copia para fazer experiencias (didáticas,ja que é um especialista,me informe).



Mecanismo de Controle de Concorrencia

 

Quando um Cliente usa uma query ,acessando o Servidor,o CSV Comp é iniciado e faz uma inspenção no diretorio da aplicação "se existe um arquivo chamado "LOCK.INF".Se ele não existe,(não existe outra instancia em execução).Então a instancia atual cria e inicia a executar os vários blocos de query pre-carregados no buffer.Ao terminar ,ele deleta o LOCK.INF que ele criou.

Caso ocorra varias iniciações ,um "WHILE" mantem o aplicativo em espera em até 5 segundos enquanto existe a concorrencia.(Porem em 5 Segundos muita coisa foi feita na instancia anterior).Ao fim dos 5 segundos o LOCK.INF é deletado pela instancia que se segue.

Deleção forçada (5 segundos se instancia anterior for muito lenta,evitando um DEAD LOCK).Em aplicações DE TERABYTES o tempo de 5 segundos pode aumentar.

Existe um arquivo que configura a velocidade de execução entre cada bloco de código:

{

bloco

}

sleep(100)//<intervalo de tempo na memoria da aplicação

{

bloco

}

 

Segundo resultados,velocidade curriqueira entre blocos é de 35 milisegundos para um Fulltext em milhares de registros

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.