Importante
Você está procurando uma solução de banco de dados para cenários de alta escala com um SLA (contrato de nível de serviço de disponibilidade) de 99,999%, dimensionamento automático instantâneo e failover automático em várias regiões? Considere o Azure Cosmos DB para NoSQL.
Você deseja implementar um grafo OLAP (processamento analítico online) ou migrar um aplicativo Apache Gremlin existente? Considere o Graph do Microsoft Fabric.
Consultas do Gremlin
Como avaliar a eficiência das consultas do Gremlin
A etapa de versão prévia do executionProfile() pode ser usada para fornecer uma análise do plano de execução de consulta. Esta etapa precisa ser adicionada ao final de qualquer consulta do Gremlin. Por exemplo, você pode adicionar a etapa ao final de uma consultag.V('example').out('relationship') resultando em g.V('example').out('relationship').executionProfile().
A saída do perfil mostra quanto tempo é gasto obtendo os objetos de vértice, os objetos de borda e o tamanho do conjunto de dados de trabalho. Esta saída está relacionada às medições de custo padrão para consultas no Azure Cosmos DB.
Outras perguntas frequentes
Como as RU/s são cobradas ao executar consultas em um banco de dados do gráfico?
Todos os objetos de grafo, vértices e bordas aparecem como documentos JSON no back-end. Uma consulta Gremlin pode modificar um ou muitos objetos de grafo por vez e o custo depende diretamente dos objetos e bordas processados pela consulta. Esse processo funciona da mesma maneira que funciona para todas as outras APIs do Azure Cosmos DB.
A cobrança de RU depende do conjunto de dados de trabalho do percurso, não do conjunto de resultados. Considere um exemplo em que uma consulta obtém um único vértice como resultado, mas precisa percorrer vários outros objetos ao longo do caminho. Neste exemplo, o custo é baseado em todos os objetos de grafo envolvidos na computação do vértice de resultado.
Qual é a escala máxima que um banco de dados de grafo pode ter no Azure Cosmos DB para Apache Gremlin?
O Azure Cosmos DB usa o particionamento horizontal para dimensionar automaticamente o armazenamento e a taxa de transferência, conforme necessário. O número de partições em um contêiner determina sua taxa de transferência máxima e capacidade de armazenamento. Para obter um desempenho ideal em escala, siga as diretrizes específicas para a API para contêineres do Gremlin. Para saber mais sobre particionamento e práticas recomendadas, consulte o artigo [particionamento no Azure Cosmos DB.
Para o desenvolvimento em C#/.NET, posso usar o pacote Microsoft.Azure.Graphs ou o Gremlin.NET?
O Azure Cosmos DB para Apache Gremlin usa os drivers de software livre como os principais conectores para o serviço. Portanto, a opção recomendada é usar drivers compatíveis com o Apache.
Como me proteger contra ataques de injeção usando os drivers do Gremlin?
A maioria dos drivers nativos do Apache Gremlin permite que a opção forneça um dicionário de parâmetros para execução de consulta. Essa funcionalidade tem suporte em ambas as bibliotecas Gremlin.Net e gremlin (Node.js).
Por que estou vendo o "Erro de compilação da consulta do Gremlin: não é possível encontrar nenhum método"?
O Azure Cosmos DB para Apache Gremlin dá suporte a um subconjunto da área de superfície do Gremlin. Para obter detalhes sobre as etapas com suporte, consulte o artigo Suporte do Gremlin.
Para resolver esse erro, reescreva suas consultas do Gremlin usando as etapas com suporte, pois o Azure Cosmos DB fornece todas as funcionalidades essenciais do Gremlin.
Por que estou vendo o erro "WebSocketException: o servidor retornou o código de status '200', mas o código de status '101' era esperado"?
Esse erro provavelmente é gerado quando o ponto de extremidade incorreto é usado.
O ponto de extremidade que gera esse erro tem o seguinte padrão: https://<account-name>.documents.azure.com:443/. Esse ponto de extremidade é, na verdade, o ponto de extremidade de documentos do banco de dados do grafo.
O endpoint correto a ser usado é o endpoint Gremlin, que tem o seguinte formato: https://<account-name>.gremlin.cosmosdb.azure.com:443/.
Por que estou vendo o erro "RequestRateIsTooLarge"?
Esse erro significa que as Unidades de Solicitação alocadas por segundo não são suficientes para atender a consulta. O erro é visto quando você executa uma consulta que obtém todos os vértices:
g.V()
Esta consulta tenta recuperar todos os vértices do gráfico. Portanto, o custo dessa consulta é igual a pelo menos o número de vértices em termos de RUs (unidades de solicitação). A configuração de RU/s (unidades de solicitação por segundo) deve ser ajustada para resolver essa consulta.
Por que minhas conexões de driver do Gremlin são descartadas com o tempo?
Uma conexão do Gremlin é feita por meio de uma conexão WebSocket. Embora as conexões WebSocket não tenham um tempo de vida específico, o Azure Cosmos DB para Apache Gremlin encerrará as conexões ociosas após 30 minutos de inatividade.
Por que não é possível usar chamadas de API fluentes nos drivers Gremlin nativos?
O Azure Cosmos DB para Apache Gremlin ainda não dá suporte a chamadas de API fluentes. As chamadas à API fluente dependem de um recurso de formatação interno chamado suporte de bytecode, que o Azure Cosmos DB para Apache Gremlin atualmente não fornece. Por esse motivo, o driver de Gremlin-JavaScript mais recente também não tem suporte.
Como encontro o custo da unidade de solicitação para obter uma consulta?
Você pode encontrar a cobrança de unidades de solicitação (RU) em uma consulta do Azure Cosmos DB for Apache Gremlin usando um dos vários métodos:
Use o portal do Azure
Entre no portal do Azure.
Crie uma nova conta do Azure Cosmos DB para Apache Gremlin e semente-a com dados ou selecione uma conta existente que já contenha dados.
Vá para o painel do Data Explorer e selecione o contêiner no qual você deseja trabalhar.
Insira uma consulta válida e selecione Executar Consulta Gremlin.
Selecione Estatísticas de Consulta para exibir o encargo de solicitação real para a solicitação executada.
Usar o SDK (kit de desenvolvimento de software) do .NET
Execute uma consulta para obter o resultado como um objeto do tipo
ResultSet<>:ResultSet<dynamic> results = client.SubmitAsync<dynamic>("g.V().count()").Result;Obtenha o custo da solicitação dos resultados usando a matriz
StatusAttributese o indexadorx-ms-request-charge:double requestCharge = (double)results.StatusAttributes["x-ms-request-charge"];
Usar o SDK do Java
Execute uma consulta para obter o resultado como um objeto do tipo
ResultSet:ResultSet results = client.submit("g.V().count()");Obtenha a taxa de requisição a partir dos resultados usando o método
statusAttributese a chavex-ms-request-charge:Map<String, Object> attributes = results.statusAttributes(); Double requestCharge = (Double) attributes.get("x-ms-request-charge");
A taxa da solicitação está disponível sob a chave x-ms-request-charge nos cabeçalhos de resposta retornados pela API para Gremlin.