Pergunta

Eu preciso de uma maneira simples para vários scripts rodando o PHP para compartilhar dados.

Devo criar um banco de dados MySQL com um mecanismo de armazenamento de memória RAM, e compartilhar dados via que (pode vários scripts conectar ao mesmo DB simultaneamente?)

Ou arquivos simples com um pedaço de dados por linha ser melhor?

Foi útil?

Solução

arquivos flat? Nooooooo ...

Use um motor de boa DB (MySQL, SQLite, etc). Então, para o máximo desempenho, usar memcached para Cache conteúdo.


Desta forma, você tem a facilidade e confiabilidade de compartilhar dados entre processos usando software de servidor provado que alças de concorrência, etc ... Mas você começa a velocidade de ter seus dados em cache.

Tenha em mente algumas coisas:

  1. MySQL tem uma cache de consultas. Se você está emitindo as mesmas consultas repeteadly, você pode ganhar um monte de desempenho sem adicionar uma camada de cache.
  2. MySQL é muito rápido de qualquer maneira. Você carregar-testados para demonstrar que não é rápido o suficiente?

Outras dicas

Por favor, não use arquivos simples, para a sanidade dos mantenedores.

Se você está apenas olhando para ter dados compartilhados, o mais rápido possível, e você pode manter tudo na RAM, em seguida, memcached é a solução perfeita.

Se você gostaria de persistência de dados, então use um DBMS, como MySQL.

Geralmente, a DB é melhor, no entanto, se você estiver compartilhando uma quantidade pequena, principalmente estática de dados, pode haver benefícios de desempenho (e simplicidade) de fazê-lo com arquivos simples.

Qualquer coisa diferente de compartilhamento de dados trivial e eu iria pegar um DB no entanto.

1- Onde o arquivo simples pode ser útil: arquivo plano pode ser mais rápido do que um banco de dados, mas em aplicações muito específicas. Eles são mais rápidos, se os dados são lidos do início ao fim, sem qualquer pesquisa ou escrever. Se o ajuste não faça de dados na memória e necessidade de ser lido totalmente para começar o trabalho feito, 'pode' ser mais rápido do que um banco de dados. Além disso, se há muito mais do que write leitura, arquivo plano também brilhar, a maioria dos bancos de dados padrão setups vai precisar fazer as consultas de leitura aguardar a gravação ao fim a fim manter índices e chaves estrangeiras. Fazendo as consultas de escrita geralmente mais lento do que simples lê.

TD / LR vesion: Use arquivos simples para trabalhos sistema baseado (Aka, registros simples análise), não para pesquisas na web consultas.

2 Plano arquivos pit cai: Se o seu curso com uma lima chata, você precisará sincronizar seus scripts quando a alteração de arquivo usando o mecanismo de bloqueio personalizado. Que pode levar a desaceleração, a corrupção até bloqueio morto, se você tem um bug.

3 Ram banco de dados com base? A maioria dos bancos de dados têm em cache de memória para os resultados da consulta, índices de pesquisa, tornando-os muito difícil de bater com um arquivo simples. Porque eles armazenar em cache na memória, fazendo-a funcionar inteiramente da memória é na maioria das vezes ineficaz e perigoso. Melhor adequadamente ajustar a configuração de banco de dados.

Se o seu olhar para otimizar o desempenho usando ram, gostaria de olhar primeiro para executar seus scrips php, páginas HTML e pequenas imagens de uma unidade de RAM. Se o mecanismo de cache é mais provável que seja bruto e acertar o disco rígido sistematicamente para dados estáticos não mudam.

melhor resultado pode ser alcance com um equilibrador de carga, com um agrupamento ligações planas de volta para cima para a RAM matriz SAN base. Mas isso é um assunto completamente diferente.

5 pode vários scripts conectar ao mesmo DB simultaneamente?

Sim, a sua chamada pool de conexão. Em php (lado do cliente) a sua função para abrir uma conexão seu mysql-pconnect ( http://php.net/manual/en/function.mysql-pconnect.php ). Você pode configurar a conexão aberta máximo no php.ini eu acho. configuração semelhante no lado do servidor mysql definir o máximo de conexões simultâneas de cliente em /etc/mysql/my.cnf.

Você deve fazer isso, a fim de tirar proveito de processessing parrallel do script cpu e php evitar que esperar a consulta do outro fim. Ele aumentar muito o desempenho sob carga pesada.

Há também uma conexão piscina piscina / thread na configuração do Apache para clientes web regulares. Veja httpd.conf.

Desculpem a parede de texto, estava entediado. Louis.

Se você estiver executando-os em vários servidores, uma abordagem baseada no sistema de arquivos não vai cortá-lo (a menos que você tem um sistema de arquivos compartilhado consistente, o que é improvável e pode não ser escalável).

Portanto, você vai precisar de uma qualquer forma de banco de dados baseado em servidor para permitir o compartilhamento de dados entre servidores web. Se você é sério sobre o desempenho ou a disponibilidade, a sua aplicação vai suportar vários servidores web.

Eu diria que o banco de dados MySQL seria melhor escolha se você tem algum mecanismo para lidar com fechaduras nas arquivos simples (e alguma forma de controle de acesso). Neste caso, a camada de DB (independentemente do DBMS específicos) está agindo como uma camada de indireção, permitindo que você se preocupe com isso.

Uma vez que o OP não especifica um servidor web (e PHP na verdade pode ser executado a partir de uma linha de comando), então eu não estou certo de que as tecnologias de caching são o que eles são depois aqui. O OP poderia estar olhando para fazer algum tipo de voar transformar dados que não é dirigido site. Quem sabe.

Se o seu sistema possui um cache PHP (que caches compilado código PHP na memória, como APC), tente colocar seus dados em um arquivo PHP, como código PHP. Se você tiver que gravar dados, existem alguns problemas de segurança.

Eu preciso de uma maneira simples para múltiplos execução de scripts PHP para compartilhar dados.

APC e memcached são boas opções, dependendo do contexto. compartilhada memória também pode ser uma opção.

Devo criar um banco de dados MySQL com um RAM motor de armazenamento e compartilhamento de dados via que (pode vários scripts conectar a o mesmo DB simultaneamente?)

Essa também é uma opção decente, mas provavelmente não será tão rápido como APC ou memcached.

Ou seria arquivos simples com um pedaço de dados por linha ser melhor?

Se isto é só de leitura de dados, que é uma possibilidade - mas pode ser mais lenta do que qualquer das opções acima. Especialmente se a dados é grande. Ao invés de escrever código de análise personalizada, no entanto, considerar simplesmente construir uma matriz PHP e include () do arquivo.

Se este é um armazenamento de dados que podem ser acessados ??por vários escritores, simultaneamente, por todos os meios não usar um arquivo simples! Escrevendo para um arquivo simples a partir de vários processos é susceptível de conduzir a corrupção de arquivo. É possível bloquear o arquivo, mas corre o risco de problemas de contenção de bloqueio e longos tempos de espera de bloqueio.

Manipulação escritas concorrentes é a aplicações razão como mysql e exist memcached.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top