Ir para conteúdo
Fórum Script Brasil

Spyder.RV

Membros
  • Total de itens

    156
  • Registro em

  • Última visita

Tudo que Spyder.RV postou

  1. Pessoal, estou com problemas de permissão para hosts externos no meu mysql... 1- Alterei o /etc/mysql/my.cnf, trocando o bind-address=127.0.0.1 para bind-address=0.0.0.0 2- No mysql, executei como root a instrução: GRANT ALL ON usuario.* TO usuario@’%’ IDENTIFIED By ‘************’; e flush privileges; Nesse ponto não funcionou... então eu tentei add uma regra no iptables: iptables -A INPUT -p tcp --dport 3306 -j ACCEPT Mesmo assim não está funcionando... o que faltou?
  2. Só finalizando esse tópico... A sugestão do colega Kakao foi sensacional, inclusive fiz uns testes aqui simulando situações hipotéticas que dificilmente vão ocorrer... por exemplo com 10.0000.000 de registros e cada registro com um campo único realmente diferente... Para isso, após "inflar" a tabela com os 10.000.000 de registros, eu atualizei o valor do campo md5_unico, que é o nome que dei para o campo binário na tabela final. Gerei assim: update fee_itens set md5_unico=UNHEX( left(MD5( RAND( ) ), 16 ) ); Em seguida rodei o meu código PHP para acessar 15 feeds diferentes, totalizando 464 itens a serem localizados e inseridos caso não existissem... o resultado foi: 100% dos registros inseridos em 13,902 segundos... Logo em seguida rodei o novamente e como já estava tudo cadastrado, dei menos de 5 segundos; visto que todos os itens já estavam inseridos e só SELECT's pois já estavam todos cadastrados... Repeti várias vezes e inclusive rodando simultaneamente de vários locais diferentes acessando o mesmo script e o pior score foi cerca de 17 segundos.... Vale ressaltar que o cenário dos 10.000.000 de registros é hipotético e muito acima do que realmente chegarei a ter na tabela e levo aí no mínimo 10 anos pra chegar nisso, e até lá já estarei num ORACLE da vida, hehehehe...Já o cenário de 15 fontes RSS diferentes com 464 registros é exatamente o que tenho atualmente... Outro detalhe é que como vão ter muitas consultas em sequencia ao mysql (um select e um insert), o MD5 já é enviado na consulta pronto, para evitar forçar o mysql, dividindo um pouco da tarefa com o php... $query = "SELECT ID FROM fee_itens WHERE md5_unico = UNHEX(" . substr(md5($rss->item), 0, 16) . ");"; O resultado final foi muito acima das expectativas... confesso que estava esperando que esse tempo fosse beeeem mais alto!!!! Valeu Kakao. Valeu Kakao pelo auxílio... ficou fora do comum
  3. Hum... realmente... testei com os caracteres e realmente funcionou bem! Isso nos testes aqui me rendeu 18% de tempo de execução!
  4. Achei o ponto... no phpmyadmin tava aparecendo certo, porém no mysql olha só a diferença... tá na imagem: Questões de codificação de caracteres... Observem que os acentos que foram retornados estão diferentes (no PHPmyAdmin ele já ajustou, mas no console do mysql direto é que o problema ficou visível). O problema aqui agora mudou de status pois como as fontes RSS vêm de diferentes locais e possuem diferentes características, inclusive diferentes codificações, inclusive tem coisa que vem codificado como UTF-8 mas no cabeçalho do xml vem como ISO-8859-1... a solução aqui pelo que vejo é retirar toda a acentuação ou caracteres especiais pra evitar dor de cabeça... quase que um SLUG. Pesquisei um pouco sobre expressões regulares no mysql e é muito complexo... alguma dica de como implementar direto no mysql? Preciso pegar algo como: Veneno de aranha é usado em pesquisa contra disfunção erétil E transformar em : veneno-de-aranha--usado-em-pesquisa-contra-disfuno-ertil Eu já vou jogar tudo pronto a partir do PHP, então por lá é tranquilo... mas preciso montar uma query pra atualizar o que já tem no banco de dados e por isso preciso fazer a conversão também no banco e é mais rápido fazer isso numa query de update só do que fazer um loop no PHP com mais de 10.000.000 de registros
  5. Continuo apanhando... vejam o código abaixo: SELECT ite_codigo, ite_unico FROM fee_itens WHERE ite_md5 = UNHEX( LEFT( MD5( ite_unico ) , 16 ) ) ORDER BY ite_codigo DESC LIMIT 5 Me retorna normalmente alguns registros conforme a imagem abaixo: Porém se eu tentar uma consulta comparando um resultado único não retorna zerado... detalhe... esse valor existe pois eu peguei do primeiro registro da primeira consuta. SELECT ite_codigo, ite_unico FROM fee_itens WHERE ite_md5 = UNHEX( LEFT( MD5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil' ) , 16 ) );
  6. Realmente... eu havia feito essa burrada... eu percebi e até corrigi o post anterior, acho que no momento que eu tava corrigindo você tava respondendo aqui.. hehehehe! Agora resumindo a coisa... eu fiz uma consulta simples... select * from fee_itens order by ite_codigo DESC limit 50000 e depois SELECT * from fee_itens WHERE ite_md5 = UNHEX( MD5( ite_unico ) ) order by ite_codigo DESC limit 50000... e o mais incrível é que com a execução das funções MD5() e UNHEX() na cláusula WHERE a segunda consulta foi alguns milésimos de segundos mais rápida que a primeira que não tinha nada no WHERE... Eu achei que levaria um tempo razoável! Show de bola!!!!
  7. Olha só... criei um campo binário da forma que foi comentado aqui usando todo o campo: ALTER TABLE `fee_itens` ADD `ite_md5` BINARY( 16 ) NULL; E em seguida atribui os valores a ele, usando como base o campo que estava sendo usado como campo único: update fee_itens set ite_md5 = unhex( md5(ite_unico) ); Finalmente rodei uma query para checar se os valores batem: SELECT ite_unico, ite_md5, UNHEX( MD5( ite_unico ) ) AS conf_md5 FROM fee_itens ORDER BY ite_codigo DESC LIMIT 5 Bateu certinho e já notei que é rapidinho...
  8. Quanto aos testes vou fazer um tabelão com uns 20 milhões de registros e fazer alguns testes e quando tiver pronto eu compartilho o resultado aqui!
  9. Saquei... e quanto a usar completo (16) ou (8) vai interferir tanto na performance? Ou seria só forçar o aumento desnecessário de espaço em disco (campo + índice)? fiz uns select benchmark no mysql agora com um hash completo e com a metade e o resultado foi praticamente o mesmo: SELECT BENCHMARK(100000000, 'lorem ipsum dolor sit amet' = BINARY 'd9c5690031866d8b5b7171ed390cadfd'); - 2.07s SELECT BENCHMARK(100000000, 'lorem ipsum dolor sit amet' = BINARY 'd9c5690031866d8b'); - 2.06s Fiz outras comparações também e o resultado foi interessante... SELECT BENCHMARK(100000000, 'lorem ipsum dolor sit amet' LIKE '%LOREM IPSUM DOLOR SIT AMET%'); - 7.57s SELECT BENCHMARK(100000000, 'lorem ipsum dolor sit amet' LIKE 'LOREM IPSUM DOLOR SIT AMET%'); - 3.77s SELECT BENCHMARK(100000000, 'lorem ipsum dolor sit amet' = 'LOREM IPSUM DOLOR SIT AMET'); - 3.06s
  10. Entendi... no caso devo criar a coluna pro hash em binário ou da forma que você orientou? create table t ( feed_unico_campo text, feed_unico_valor text, md5_hash binary(8) md5_hash binary_2(8) CHARACTER SET binary, # OU assim md5_hash binary_3(8) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, # OU assim ? ); Outra dúvida é quanto ao tipo de indice para essa coluna... crio um INDEX normal ou tem mais alguma opção a ser cnofigurada?
  11. Cara... Como fico preso na estrutura de cada fonte RSS, tive que definir um varchar(255) pra comportar tanto campos numéricas quanto links ou texto puro, nunca passou de 255. Sua idéia é interessante... Essa questão de colisão não é tão importante, pois se ocorrer a colisão a consequência é um ou outro item não ser gravado e isso não é tão importante! Só não entendi bem a aplicação de fazer essa hash... é pra melhorar a performance na hora de fazer um SELECT nele?
  12. Tenho uma tabela relativamente grande onde gravo informações que pego de diversos feeds RSS... atualmente essa tabela possui um pouco mais de 2.000.000 de registros. Já achei muitos casos de feeds é usam campos diferenciados como registro único (um link, um código, um texto)... então eu tenho 2 campos na tabela para refletir essa realidade(feed_unico_campo e feed_unico_valor)... assim faço a checagem dos feeds novos que chegam para verificar se já existe ocorrência no banco de dados... até aí tranquilo. O problema é que isso gera um certo gargalo nas consultas ao banco de dados fazer consultas do tipo LIKE "String de texto longo%" sacrifica e muito a performance... ainda mais com zilhões de novas ocorrências chegando a toda hora. Mudei então para indices FULLTEXT adicionando um indice para o campo feed_unico_valor. E parece ser uma boa saída, mas estou com uma dúvida cruel: Melhor seria fazer UMA CONSULTA ÚNICA, passando todos os campos únicos como parâmetro para a pesquisa FULLTEXT; ou percorrer os itens UM A UM e consultando se existem no banco para só então inserir o item que não for encontrado? Detalhe: Uso PHP/PDO para a manipulação desses feeds.
  13. Pessoal, estou carregando várias URLS usando curl_multi... e roda bem, exceto alguns endereços do portal terra, que hora funciona, ora não funciona... (retornando http_code 400)... Estou sem saber onde é o problema, se meu PHP que não está enviando as requisições corretamente ou se é no destino mesmo... Até assusta... ora funciona ora não... inclusive tentei em 2 locais diferentes do terra e inexplicavelmente, ora os 2 dão certo, ora um, ora outro, e em muitas vezes os 2 falham, retornando code 400... As fontes que estou testando... http://rss.terra.com...0,,EI306,00.xml http://rss.terra.com...,EI13419,00.xml E o mais estranho é que se pegar e jogar no browser nunca dá falha... Será que existe algum parâmetro do CURL ou alguma configuração específica pra prevenir esse tipo de comportamento?
  14. Pessoal, consegui resolver... segue a solução... <?php // Se o arquivo está sendo acessado diretamente, faz o redirecionamento para a página que faz o // include dessa... assim ela nunca será acessada diretamente.... somente se for incluida em outra... $aFiles = get_included_files(); if($aFiles[0] == __FILE__){ header("Location: pagina_que_vai_me_incluir.php"); exit; } ?>
  15. Como saber se uma página foi acessada pPessoal, Existe algum meio de saber se um arquivo foi acessado diretamente pela url dele OU se foi acessado por meio de outra página que fez um include desse arquivo? Exemplo: Uso um único index.php com 3 áreas: Topo, conteúdo e rodapé. O menu fica no topo, e a carga das páginas se dá dentro da div CONTEUDO, onde tenho uma tag <? include('pagina_especifica.php'); ?>... O que eu preciso é verificar se a página pagina_especifica.php por exemplo foi acessada diretamente pelo browser ou por um link... ou se a mesma foi "incluida" no index... e mais ainda, se tiver como, preciso então saber o nome da página que a incluiu, pra ter certeza que foi pela index.php... Algo assim... elo browser/link
  16. Amigo, show de bola!!!! Deu certinho agora....
  17. Boa tarde galera!!!!! Preciso montar uma função pra verificar se existe um registro numa tabela, porém, preciso passar por parâmetros o seguinte: Nome da tabela, nome do campo de chave primária e o valor da chave primária... Então montar a consulta e retornar se existe ou não. Assim eu consigo consultar a existencia de um registro em qualquer tabela que tenha chave primária inteira. -- ------------------------------------------------------------------------------------------------------------ -- FUNCAO: validarRegistro -- DESCRIÇÃO: Valida se existe um registro específico em uma tabela específica, através da chave primária -- IMPORTANTE: A chave Primária tem que ser do tipo INT -- ------------------------------------------------------------------------------------------------------------ CREATE FUNCTION validarRegistro( v_tabela VARCHAR(255), v_nomePK VARCHAR(255), v_valorPK INT) RETURNS BOOL BEGIN RETURN ( (SELECT COUNT(*) FROM v_tabela WHERE v_nomePK = v_valorPK) = 0 ); END;$ quando rodo a função, recebo a mensagem abaixo: SELECT validarRegistro('usuario', 'codUsuario', 101); O que eu quero é que seja usado o NOME DA TABELA que está no parâmetro e não o próprio parâmetro. Como fazer isso?
  18. Bom dia! Galera, alguém sabe de alguma maneira de pegar as propriedades de um swf ou flv usando PHP? Tais como quantos fps, total de frames, etc...
  19. Que pena... :( Eu tenho uma aplicação que eu precisaria disso... pois passo ofertas de preços, customizadas pelos próprios clientes..,. nas ofertas já tá pronto pra mostrar imagens, mas os clientes querem subir animações também... e preciso validar o tempo dessa animação para que tenha o TEMPO EXATO da exibição da oferta a qual essa animação pertence. Pensei em colocar um campo para que o próprio cliente informasse o tempo, mas não seria tão preciso quanto pegar essa informação direto do arquivo SWF ou FLV.
  20. Bom dia a todos! alguém conhece algum script em php ou alguma técnica pra se conseguir pegar o tempo de uma animação em .SWF ou .FLV ? Grato
  21. Salve galera... É o seguinte... estou desenvolvendo uma aplicação para mostrar conteúdo multimídia em terminais de tv... tipo aqueles que a gente vê por aí em aeroportos, shoppings, rodoviárias, feiras, etc... Os terminais apresentam conteúdo de vídeo, animações em flash e conteúdo variante como textos de notícias de fontes RSS, ofertas de preços, etc. Então surge a necessidade de criar campos customizados, conforme a necessidade do anunciante, e preciso prever isso nas tabelas e estou com uma dúvida muito forte. Abaixo segue um diagrama que representa a idéia... ainda que "grosseiramente", sendo só pra ilustrar pois tem muita coisa pra ser implementada nesse diagrama... terminal - Tabela com a programação de horário e dias pra ligar/desligar o terminal programacao - Cada "programa" ( vinheta, video, animação, oferta de preços, notícias, etc) que é reproduzido nesse terminal conteudo - Quando um programa utilizar dados customizados, como oferta de preços, uma notícia externa, etc... são gravados através dessa tabela - tipoCampo - enum com a lista de formatos disponíveis - tamanhoCampo - Só é usado se for do tipo "Texto Simples", que seria o mesmo que VARCHAR(1-255). - valorCampo - Aqui é armazenado o valor, que é convertido para o seu tipo de origem quando precisar ser usado. Bem, do lado do programador, mais simples que isso não tem como... hehehee... Mas a minha dúvida é sobre a questão de espaço armazenado e também de performance, pois cada campo TEXT gerará 2 bytes a mais para armazenar, além de ficar fazendo conversão de tipo. O que é melhor: Fazer dessa forma, ou criar tabelas para armazenar os tipos específicos, conforme mostro nesse outro diagrama? Lembrando que ainda podem existir outros tipos de dados para serem usados aqui com situações específicas que, como datas, horas, upload de fotos ou videos, etc... o que aumentaria o numero de tabelas com conteúdo específico
  22. Salve galera! Existe alguma maneira de carregar uma página que está em outro site e mostrá-la dentro de uma DIV usando AJAX? A idéia aqui é ter um menu apontando pra diversos sites, mas em vez de ir para os sites, mostrá-los numa div sem dar refresh na página.
  23. Ola, fazia tempos que não acessava o forum... valeu pela dica!
×
×
  • Criar Novo...