+ Responder ao Tópico



  1. #1
    void_main_void
    Visitante

    Padrão Espelhamento

    boa tarde povo do PHP... eis aqui uma questão bem complicada, espero que possam me dar umas idéias:

    tenho um sistema em PHP+PostgreSQL que roda na rede interna da empresa... esse sistema lista links para arquivos pdf armazenados no servidor... então para cada uma desses arquivos pdf, que são documentos, tenho o arquivo armazenado em uma estrutura de diretórios e dados sobre ele armazenados no banco de dados...

    agora terei que extender isso para a home page, ou seja, disponibilizar esses documentos na rede interna e atravez do site... porém são servidores diferentes, o do site é externo, está hospedado em um proverdor pago, e a empresa aqui não tem a menor intenção de hospedar o site aqui mesmo...

    então aí vem a grande questão: preciso espelhar essas informações e os arquivos nos dois lugares, de modo que tudo que for alterado na rede local seja feito também no site, pois não posso ter os dados em lugar apenas... detalhe: o sistema foi desenvolvido em Postgre e no provedor onde está o site só existe MySQL disponível, de forma que terei que mexer em alguma coisa na programação também, mas isso é o de menos... o grande problemas mesmo é como fazer esse espelhamento de informações e arquivos...

  2. #2

    Padrão Espelhamento

    cara, se o banco de dados for algo simples, sem tabelas relacionais com milhares de atributos mágicos e dados sobrenaturais, acho que dá sim.
    vc vai precisar criar em ambos os bancos de dados tabelas equivalentes, de forma que os dados de cada uma possam ser intercambiados (sempre quis usar essa palavra...hauhauahua). então vc vai precisar ler os dados desta tabela no servidor que vai ser espelhado, transferir para o espelho e adicionar.
    Tenho algums scripts para fazer isto em php, mas somente para mysql, agora com postgresql eu nunca mexi, e nunca sequer axei documentação (também nunca procurei muito). se vc quiser alguma ajuda posso tentar.

  3. #3
    void_main_void
    Visitante

    Padrão Espelhamento

    então, mas pior do q ser postgre é ser um postgre e outro mysql, ehehehe... complicado hein... não faço ideia de como passar esses dados de um pro outro...

    e a questão dos arquivos, tem ideia de como fazer tambem? pq alem dos dados do banco tambem preciso espelhar os documentos...

  4. #4

    Padrão Espelhamento

    O que você quer, no final, é uma ferramenta de ETL, o que não é exatamente algo simples...
    Se, como disse nosso amigo, forem dados simples sem muitas constraints, até que não é difícil, dependendo da frequência que quer as atualizações...
    O mais simples é zerar a tabela destino e inserir tudo de novo a partir da origem (desde que, é claro, só exista uma origem, pois, se for atualizado em ambos os lados, a coisa se complica...)
    Outra forma é colocar uma coluna a mais nas tabelas a ser replicadas com data e hora da última atualização da informação e usar essa informação como referência para replicação apenas das atualizações...
    Você não pode disponibilizar tudo apenas na internet ???
    Ter informações em mais de um lugar é dar chances de informações desencontradas...

  5. #5
    void_main_void
    Visitante

    Padrão Espelhamento

    olá marcio...

    então, a quantidade de tabelas não seriam muitas não, apenas umas 3, que se referenciam com chave estrangeira... até aí, acho q o fato de passar do postgre para o mysql nao seria problema, bastando ter os campos certinhos com as ids...

    o esquema de zerar o destino e inserir tudo de novo pode ser feito, mas como faço isso? teria q usar SQL, ou algo assim? considerando que não seriam todos os registros necessários, acredito que nao seriam todoas informações passadas pra lá, teria uma especie de filtro antes...

    cara, eu não poderia deixar tudo na internet, porque como eu disse antes, é um sistema que roda na rede local, e tem outras funcionalidades nele que não queremos deixar disponiveis na internet, apenas a leitura de documentos mesmo... o restante seria feito internamente... e mais, no site o banco é mysql, se eu fosse colocar o sistema inteiro lá dae teria que modificar tudo, mas mesmo assim não acho uma boa ideia, pois ja escolhi o postgre por considerar um banco melhor...

    e quanto aos arquivos, vc tem alguma ideia tambem de como fazer?

  6. #6

    Padrão Espelhamento

    Bom... partindo-se do princípio que a origem de dados é uma só e a internet é só consulta...
    Para os arquivos de dados, minha sugestão é fazer um script que diariamente, no melhor horário para vocês (é claro) leia os arquivos modificados nas últimas x horas e transfira para a internet via scp (coloque o shell no crontab e essa parte está tranquila)
    Quanto aos dados, se você puder zerar a tabela, via comando truncate, você pode ler os dados da tabela origina e ir inserindo na tabela destino, desde que a tabela não seja muito grande, senão ficará um tempo muito grande indisponível e tem que levar em consideração também consumo de memória e banda da rede... não executar no mesmo horário do scp.
    se quizer enviar só dados novos, use a coluna que eu sugeri para verificar dados novos e vá inserindo apenas os com data de modificação maior do que x.
    Estou passando a idéia geral de como fazer...Agora... os scripts são por sua conta...

  7. #7
    void_main_void
    Visitante

    Padrão Espelhamento

    então, na verdade nem precisaria ser uma coisa automática... até poderia ser de uma forma que alguém tivesse que acesar diariamente, ou quando fizer as alterações, e espelhar os dados manualmente, sem problemas... o que é esse scp?

    quanto ao esquema de enviar os dados, como fazer isso? nao entendi... vc quer dizer tipo, com um script ler os campos do registro um a um e depois rodar um SQL no destino pra inserir os dados?


    Citação Postado originalmente por Marcio68Almeida
    Bom... partindo-se do princípio que a origem de dados é uma só e a internet é só consulta...
    Para os arquivos de dados, minha sugestão é fazer um script que diariamente, no melhor horário para vocês (é claro) leia os arquivos modificados nas últimas x horas e transfira para a internet via scp (coloque o shell no crontab e essa parte está tranquila)
    Quanto aos dados, se você puder zerar a tabela, via comando truncate, você pode ler os dados da tabela origina e ir inserindo na tabela destino, desde que a tabela não seja muito grande, senão ficará um tempo muito grande indisponível e tem que levar em consideração também consumo de memória e banda da rede... não executar no mesmo horário do scp.
    se quizer enviar só dados novos, use a coluna que eu sugeri para verificar dados novos e vá inserindo apenas os com data de modificação maior do que x.
    Estou passando a idéia geral de como fazer...Agora... os scripts são por sua conta...

  8. #8

    Padrão Espelhamento

    Citação Postado originalmente por void_main_void
    então, na verdade nem precisaria ser uma coisa automática... até poderia ser de uma forma que alguém tivesse que acesar diariamente, ou quando fizer as alterações, e espelhar os dados manualmente, sem problemas... o que é esse scp?

    quanto ao esquema de enviar os dados, como fazer isso? nao entendi... vc quer dizer tipo, com um script ler os campos do registro um a um e depois rodar um SQL no destino pra inserir os dados?
    Pode ou não ser automático, depende da complexidade do trabalho...
    scp é a cópia segura do linux.
    o processo de transferência de dados consiste em ler os registros na origem e grava-los no destino, um a um, a princípio teria que ser um comando sql tipo insert ou update...

  9. #9
    void_main_void
    Visitante

    Padrão Espelhamento

    Citação Postado originalmente por Marcio68Almeida
    Citação Postado originalmente por void_main_void
    então, na verdade nem precisaria ser uma coisa automática...
    Pode ou não ser automático, depende da complexidade do trabalho...
    mas esse scp, é algo que roda no servidor então? considere que no servidor remoto eu não tenho acessos administrativos, é um servidor exeterno onde está hospedado o site... no maximo tenho acesso a ftp...

  10. #10
    eyglys
    Visitante

    Padrão solução simples

    Caso o seu servidor (onde ficam armazenados os dados em postgre) seja linux (e vc tenha acesso a ele) e vc tenha acesso ao mysql do servidor de hospedagem (sem ser por aquelas merdas de phpmyadmin, acesso direto, pela porta 3306).

    A maioria das compilações do postgre possuem um aplicativo chamado pgdump (ainda não vi nenhuma compilação, desde as mais antigas que não tivessem esse aplicativo) que realiza um backup de uma base dados (vc pode especificar quais bases de dados, tabelas, etc) e pode ser armazenado em um arquivo .sql.

    Esse arquivo .sql poderia ser lido com um terminal simples do mysql (com esse nome mesmo, todas as compilações do mysql possuem esse aplicativo, e qualquer pessoa poderia te arrumar esse terminal) e jogado no ar.

    Mas, fazer somente isso, iria ter inúmeros problemas de chave duplicada, então vc deveria construir um .sql, somente com um monte de DELETE FROM ..., limpando as tabelas, e executar antes de executar o backup do postgre.

    Na maioria das distribuições linux exite um serviço chamado crond, onde vc pode agendar tarefas, onde vc poderia agendar esse espelhamento (quantas vezes por dia vc desejasse).

    Resumo:
    consultar manual do pgdump
    armazenar o resultado do DUMP (essa palavra irá te ajudar a pesquisar sobre o assunto) em um arquivo .sql
    Executar um arquivo .sql padrao, para limpar as tabelas
    Executar o dump do postgre (O Mysql e o Postgre, seguem a mesma sintaxe de SQL DE INSERÇÃO)

    Último passo e mais importante: colocar todas essas rotinas em um shell script, para ficar automático, e vc colocar apenas uma tarefa no crond (agendador de tarefas).

    Palavras-chaves (para pesquisas):
    pgdump, mysql, crond

    Espero ter ajudado,

    Keylly Eyglys.

  11. #11
    void_main_void
    Visitante

    Padrão Espelhamento

    galera, só agradecendo a atenção de vcs, valeu mesmo...

    eu resolvi usando XML-RPC, manjam disso? eu não conhecia isso, agora que via alguma coisa e consegui implementar, até que ficou legal, só falta dar uma arredondada agora...

    o que acham sobre XML-RPC?