Usar os fluxos do Neptune - Amazon Neptune

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar os fluxos do Neptune

Com o atributo de fluxos do Neptune, é possível gerar uma sequência completa de entradas no log de alterações que registram todas as alterações feitas em dados de grafos à medida que elas ocorrem. Para obter uma visão geral desse recurso, consulte Capturar alterações do grafo em tempo real usando os fluxos do Neptune.

Habilitar os fluxos do Neptune

É possível habilitar ou desabilitar os fluxos do Neptune a qualquer momento ao configurar o parâmetro do cluster de banco de dados do neptune_streams. Definir o parâmetro como 1 habilita o Streams e defini-lo como 0 desabilita o Streams.

nota

Depois de alterar o parâmetro de cluster de banco de dados neptune_streams, é necessário reinicializar todas as instâncias de bancos de dados no cluster para que a alteração tenha efeito.

É possível definir o parâmetro do cluster de banco de dados neptune_streams_expiry_days para controlar quantos dias, de um a noventa, esses registros de fluxo permanecem no servidor antes de serem excluídos. O padrão é 7.

Os fluxos do Neptune foram inicialmente introduzidos como um atributo experimental que você habilitou ou desabilitou no modo de laboratório usando o parâmetro neptune_lab_mode de cluster de banco de dados (consulte Modo de laboratório do Neptune). O uso do modo de laboratório para habilitar o Streams está defasado e será desativado no futuro.

Desabilitar os fluxos do Neptune

Você pode desativar os fluxos do Neptune a qualquer momento em que ele estiver em execução.

Para desativar o Streams, atualize o grupo de parâmetros do cluster de banco de dados para que o valor do parâmetro neptune_streams seja definido como 0.

Importante

Assim que o Streams for desativado, você não poderá mais acessar os dados do log de alterações. Leia o que é de seu interesse antes de desativar o Streams.

Chamar a API REST de fluxos do Neptune

Você acessa os fluxos do Neptune usando uma API REST que envia uma solicitação GET HTTP a um dos seguintes endpoints locais:

  • Para um banco de dados gráfico do SPARQL:   https://Neptune-DNS:8182/sparql/stream.

  • Para um banco de dados de grafos do Gremlin ou do openCypher: https://Neptune-DNS:8182/propertygraph/stream ou https://Neptune-DNS:8182/pg/stream.

nota

A partir da versão 1.1.0.0 do mecanismo, o endpoint de fluxos do Gremlin (https://Neptune-DNS:8182/gremlin/stream) está sendo descontinuado, junto com o formato de saída associado (GREMLIN_JSON). Ele ainda é compatível com versões anteriores, mas pode ser removido em versões futuras.

Somente uma operação HTTP GET é permitida.

O Neptune é compatível com a compactação gzip da resposta, desde que a solicitação HTTP inclua um cabeçalho Accept-Encoding que especifique gzip como um formato de compactação aceito (ou seja, "Accept-Encoding: gzip").

Parâmetros
  • limit: longo, opcional. Intervalo: de um a cem mil. Padrão: 10.

    Especifica o número máximo de registros a serem retornados. Há também um limite de tamanho de 10 MB na resposta que não pode ser modificado e que tem precedência sobre o número de registros especificado no parâmetro limit. A resposta incluirá um registro de violação de limite se o limite de 10 MB tiver sido atingido.

  • iteratorType: string, opcional.

    Esse parâmetro pode ter um dos valores a seguir:

    • AT_SEQUENCE_NUMBER(padrão): indica que a leitura deve começar a partir do número de sequência de eventos especificado em conjunto pelos parâmetros commitNum e opNum.

    • AFTER_SEQUENCE_NUMBER: indica que a leitura deve começar logo após o número de sequência de eventos especificado em conjunto pelos parâmetros commitNum e opNum.

    • TRIM_HORIZON: indica que a leitura deve começar no último registro não truncado no sistema, que é o registro mais antigo não expirado (ainda não excluído) no fluxo de logs de alterações. Esse modo é útil durante a inicialização do aplicativo, quando você não tem um número inicial específico de sequência de eventos.

    • LATEST: indica que a leitura deve começar no registro mais recente no sistema, que é o registro mais recente não expirado (ainda não excluído) no fluxo de logs de alterações. Isso é útil quando há a necessidade de ler registros da parte superior atual dos fluxos para não processar registros antigos, como durante a recuperação de desastres ou uma atualização sem tempo de inatividade. Observe que, nesse modo, há no máximo apenas um registro exibido.

  • commitNum: longo, obrigatório quando iteratorType é AT_SEQUENCE_NUMBER ou AFTER_SEQUENCE_NUMBER.

    O número de confirmação do registro inicial a ser lido no fluxo do log de alterações.

    Este parâmetro é ignorado quando iteratorType é TRIM_HORIZON ou LATEST.

  • opNum: longo, opcional (o padrão é 1).

    O número de sequência da operação dentro da confirmação especificada da qual começar a ler nos dados do fluxo do log de alterações.

As operações que alteram os dados do gráfico do SPARQL geralmente geram apenas um único registro de alteração por operação. No entanto, as operações que alteram dados de gráficos do Gremlin podem gerar vários registros de alterações por operação, como nos exemplos a seguir:

  • INSERT: um vértice do Gremlin pode ter vários rótulos, e um elemento do Gremlin pode ter várias propriedades. Um registro de alteração separado é gerado para cada rótulo e propriedade quando um elemento é inserido.

  • UPDATE: quando uma propriedade de elemento do Gremlin é alterada, dois registros de alteração são gerados: o primeiro para remover o valor anterior e o segundo para inserir o novo valor.

  • DELETE: um registro de alteração separado é gerado para cada propriedade de elemento excluída. Por exemplo, quando uma borda do Gremlin com propriedades é excluída, um registro de alteração é gerado para cada uma das propriedades e, depois disso, é gerado um para a exclusão do rótulo da borda.

    Quando um vértice do Gremlin é excluído, todas as propriedades de borda de entrada e saída são excluídas primeiro, depois os rótulos da borda, depois as propriedades do vértice e, por fim, os rótulos do vértice. Cada uma dessas exclusões gera um registro de alteração.

Formato de resposta da API de fluxos do Neptune

Uma resposta a uma solicitação de API REST dos fluxos do Neptune tem os seguintes campos:

  • lastEventId: identificador da sequência da última alteração na resposta do fluxo. Um ID de evento é composto de dois campos: um commitNum identifica uma transação que alterou o gráfico, e um opNum identifica uma operação específica dentro dessa transação. Isso é mostrado no exemplo a seguir.

    "eventId": { "commitNum": 12, "opNum": 1 }
  • lastTrxTimestamp: a hora em que a confirmação da transação foi solicitada, em milissegundos a partir da época do Unix.

  • format: o formato da serialização dos registros de alterações que estão sendo gerados. Os valores possíveis são PG_JSON para registros de alterações do Gremlin ou do openCypher, NQUADS para registros de alterações do SPARQL.

  • records: uma matriz de registros serializados do fluxo de logs de alterações incluídos na resposta. Cada registro na matriz records contém os seguintes campos:

    • commitTimestamp: a hora em que a confirmação da transação foi solicitada, em milissegundos a partir da época do Unix.

    • eventId: o identificador da sequência da registro de alteração do fluxo.

    • data— O registro serializado de Gremlin, SPARQL ou alteração. OpenCypher Os formatos de serialização de cada registro são descritos em mais detalhes na próxima seção, Formatos de serialização nos fluxos do Neptune.

    • op: a operação que criou a alteração.

    • isLastOp: presente somente se essa operação for a última da transação. Quando presente, está definido como true. Útil para garantir que uma transação inteira seja consumida.

  • totalRecords: o número total de registros na resposta.

Por exemplo, a seguinte resposta exibe dados de alteração do Gremlin para uma transação que contém mais de uma operação:

{ "lastEventId": { "commitNum": 12, "opNum": 1 }, "lastTrxTimestamp": 1560011610678, "format": "PG_JSON", "records": [ { "commitTimestamp": 1560011610678, "eventId": { "commitNum": 1, "opNum": 1 }, "data": { "id": "d2b59bf8-0d0f-218b-f68b-2aa7b0b1904a", "type": "vl", "key": "label", "value": { "value": "vertex", "dataType": "String" } }, "op": "ADD" } ], "totalRecords": 1 }

A resposta a seguir gera dados de alteração do SPARQL para a última operação em uma transação (a operação identificada por EventId(97, 1) na transação número 97).

{ "lastEventId": { "commitNum": 97, "opNum": 1 }, "lastTrxTimestamp": 1561489355102, "format": "NQUADS", "records": [ { "commitTimestamp": 1561489355102, "eventId": { "commitNum": 97, "opNum": 1 }, "data": { "stmt": "<https://test.com/s> <https://test.com/p> <https://test.com/o> .\n" }, "op": "ADD", "isLastOp": true } ], "totalRecords": 1 }

Exceções da API de fluxos do Neptune

A tabela a seguir descreve as exceções dos fluxos do Neptune.

Código de erro Código HTTP OK para repetir? Message

InvalidParameterException

400

Não

Um out-of-range valor ou inválido foi fornecido como parâmetro de entrada.

ExpiredStreamException

400

Não

Todos os registros solicitados excedem a idade máxima permitida e expiraram.

ThrottlingException

500

Sim

A taxa de solicitações excede a taxa de transferência máxima.

StreamRecordsNotFoundException

404

Não

Não foi possível encontrar o recurso solicitado. O fluxo pode não ter sido especificado corretamente.

MemoryLimitExceededException

500

Sim

O processamento da solicitação não foi bem-sucedido devido à falta de memória, mas pode ser repetido quando o servidor estiver menos ocupado.