O Atlas Data Federation suporta cluster do Atlas como instância do banco de dados federado armazenamentos. Você deve definir mapeamentos na instância do reconhecimento de data center para o cluster do Atlas para executar query nos seus dados.
Importante
As informações na sua configuração de armazenamento são visíveis internamente no MongoDB e armazenadas como dados operacionais para monitorar e melhorar o desempenho do Atlas Data Federation. Portanto, recomendamos que você não use PII em suas configurações.
Exemplo de Configuração para Armazenamento de Dados do Atlas
Exemplo
Considere um cluster do Atlas M10 ou superior denominado myDataCenter contendo dados na collection metrics.hardware . A collection metrics.hardware contém documento JSON com métricas derivadas do hardware em um centro de dados. A configuração a seguir:
Especifica o cluster do Atlas denominado
myDataCenterno projeto especificado como um armazenamento de instância do reconhecimento de data center federado.Mapeia documento da collection
metrics.hardwareno cluster do Atlas para a collectiondataCenter.inventoryna configuração de armazenamento.
{ "stores" : [ { "name" : "atlasClusterStore", "provider" : "atlas", "clusterName" : "myDataCenter", "projectId" : "5e2211c17a3e5a48f5497de3" } ], "databases" : [ { "name" : "dataCenter", "collections" : [ { "name" : "inventory", "dataSources" : [ { "storeName" : "atlasClusterStore", "database" : "metrics", "collection" : "hardware" } ] } ] } ] }
O Atlas Data Federation mapeia todos os documentos na collection metrics.hardware para a collection dataCenter.inventory na configuração de armazenamento.
Os usuários conectados à instância do banco de dados federado podem usar a Linguagem de Query MongoDB e as aggregations permitidas para analisar dados no Atlas cluster por meio da collection dataCenter.inventory . Quando você executa queries, a query primeiro vai para Atlas Data Federation. Portanto, se você executar queries de agregação que são suportadas pelo seu Atlas cluster, mas não pelo Atlas Data Federation, as queries falharão. Para saber mais sobre os comandos com e sem suporte no Data Federation, consulte Comandos do MongoDB com suporte.
Formato de configuração
A configuração da instância do banco de dados federado tem o seguinte formato:
1 { 2 "stores" : [ 3 { 4 "name" : "<string>", 5 "provider": "<string>", 6 "clusterName": "<string>", 7 "projectId": "<string>", 8 "readPreference": { 9 "mode": "<string>", 10 "tagSets": [ 11 [{"name": "<string>", "value": "<string>"},...], 12 ... 13 ], 14 "maxStalenessSeconds": <int> 15 } 16 } 17 ], 18 "databases" : [ 19 { 20 "name" : "<string>", 21 "collections" : [ 22 { 23 "name" : "<string>", 24 "dataSources" : [ 25 { 26 "storeName" : "<string>", 27 "database" : "<string>", 28 "databaseRegex": "<string>", 29 "collection" : "<string>", 30 "collectionRegex" : "<string>", 31 "provenanceFieldName": "<string>" 32 } 33 ] 34 } 35 ], 36 "views" : [ 37 { 38 "name" : "<string>", 39 "source" : "<string>", 40 "pipeline" : "<string>" 41 } 42 ] 43 } 44 ] 45 }
stores- O objeto
storesdefine cada armazenamento de dados associado à instância do banco de dados federado. O armazenamento de instâncias do banco de dados federado captura arquivos em documentos no Atlas cluster. a instância do banco de dados federado só pode acessar armazenamentos de dados definidos no objetostores. databases- O objeto
databasesdefine o mapeamento entre cada instância do banco de dados federado definido emstorese nas collections MongoDB nos bancos de dados.
stores
1 "stores" : [ 2 { 3 "name" : "<string>", 4 "provider" : "<string>", 5 "clusterName" : "<string>", 6 "projectId": "<string>" 7 "readPreference": { 8 "mode": "<string>", 9 "tagSets": [ 10 [{"name": "<string>", "value": "<string>"},...], 11 ... 12 ], 13 "maxStalenessSeconds": <int> 14 }, 15 "readConcern": { 16 "level": "<string>" 17 } 18 } 19 ]
storesArray de objetos em que cada objeto representa um armazenamento de dados a ser associado à instância do banco de dados federado. O armazenamento de instâncias de banco de dados federado captura arquivos em um bucket S3, documentos no Atlas cluster ou arquivos armazenados em URLs acessíveis publicamente. O Atlas Data Federation só pode acessar armazenamentos de dados definidos no objeto
stores.
stores.[n].nameNome de armazenamento da instância do banco de dados federado. O campo
databases.[n].collections.[n].dataSources.[n].storeNamereferencia este valor como parte da configuração de mapeamento.
stores.[n].providerDefine onde os dados são armazenados. O valor deve ser
atlaspara uma collection em um cluster do Atlas.
stores.[n].clusterNameNome do cluster do Atlas no qual a loja é baseada. O cluster deve existir no mesmo projeto que sua instância do banco de dados federado. O campo
sourceno modelo de dados é o nome do cluster do Atlas.
stores.[n].projectIdIdentificador único do projeto que contém o cluster do Atlas no qual a loja é baseada.
stores.[n].readPreferenceOpcional. preferência de leitura de cluster , que descreve como rotear solicitações de leitura para o cluster.
Exemplo
A seguinte configuração
readPreferenceespecifica o modosecondaryeANALYTICSnodeType.{ ... "stores": [ { "provider": "atlas", "clusterName": <CLUSTER_NAME>, "name": <STORE_NAME>, "projectId": <PROJECT_ID>, "readPreference": { "mode": "secondary", "tagSets": [ [ { "name": "nodeType", "value": "ANALYTICS" } ], ... ] } } ] }
stores.[n].readPreference.modeOpcional. modo de preferência de leitura que especifica para qual membro do conjunto de réplicas as solicitações de leitura devem ser roteadas. O valor pode ser um dos seguintes:
primary- para rotear todas as solicitações de leitura para o conjunto de réplicas primárioprimaryPreferred- para rotear todas as solicitações de leitura do conjunto de réplicas primário e para membros secundários somente seprimarynão estiver disponívelsecondary- para rotear todas as solicitações de leitura para os membros secundários do conjunto de réplicassecondaryPreferred- para rotear todas as solicitações de leitura para os membros secundários do conjunto de réplicas e o primary em clusters fragmentados somente se os membrossecondarynão estiverem disponíveisnearest- para rotear todas as solicitações de leitura para um membro aleatório qualificado do conjunto de réplicas, independentemente de esse membro ser primário ou secundário
Se omitido, o padrão é
local.
stores.[n].readPreference.tagSetsOpcional. Arrays de conjuntos de tags ou documentos de especificação de tags que contêm pares de nome e valor para o membro do conjunto de réplicas. Se especificado, o Atlas Data Federation roteia solicitações de leitura para membros ou membros do conjunto de réplicas associados às tags especificadas. Para saber mais, Leia Conjuntos de tags de preferência.
Observação
O Atlas Data Federation não suporta
tagSetspara clusters fragmentados.
stores.[n].readPreference.maxStalenessSecondsOpcional. Atraso máximo de atraso de replicação, ou "obsoleto", para leituras de secundários . Para saber mais sobre
maxStalenessSeconds, consulte Preferência de leitura maxStalenessSeconds.
stores.[n].readConcernOpcional. Propriedades de consistência e isolamento dos dados lidos de um Atlas cluster. Para saber mais, consulte Read concern. O valor para o nível de consistência e disponibilidade pode ser um dos seguintes:
local- para retornar dados de uma instância sem garantia de que os dados tenham sido gravados na maioria dos membros do conjunto de réplicas. Para saber mais, consulte Read concern "local".available- para retornar dados de uma instância sem garantia de que os dados tenham sido gravados na maioria dos membros do conjunto de réplicas. Isso pode retornar documentos órfãos ao ler de uma coleção fragmentada. Para saber mais, consulte Read Concern "available".majority- para retornar dados que foram confirmados pela maioria dos nós no Atlas cluster. Para saber mais, consulte Read Concern "maioria".linearizable- para retornar dados que reflitam todas as gravações bem-sucedidas reconhecidas pela maioria que foram concluídas antes do início da operação de leitura. Para saber mais, consulte Read concern "linearizável".snapshot- para retornar dados comprometidos pela maioria como eles aparecem nos fragmentos a partir de um único ponto específico no passado recente. Para saber mais, consulte Read Concern "snapshot".
databases
1 "databases" : [ 2 { 3 "name" : "<string>", 4 "collections" : [ 5 { 6 "name" : "<string>", 7 "dataSources" : [ 8 { 9 "storeName" : "<string>", 10 "database" : "<string>", 11 "databaseRegex": "<string>", 12 "collection" : "<string>", 13 "collectionRegex" : "<string>", 14 "provenanceFieldName": "<string>" 15 } 16 ] 17 } 18 ] 19 } 20 ]
databasesArray de objetos onde cada objeto representa um banco de dados, suas coleções e, opcionalmente, quaisquer visualizações nas coleções. Cada banco de dados pode ter vários objetos
collectionseviews.
databases.[n].nameNome do reconhecimento de data center para o qual o Atlas Data Federation mapeia os dados contidos no armazém de dados. Você pode gerar reconhecimento de data center dinamicamente especificando
*para o nome do reconhecimento de data center. Bancos de dados gerados dinamicamente:Pode existir ao lado de reconhecimento de data center explicitamente definidos. No entanto, o Atlas Data Federation não gerará dinamicamente reconhecimento de data center com nomes que entrem em conflito com reconhecimento de data center explicitamente definidos na configuração de armazenamento.
Só pode ser de um único cluster do Atlas. O Atlas Data Federation não gerará dinamicamente reconhecimento de data center a partir de vários cluster do Atlas ou outros armazenamentos de dados.
databases.[n].collectionsArray de objetos em que cada objeto representa uma coleção e fontes de dados que mapeiam para um armazenamento de instância do banco de dados federado
stores. Para bancos de dados gerados dinamicamente, você pode definir apenas um objeto de coleção curinga (*) na configuração de armazenamento.
databases.[n].collections.[n].nameNome da coleção para a qual o Atlas Data Federation mapeia os dados contidos em cada
databases.[n].collections.[n].dataSources.[n].storeName. Cada objeto na array representa o mapeamento entre a coleção e um objeto na arraystores.Você pode gerar nomes de coleções dinamicamente, especificando
*para o nome da coleção e omitindo o campocollection. Para gerar dinamicamente coleções curinga (*) para bancos de dados curinga gerados dinamicamente (*), especifique a opçãodatabases.[n].collections.[n].dataSources.[n].storeNamee omita a opçãodatabases.[n].collections.[n].dataSources.[n].database. Observe que, para bancos de dados gerados dinamicamente, você pode definir apenas um objeto de coleção curinga (*) na configuração do armazenamento.Para coleção curinga (
*), você também pode definir padrões regex usando o campodatabases.[n].collections.[n].dataSources.[n].collectionRegexpara filtrar apenas as coleção.
databases.[n].collections.[n].dataSourcesArray de objetos em que cada objeto representa um armazenamento de instância do banco de dados federado
storespara mapear com a coleção.
databases.[n].collections.[n].dataSources.[n].storeNameNome de um armazém de instância do banco de dados federado para mapear para o
<collection>. Deve corresponder aonamede um objeto na arraystores.
databases.[n].collections.[n].dataSources.[n].databaseNome do reconhecimento de data center no cluster do Atlas que contém a collection. Você deve omitir essa configuração para:
Crie uma collection curinga (
*) para um reconhecimento de data center curinga (*).Glob vários reconhecimento de data center.
databases.[n].collections.[n].dataSources.[n].databaseRegexOpcional. Padrão regex a ser usado para reconhecimento de data center globalizados para combinar várias collection. Se você especificar esta opção, a instância do banco de dados federado conterá um único reconhecimento de data center com collection de vários reconhecimento de data center. Para globalizar bancos de dados, você deve fazer o seguinte:
Omitir o campo
database.Especifique um nome válido para o campo
databases.[n].collections.[n].dataSources.[n].collection.
Exemplo
Suponha que você tenha 2 bancos de dados chamados
fooebar, cada um com uma collection chamadaSales. Você pode combinar a coleçãoSalesdefooebarusando a opçãodatabaseRegexna configuração de armazenamento:{ "databases": [ { "name": "Transactions", "collections": [ { "name": "AllSales", "dataSources": [ { "storeName": "atlasStore", "databaseRegex": ".*", "collection": "Sales" } ] } ] } ] } Para o objeto
databasesanterior, o Atlas Data Federation gera o seguinte em sua instância do banco de dados federado:Um reconhecimento de data center virtual chamado
Transactions.Uma collection virtual denominada
AllSalesque contém dados da collection denominadaSalesem todos os reconhecimento de data center cujo nome corresponde ao padrão regex especificado na opçãodatabaseRegex.
Se você especificar esta opção, deverá especificar o nome da collection. Não é possível especificar essa opção para collection de curingas.
databases.[n].collections.[n].dataSources.[n].collectionNome da collection no cluster do Atlas no qual o armazenamento de instância do banco de dados federado é baseado. Você deve omitir essa configuração para:
Criando uma collection curinga (
*).Criando nomes de coleções curingas que correspondem a padrões regex.
Combinar várias collection em um reconhecimento de data center usando padrões regex.
databases.[n].collections.[n].dataSources.[n].collectionRegexCondicional: opcional para collection curinga, necessário para combinar collection em um reconhecimento de data center.
Padrão regex a ser usado para criar a collection curinga (
*) ou para combinar várias collection em um reconhecimento de data center.Para usar padrões regex para nomes de collection curinga (''*''), você deve fazer o seguinte:
Especifique um curinga (
*) como o valor paradatabases.[n].collections.[n].name.Omit
databases.[n].collections.[n].dataSources.[n].collection.
Se você especificar esse campo para gerar collection curinga, a instância de instância do reconhecimento de data center conterá somente collection com nomes que correspondam à expressão regular especificada. As collection na configuração de armazenamento da instância do reconhecimento de data center federado usam seus nomes originais no cluster do Atlas.
Para usar padrões regex para combinar várias coleções em um database, você deve fazer o seguinte:
Especifique um nome que não seja o curinga (
*) como valor paradatabases.[n].collections.[n].name.Omit
databases.[n].collections.[n].dataSources.[n].collection.
Se você especificar este campo para combinar múltiplas coleções, a coleção na instância do banco de dados federado conterá dados de todas as coleções do Atlas com nomes que correspondem à expressão regular especificada. A collection na configuração de armazenamento da instância do banco de dados federado usa o nome que você especifica como valor para
databases.[n].collections.[n].name.Para saber mais sobre a sintaxe regex, consulte Linguagem de programação Go.
databases.[n].collections.[n].dataSources.[n].provenanceFieldNameNome do campo que inclui a procedência dos documentos nos resultados. Se você especificar esta configuração na configuração de armazenamento, o Atlas Data Federation retornará os seguintes campos para cada documento no resultado:
Nome do campoDescriçãoproviderProvedor (
stores.[n].provider) na configuração de armazenamento da instância do banco de dados federadoclusterNameNome do Atlas cluster
stores.[n].clusterName()databaseNameNome do banco de dados (
databases.[n].collections.[n].dataSources.[n].database) no Atlas clustercollectionNameNome da coleção
databases.[n].collections.[n].name()Você não pode definir esta configuração utilizando o Editor Visual na UI do Atlas.
databases.[n].viewsArray de objetos onde cada objeto representa um pipeline de agregação em uma coleção. Para saber mais sobre visualizações, consulte Visualizações.
databases.[n].views.[n].sourceNome da coleção de origem da visualização. Se você deseja criar uma visualização com um estágio $sql, você deve omitir este campo, pois a instrução SQL especificará a collection de origem.
databases.[n].views.[n].pipelineEstágio(s) de pipeline de agregação a serem aplicados à coleção
source. Você também pode criar visualizações usando o estágio $sql.