Implementando Web Services para grandes ou lenta Conjuntos de DadosIn contexto de uma aplicação Ajax e REST, serviços da Web que expõem grandes conjuntos de dados ou conjuntos lento dados merecem atenção especial devido à exigência de que a solução resultante seja o mais eficiente possível. Este artigo abrange os seguintes aspectos da implementação do serviço aweb que expõe grandes conjuntos de dados ou conjuntos lenta de dados: • Entender o contexto do que um grande de dados ou conjunto de aplicações está lento • Destacar a arquitetura geral da solução • Determinar como uma aplicação deve ser projetada em termos de codificação
Problema Você quer criar serviços Web que expõem grandes conjuntos de dados ou conjuntos de dados que levam muito tempo para gerar. Teoria Muitos desenvolvedores experiência a necessidade de mostrar um grande número de registros para os usuários finais. A primeira reação da maioria dos desenvolvedores a essa questão é: "Não, ele não pode ser feito." No entanto, quando você olha para o Google e Yahoo! motores de busca, você verá que isso pode ser feito. Este artigo se propõe a resolver um problema tão especial, como exibir 64.000 registros no navegador aweb. Note-se que a solução para um grande conjunto de dados ou de dados é lenta conjunto de serviços da Web é muito especializado e não deve ser usado como uma solução geral. A complexidade da solução torna impraticável para uso em cada aplicação. Serviços da Web que são um único pedido e resposta são simples e não necessitam de gestão de Estado ou de callbacks. Em solução deste artigo, estadual e retornos são obrigatórios. Eficiência é um dos requisitos desta solução, mas lembre-se que a eficiência é relativa, ea solução será tão eficiente quanto possível para o contexto. Como você sabe, em qualquer motor de busca, você digita um termo ou frase em uma caixa de texto, clique no botão Search, e as respectivas páginas HTML são devolvidos para a expressão ou frase que você digitou dentro Se o motor de busca apresenta resultados úteis não é o ponto desta solução. O que é relevante é o fato de que uma pesquisa foi executada, que resultou em uma página HTML exibindo 10 resultados por página dos cerca de 175.000.000 resultados disponíveis. O resultado da pesquisa página HTML parece ser bom, e que a busca foi apenas 0,13 segundos. A velocidade de pesquisa deve surpreender os usuários, mas tendem a ser cínico. Estou certo de que a 0,13 segundo não é uma mentira, mas a questão é, o que faz a medida de 0,13 segundos? Está a 0,13 segundo uma medida de ter encontrado os termos de busca em 175.000.000 páginas? Duvido, porque se fosse esse o caso, significaria que cada página foi encontrada em 0,00000000074286 segundo, ou em cada página foi encontrada em dois ciclos de clock de uma CPU 3GHz. Estas estatísticas devem fazer alguém desconfiar dos resultados encontrados, mesmo que processos paralelos estavam envolvidos. Portanto, se as estatísticas são muito aproximados ao ponto de ser irrelevante, o que está realmente acontecendo? O motor de busca é resolver o problema dos dados de grandes dimensões ou lenta fixa usando uma ilusão. A ilusão é que o motor de busca apresenta-lhe as informações de forma rápida, mesmo que você está vendo apenas uma fatia muito pequena do total de informação. Não é difícil para um motor de busca para procurar seus índices de retorno e 10 resultados de um conjunto enorme de dados. Como os resultados são gerados 10 e retornou como uma única página HTML, os lotes segundo e terceiro resultados estão sendo gerados. Gostaria de perigo até mesmo um palpite que o Yahoo! gera uma lista de resultados de 100 links found. Eu acho que é provavelmente um resultado conjunto de 100 elementos, porque, no fundo da página há 10 links de páginas de resultados de pesquisa. Multiplique 10 e 10, e você recebe 100 ligações. O que é muito interessante é como Yahoo! permite recuperar o resultado. Considere a URL gerada pela consulta: http://search.yahoo.com/search?p=really+big+search & fr = FP-tab-web-t500 & toggle = 1 & cop = & ei = UTF-8 Baseado em sua experiência com as URLs REST discutido nos artigos anteriores, você deve ser capaz de adivinhar o que os parâmetros de consulta do indivíduo. Antes de me explicar o que eu acho que os parâmetros de consulta fazer, vamos olhar para a URL que aparece depois de clicar no link da página segundo (indicado por "2" na parte inferior dos resultados): http://search.yahoo.com/search?p=really+big+search & toggle = 1 & ei = UTF-8 & fr = FP-tab-web-t500 & b = 11 A partir deste URL, parece que a pesquisa / URL é uma raiz de uma perspectiva REST. Então, isso significa que a execução do URL / pesquisa retornará todos os resultados da pesquisa? Em teoria, sim, mas eu duvido que ele realmente iria, porque isso significaria retornar uma lista em ordem alfabética de todas as páginas HTML indexados no Yahoo!, Que é completamente inviável a partir de uma perspectiva de implementação. Acho Yahoo! está usando uma abordagem REST ful, porque se você clicar no link Imagens no topo da página dos resultados, a URL é gerada a seguinte: http://images.search.yahoo.com/search/images?p=really+big + busca & toggle = 1 & ei = UTF-8 & fr = FP-tab-web-t500 & FR2 = tab-web Observe que o URL é Images images / search /, o que significa que as imagens pertencem ao URL de pesquisa, mas representam um tipo mais específico de pesquisa . Em uma abordagem de serviços web REST, esta estratégia representa a nomenclatura ideal. Também notar como os parâmetros de consulta para uma busca geral e baseada em imagem são idênticos. Isto ilustra novamente uma boa engenharia REST Web Services. Os parâmetros do URL representam uma forma de filtrar a imensa quantidade de resultados de pesquisa. O primeiro método envolve a filtragem na consulta em si, que é definido pelo parâmetro de consulta p. Essa é uma maneira muito inteligente de definir um conjunto de resultados, porque isso significa que várias pessoas procurando os mesmos termos verá a mesma opinião. De uma perspectiva de pesquisa, o Yahoo! não faz distinção entre os usuários. Uma vez que várias pessoas podem ver os mesmos resultados, uma forma de identificar que os resultados são a ser devolvido deve ser identificado. O parâmetro b consulta serve esse efeito na medida em que define o índice inicial dos resultados da pesquisa. Se você fosse duvidoso que o Yahoo! mantém um servidor de conjunto de resultados lado, o parâmetro b consulta deve convencê-lo disso. A consulta parâmetro b é um valor numérico que na verdade diz: "Por favor, devolva os links disponíveis na lista de índices 11, 12, 13, 14, 15, 16, 17, 18, 19 e 20 do resultado de pesquisa conjunto muito grande pesquisa. "O Yahoo! exemplo ilustra que um componente chave para a apresentação de grandes conjuntos de dados é criar uma ilusão. A ilusão neste caso é apresentar um subconjunto dos resultados, com o restante dos resultados apresentados, quando forem solicitadas. Portanto, se um resultado da consulta SQL em 64.000 registros, a ilusão é apresentar o top 100 ou mais resultados, embora no fundo a preparação de outro lote de 100 ou mais resultados. A seguinte lista apresenta os atributos de uma situação em que você iria aplicar a técnicas definidas neste artigo: • O conjunto de dados possa ser interpretado como infinito. Mesmo que haja limites teóricos, a partir de uma perspectiva prática o conjunto de dados parece infinita. Por exemplo, qualquer algoritmo matemático que gera uma série de dados, como todos os quadrados do números de 1 a 1 milhão, poderia ser interpretado como infinito. Outro exemplo é um mecanismo de pesquisa ligados a um enorme banco de dados que gera uma enorme resultado definido quando o banco de dados é consultado. • O conjunto de dados não está disponível no momento do pedido. Neste contexto, você faz um pedido que desencadeia uma seqüência de eventos. Como os eventos requerem algum tempo de processamento, os resultados não estão disponíveis imediatamente. Por exemplo, no caso de um mashup motor de busca, a entrega dos resultados dos motores de busca individual requer uma pequena quantidade de tempo. Outro exemplo é o cálculo de ganhos e perdas de uma carteira de investimento. • Os dados são de um único bloco de muitos elementos, e os blocos devem ser considerados como uma única parte contígua de dados. SoluçãoA arquitetura de dados de grandes dimensões ou conjuntos lento requer um componente de servidor que suporta multithreading ou multiprocesses, e um componente de cliente que inclui um mecanismo em duas canal de comunicação A arquitetura é um exemplo de aplicação ticker histórico. O cliente tem duas interações: HTTP POST e HTTP GET para o mesmo URL, / serviços / histórico / *. A nível técnico, as duas interações são distintos, mas eles geralmente trabalham em conjunto. A interação POST é usado para enviar dados, ea interação GET é usado para recuperar dados. Tecnicamente, um Web Service REST implica tal interação: para iniciar uma tarefa, uma solicitação POST é enviada, e as respostas para a tarefa são recuperados através de um GET. Dois canais são usados para que o cliente pode receber várias respostas para uma tarefa de execução. Esta capacidade é uma necessidade quando você está trabalhando com grandes conjuntos de dados ou lenta. Você não pode executar uma tarefa e esperar a resposta completa, embora usando XMLHttpRequest no modo assíncrono não interromper o funcionamento do browser. Você quer recuperar os dados caso a caso porque você quer mostrar os resultados assim que elas estiverem disponíveis. No lado do servidor, dois componentes implementar as interações: TaskManager e ResultCache. TaskManager responde a todas as solicitações POST e executa a tarefa apropriada. As tarefas individuais, então, gerar os seus resultados e adicioná-los à ResultCache. Quando o cliente executa um GET, os dados de ResultCache é recuperado. TaskManager só é responsável pela execução das tarefas e gerir a referência ao ResultCache. TaskManager não é responsável por saber os detalhes dos resultados gerados ou a natureza da tarefa que é executada. Gerenciando a solicitação do cliente / Ciclo de respostaPor enquanto, vamos ignorar a URLs e no lado do servidor, e foco no cliente. Podemos definir as URLs mais surpreendentes e no lado do servidor mais interessante, mas se as funções do lado do cliente de forma ineficiente, tudo o resto não importa. Definir o que o cliente pode e não pode fazer vai um longo caminho para definir as URLs de servidor e código do servidor. Primeiro, vamos olhar um exemplo de mapeamento ao longo das linhas de http://map.search.ch ou http://maps . google.com. Você vai ver a lógica para fazer a rolagem do mapa suave, como o mapa é composto de um número de partes da imagem 1. O cliente navega para o URL e carrega a página HTML que contém a porta de vista. 2. A página HTML envia um post pedindo para carregar quatro pedaços do mapa. 3. TaskManager começa uma tarefa que recupera as peças mapa solicitado. A tarefa acrescenta os pedaços de mapa para ResultCache. 4. A página HTML executa um ciclo periódico que pergunta se as peças mapa solicitadas foram adicionadas ao ResultCache. Se as peças que foram acrescentadas, então eles são recuperados e apresentados. Neste momento, há uma desconexão, como o identificador das peças mapa não foi definida. Quando o carregamento da página HTML, que mapeiam as peças são carregados? Você carrega o padrão? E se você carregar a configuração padrão, o que exatamente é o padrão? Ao carregar os pedaços do mapa, você precisará primeiro determinar a forma de identificar um mapa piece.Defining as restrições do cliente O exemplo de mapeamento mostra o que você precisa fazer para gerenciar grandes conjuntos de dados ou infinito, apesar de todas as aplicações que trabalham com grande ou infinito conjuntos de dados tem os seguintes atributos comum no lado do cliente: • A referência de todos os dados podem ser definidos. No caso da aplicação de mapeamento, isto significa atribuir coordenadas a todos os pedaços do mapa. Você quer que os dados sejam prefixados com uma referência para que o cliente pode ir para os dados utilizando uma abordagem URL calculado. Isto não significa que os dados disponíveis na URL, como no lado do servidor pode ainda não ter gerado os dados. As referências podem ser timestamps, coordenadas, ou um contador incremental, mas devem possuir a habilidade de ser determinado antes de os dados serem carregados. • O cliente deverá fazer referência a exibição de dados do porto e os dados que provavelmente será visto. Os dados que provavelmente será visto é o olhar de frente os dados que são carregados. O algoritmo para determinar os dados que está indo provavelmente ser visto é completamente dependente da aplicação ea interface de usuário do aplicativo. Por exemplo, a maioria dos aplicativos de mapeamento têm uma seta para mover o mapa para cima e para baixo por uma parte do mapa. Se uma interface de usuário foram para oferecer uma seta chamada "Jump 100 Unidades", então a seleção que está indo provavelmente ser visto incluiria o imediato, bem como as "Jump 100 Unidades pedaços" do mapa. A idéia por trás dos dados que está indo provavelmente ser visto é deixar o cliente ou servidor pré-carga da informação, que faz a iteração dos dados parece ser um processo tranquilo. No nosso caso, estamos construindo um aplicativo de visualização de stock ticker. O cliente terá a capacidade de navegar em uma lista de cotações de ações e depois ver o histórico dos tickers. Nos instantâneos, os dados históricos não é ilustrado, porque o foco é sobre a navegação e manipulação de dados. Navegação Lista constrói ou destrói a funcionalidade ou o desempenho do cliente. No caso da aplicação de mapeamento, os usuários navegar usando o mouse para selecionar e arrastar peças mapa. No caso do exemplo do relógio, os usuários a navegar usando as setas ao mover o mouse sobre um ticker. Sob nenhuma circunstância você deve usar uma caixa de listagem ou uma caixa de combinação para a navegação esses elementos não podem conter uma grande quantidade de dados, de modo a navegar com eles pode ser uma experiência desagradável. Slashdot www.slashdot.org () conseguiu resolver o problema dos conjuntos de dados ser muito grande, usando técnicas de preferência pessoal. Povos Algo sobre Slashdot é o fato de que eles podem ler uma história e, em seguida, enviar sua opinião sobre o tipo de assunto como um clube de artigo para geeks Internet. Histórias controversas Slashdot pode reunir mais de 300 lançamentos, dos quais alguns são lixo, mas outros que são interessantes. Slashdot foi o primeiro site com sucesso a empregar uma técnica chamada metamoderation. Metamoderation é quando os leitores são seus próprios árbitros e determinar se a postagem é interessante. Boas Novas, que são engraçadas ou interessante ter um ranking mais elevado do que aqueles que são asneiras. Usando suas preferências pessoais, os leitores podem escolher o nível em que eles querem ler mensagens em outras palavras, eles podem optar por ler apenas os lançamentos de mais interessante se eles gostam. É um sistema que funciona. Os metadados é um índice para a navegação que é criado na página HTML. um artigo submetido por Sonja Lande Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre. Importante: Este artigo "Aplicação de Web Services para grandes conjuntos de dados ou Slow" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.
|
|||||
| Online: 299 users browsing the articles directory |
|
|