Partilhar via


Pesquisando uma tabela de roteamento distribuída

Antes que um aplicativo possa pesquisar a DRT (Tabela de Roteamento Distribuído), uma consulta de pesquisa deve ser criada. O valor de chave desejado é especificado pelo aplicativo quando a função DrtStartSearch é chamada. O comportamento da pesquisa é determinado pelas informações especificadas pelo aplicativo na estrutura DRT_SEARCH_INFO.

Normalmente, um evento de aplicativo é sinalizado quando a pesquisa descobre resultados e outro na conclusão da pesquisa. No entanto, se fIterative estiver definido em DRT_SEARCH_INFO, um evento de aplicativo pode ser sinalizado quando o contato é feito com cada nó ao longo do caminho.

Depois que um evento é sinalizado, o aplicativo chama a função DrtGetSearchResult para os resultados. Se o código retornado for S_OK, os resultados serão apontados na estrutura DRT_SEARCH_RESULT retornada pela API. Os resultados retornados se enquadram no intervalo de valores especificado em DRT_SEARCH_INFO. No caso de a pesquisa não encontrar correspondências, apenas o valor DRT_E_NO_MORE será devolvido na conclusão dos retornos de resultados.

As informações a seguir detalham como os membros contidos no DRT_SEARCH_INFO permitem que um aplicativo dite especificamente o comportamento de pesquisa da infraestrutura DRT:

fPermitirCorrespondênciaInstânciaAtual

Por padrão, os resultados da pesquisa DRT incluem apenas correspondências encontradas fora do nó local. A configuração fAllowCurrentInstanceMatch especifica que os resultados da pesquisa também incluem correspondências encontradas na instância DRT local.

cMaxPontos finais

A quantidade e o intervalo dos resultados retornados pela pesquisa são especificados pelo aplicativo com os cMaxEndpoints (quantidade) e os pMinimumKey e pMaximumKey (intervalo) e referenciados por DRT_SEARCH_INFO.

Quando cMaxEndpoints = 1, a infraestrutura DRT procura uma chave, retornando uma única correspondência dentro do intervalo especificado pelos valores de pMinimumKey e pMaximumKey em DRT_SEARCH_INFO. Esta correspondência pode ser uma correspondência exata ou a correspondência mais próxima dentro do intervalo. Se uma correspondência não for encontrada, DRT_E_NO_MORE será retornada.

Se cMaxEndpoints > 1, a infraestrutura DRT retornará correspondências dentro do intervalo até o valor de cMaxEndpoints. As correspondências retornadas podem conter uma correspondência exata ou os resultados de correspondência mais próximos dentro do intervalo. Além disso, se pMinimumKey e pMaximumKey estiverem definidas com o mesmo valor, uma pesquisa será realizada apenas para esse valor, retornando DRT_E_NO_MORE se ele não for encontrado.

fAnyMatchInRange

O membro fAnyMatchInRange indica se a pesquisa será interrompida depois que a primeira correspondência estiver localizada dentro do intervalo especificado ou se a pesquisa continuará para a correspondência mais próxima da chave especificada na APIDrtStartSearch do. Quando fAnyMatchInRange é definido, a pesquisa é realizada com cMaxEndpoints = 1, independentemente do valor especificado de cMaxEndpoints em DRT_SEARCH_INFO.

fIterativo

O membro fIterative especifica se cada nó contatado pela infraestrutura DRT durante a pesquisa terá os dados de chave/ponto final associados a ele disponibilizados para o aplicativo via DRT_SEARCH_RESULT. Ao definir fIterative como TRUE, o valor de cMaxEndpoints = 1 será forçado. Quando fIterative é definido como TRUE numa consulta ao DRT, o aplicativo é acionado novamente após o contacto com cada nó ou "salto". Cada resultado de salto contém uma chave que indica qual nó o DRT pesquisará em seguida. Um resultado de salto é retornado via DrtGetSearchResult como um resultado DRT_MATCH_INTERMEDIATE.

pMinimumKey e pMaximumKey

Os membros pMinimumKey e pMaximumKey podem ser usados para procurar chaves dentro de um intervalo. Se o membro fAnyMatchInRange estiver definido como FALSE, o DRT retornará a(s) chave(s) mais próxima(s) do alvo da pesquisa (especificado usando o argumento pKey passado na função DrtStartSearch) que caem dentro do intervalo. Observe que o argumento pKey passado para DrtStartSearch deve estar dentro do intervalo definido por pMinimumKey e pMaximumKey. Para procurar uma chave precisa, defina pMinimumKey, pMaximumKey e pKey com o mesmo valor.

Registo e Deregisto de Chaves

Sobre tabelas de roteamento distribuídas

Referência da API da Tabela de Roteamento Distribuído