Servidor de banco de dados

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Servidor de banco de dados

Mensagem por JoséQuintas »

Muitos divulgam LIBs pra facilitar acesso a MySql.
O uso de LIBs é bom, pois quando se tem muito fonte a ser alterado, elas reduzem o tempo necessário para a mudança deles.
Só que o uso estilo xbase não vai usar NENHUM recurso do MySql, e ao contrário, pode deixar tudo mais lento, e o servidor mais sobrecarregado.

Base de Dados

A base de dados é simplesmente o armazenamento dos dados.
Você salva e busca dados.
Isto é a base tradicional dos DBFs. Só salvar e buscar, e mais nada.

SQL/MySql

No MySql, trata-se de um gerenciamento de base de dados.
É um servidor, com programação própria, que lhe entrega tudo pronto.
Basta um comando SQL e todo processamento já vém pronto.

Exemplos práticos:

Imaginem um banco de dados com duas tabelas:
NOTAS FISCAIS: NUMERO, CODCLIENTE, DATAEMISSAO, VALOR
CLIENTES: CODCLIENTE, NOME

Vamos pegar um relatório médio:
- Somente totais por cliente
- Em ordem alfabética (em ordem de valores, o fonte ficaria muito grande)
- Somente valores acima de 5000

Código: Selecionar todos

select 0
use notas index codcliente 
select 0
use clientes index nome
Goto Top
Do While .Not. Eof()
   mSoma := 0
   Select notas
   Seek clientes->CodCliente
   Do While clientes->CodCliente == notas->CodCliente .And. .Not. Eof()
        mSoma := mSoma + notas->Valor
       Skip
   Enddo
   select clientes
   If mSoma < 5000
      Skip
      Loop
   Endif
   @ Row(), 0 Say notas->numero
   @ Row(), Col()+2 say notas->codcliente
   @ Row(), Col()+2 say clientes->Nome
   @ Row(), Col()+2 Say notas->DataEmissao
   @ Row(), Col()+2 Say notas->Valor
   @ Row()+1, 0 Say ""
   Skip
Enddo
close databases
Legal, funciona direito, e se usar uma lib Mysql não precisa mexer no fonte.
Vai acessar o Mysql durante o relatório inteiro, processar TODOS os registros do banco de dados, que irão chegar via rede, ou via internet.
Vai estar usando muito o servidor MySql, mas NADA/ZERO de seus recursos.
Numa base de 10.000 notas, e 1.000 clientes, vai estar trazendo para o terminal 11.000 registros, via rede ou via internet, e também fazendo várias consultas durante o relatório.

Já usando recursos do MySql...
Uma única consulta ao banco e já teria o relatório pronto.

SELECT CODCLIENTE, NOME, SUM(VALOR) SOMA FROM NOTAS GROUP BY CODCLIENTE WHERE SOMA > 5000 ORDER BY NOME

Digamos que existam 100 clientes que atendam essa condição.
No estilo xbase, haverá o tráfego de 11.000 registros pela rede/internet, e várias consultas à base MySql.
Usando recurso do MySql, com a query acima, haverá o tráfego de somente 100 registros pela rede/internet, em uma única consulta à base MySql.
Diferença mais prática?
Suponha a base na internet, e 100 bytes cada registro.
11.000 registros x 100 bytes = 1.100.000 bytes = 1.1MB
100 registros x 100 bytes = 10.000 bytes = 10kb
Numa banda larga de 1MB, que baixa a uns 100kb, o primeiro demora 11 segundos, e o segundo apenas meio segundo, isso sem contar as várias solicitações ao servidor executadas na primeira opção, senão será uma diferença ainda maior.
O programa fica muito mais rápido, e com menos fonte.

Agora, imagine as possibilidades....
Imagine que o relatório poderia ser por ordem de valor.
O fonte em xbase seria muito maior, já em SQL, só mudaria o ORDER BY.
E se fosse total por data?
O fonte em xbase seria diferente, já em SQL, só mudaria o GROUP BY

O SQL permite:
- Totalizar dados (reduz tráfego de dados)
- Relacionar tabelas (reduz consultas)
- Colocar em determinada ordem (reduz processamento local)
- Filtrar dados (reduz tráfego de dados)

Essa é só uma pequena parte das diferenças entre os DBFs e os bancos de dados relacionais.
Ficar preso ao estilo xbase não é interessante.

Ahhh... o fonte modificado... bom, depende da LIB ou linguagem.
Como o ADO é padrão, e no xHarbour fica igual, vai um simbólico meio xHarbour/VB...

Código: Selecionar todos

Set Rs = Conexao.Execute("SELECT CODCLIENTE, NOME, SUM(VALOR) SOMA FROM NOTAS GROUP BY CODCLIENTE WHERE SOMA > 5000 ORDER BY NOME")
Rs.MoveFirst
Do While Not Rs.Eof()
   ? rs.Fields("NUMERO").Value
   ? rs.Fields("CODCLIENTE").Value
   ? rs.Fields("NOME").Value
   ? rs.Fields("DATAEMISSAO").Value
   ? rs.Fields("VALOR").Value
   Rs.MoveNext
Loop
Rs.Close
Obs. Uso o ADS no VB, e tudo isso também é permitido. Tudo bem, ADS usa DBF/CDX , mas ADS é um servidor de banco de dados, e não apenas DBF/CDX.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Servidor de banco de dados

Mensagem por lugab »

Ótimas dicas, Quintas.

Eu nunca ia imaginar que seria assim tão fácil.

Migração à vista, principalmente se o Mysql for free

gabriel
lugab
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Servidor de banco de dados

Mensagem por Maligno »

O Quintas deu um ótimo exemplo do que se perde ao insistir na velha cultura das tabelas locais. Isso que ele nem falou do resto: triggers, stored procedures, views, generators, domínios, UDFs, etc etc etc. Isso só pra comentar o básico que todo SGBD tem. Particularmente prefiro o Firebird, que é (também?) gratuito, pequeno, rápido, na medida pro que preciso. Aliás, robusto também: suporta bases extremamente volumosas.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Servidor de banco de dados

Mensagem por JoséQuintas »

Pois é.
E faltou dizer nesse básico, que talvez não tenham percebido.
Não precisa se preocupar com select ou set index.

Sobre o limite, já vi comentários de MySql de mais de 1TB.
Minha base de NFE ainda tá na casa de 1GB.
Mas limite, acho que a gente nem precisa se preocupar tão cedo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Servidor de banco de dados

Mensagem por Itamar M. Lins Jr. »

Muitos desses recursos hoje já é possivel com o LetoDB e como NetIO.
Coisas que só o ADS tinha. No mais é "quase" inquestionavel (para mim) a superioridade dos SGBD's em relação ao DBF.
Hoje todos os meus clientes que tem duas ou mais lojas fazem cunsultas de clientes/mercadorias, etc em todas as lojas num piscar de olhos. Isso usando ADSL de 300kb que num chega nem a 260kb, tem MSN, FM, Orkut, Cameras de video etc... tudo pindurado nesses links.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Servidor de banco de dados

Mensagem por sygecom »

Realmente o LetoDB é bom, muito bom mesmo eu uso ele,inclusive coloquei a mais ou menos uns dois anos atrás um link para o pessoal baixar e testar e houve dia que teve mais de 50 usuários conectados, então ele da conta do recado dependendo da situação, principalmente o controle de transação que para mim na época foi muito bom, mas eu venho trabalhando com Postgresql 8.4 e os recursos são ilimitados, um deles que faz falta no LetoDB que já mandei a idéia para o Alexander é um comando LIMIT de poder retornar um limite máximo de registros ex:
USE AGENDA ALIAS AGENDA VIA "LETODB" LIMIT 5
Outro fato é que agora na maioria das empresas tem um TI e a primeira pergunta é: Qual é o banco de dados que usa seu sistema ? se diz DBF o cara as vez nem conhece e jogo na Google e diz que isso é ultrapassado e problemático, mas se diz que é Postgresql a historia muda...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Servidor de banco de dados

Mensagem por JoséQuintas »

Curiosidade: alguém sabia que o xHarbour, assim como a maioria das linguagens Windows tem ADO? e alguém sabe pra que serve o ADO?
O ADO é tipo um "driver" pra banco de dados. Se usar ADO, já tem acesso a qualquer base de dados, de graça.
Quer dizer... sei lá... algumas... tem que procurar se o fabricante da base fez o "driver". Uma lista que encontrei foi esta:
SQL Server 2008, SQL Server 2005 , SQL Server 2000, SQL Server 7.0 , SQL Server Compact Edition , Oracle , IBM DB2 , MySQL , Sybase Advantage Database Server , Sybase Adaptive Server Enterprise , Informix , Postgre SQL , IBM UniVerse , IBM UniData , AS/400 (IBM iSeries) , Progress, Firebird , Interbase , Paradox , Ingres , Mimer SQL , Lightbase , Pervasive , SQLBase , Caché , Teradata , VistaDB , DBMaker , Netezza DBMS , Valentina , Excel 2007 , Excel , Textfile , Access 2007 , Access , Visual FoxPro / FoxPro 2.x , DBF / FoxPro , SQLite , Filemaker ,

A lista é dos mais usados, está neste site aqui:
http://www.connectionstrings.com/

De qualquer forma, tudo depende do que está disposto a gastar, seja dinheiro ou mão de obra.
Se tem tempo de aprender, vai refazer os fontes reduzindo em muito, deixando muito mais rápido.
Se tem milhares de fontes, uma RDD faz a mudança instantânea, mesmo que não aproveite recursos.
O pessoal que vende as RDDs vai agradecer, porque para o ADO eles fazem tudo de graça.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Servidor de banco de dados

Mensagem por Toledo »

JoséQuintas escreveu:alguém sabia que o xHarbour, assim como a maioria das linguagens Windows tem ADO? e alguém sabe pra que serve o ADO?
Dê uma olhada no primeiro tópico (fixo) desta seção, com o título "*** ADOxb - BIblioteca de funções de Acesso SQL ***".

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
clrod
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 17 Nov 2009 13:42
Localização: São Paulo - SP

Re: Servidor de banco de dados

Mensagem por clrod »

Alguém sabe dizer se esse ADO é o mesmo que se encontra entre os exemplos do Harbour?

Obrigado.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Servidor de banco de dados

Mensagem por rochinha »

Amiguinhos,

Toledo, obrigado pela lembrança e como sabemos, nosso forum é fonte de conhecimento, assim como um grande livro.

CLROD, os exemplos que voce encontra no mundo Harbour referentes a ADO são sim os mesmos.

Quintas, somente complementando, as linguagens Windows tem acesso ao ADO.

ADO é uma tecnologia de acesso a dados surgida com o uso do Access, suplantando o antigo método DAO.

Tornou-se notório quando a Micro$oft, na necessidade de implementar o sua linguagem comercial, o Basic, pegou os módulos de acesso a dados do Access emprestado, embutindo no mesmo, tornando-o mais compatível com outros tipos de arquivos de dados que não o TXT que o Basic manipulava.

A beleza de se usar o ADO em conjunto com Harbour é que o leque de opções acaba se tornando gigantesco, sendo é claro que as opções de databases serão sempre Firebird, MySQL e PostGres, nem sempre nesta mesma sequencia, en contrapartida das outras SQLs que só encareceriam nossos projetos.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Servidor de banco de dados

Mensagem por JoséQuintas »

A beleza de se usar o ADO em conjunto com Harbour é que o leque de opções acaba se tornando gigantesco
Pois é.
Já falei sobre isto nos tempos em que o xHarbour nem funcionava direito com DBFs.
De lá pra cá, o "leque gigantesco" continua de canto.
O ADO é totalmente grátis, é padrão, é usado pela Microsoft, os "fabricantes" de bases de dados fazem o que for necessário para suas bases funcionarem com ADO também grátis.
Só não tem pra Linux, não sei se é isso que impede o avanço.

Faltou citar nas bases de dados o SQL Server da Microsoft.
A versão Express é grátis, e se não me engano, o único limite é usar no máximo 1GB do servidor.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Servidor de banco de dados

Mensagem por rochinha »

Amiguinhos.

Eis um verdadeiro exemplo de como programar usando sintaxe Basic em Harbour/xHarbour:

Código: Selecionar todos

function main()
     ' Vbscript comment.
     Dim cn
     Dim rs
     Set cn = CreateObject( "ADODB.Connection" )
     cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" & "User Id=Admin; Data Source=ado.mdb"
     cn.Open()
     Set rs = CreateObject( "ADODB.Recordset" )
     rs.Open( "Names", cn, 0, 1, 2 )
     do while not rs.eof()
            MsgBox rs.Fields( "First" ).Value
            rs.MoveNext()
     loop
     rs.Close()
     Set rs = Nothing
     'cn.Close
     Set cn = Nothing
return 
O fato é que a possibilidade deste tipo de programação é dependente de um recurso que o Clipper passou a incluir a partir de sua versão 5.0 e ela vem sendo compatibilizada pelo tempo, os Include Files.

Então para enganar a visão mas não o compilador usamos os comandos extendidos para isto:

Código: Selecionar todos

#define VBSCRIPT

#ifdef VBSCRIPT
   #command ' <*x*> =>
   #command Dim <vars,...> => Local <vars>
   #command Set <!id!> = <exp> => <id> := <exp>
   #command If <cond> Then => IF <cond>
   #command Loop => End

   #translate .<!id!> => :<id>
   #translate Not => !
   #translate And => .AND.
   #translate Or => .OR.
   #translate MsgBox <exp>[.<more>] => MessageBox( 0, <exp>[:<more>], "XBScript", 0 )
   #translate Nothing => NIL
   //#translate _ => ;
   #translate & => +   
#endif

#define adCmdTable 0
Agregando isto poderemos então fazer uso transparente da linguagem no que tange os bancos de dados.

Ainda é vendido um servidor xBase chamado de Fortress, pouco conhecido, mas sua intenção é manter a base xBase mais segura. http://www.grafxsoft.com/fortress.htm
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder