Utilizar Globbing e Proveniência de Coleção no Data Federation
Avalie esse Tutorial
Um padrão comum para usuários do MongoDB que executam serviços multilocatários é modelar seus dados dividindo seus diferentes clientes em diferentes bancos de dados. Esta é uma excelente estratégia para manter os dados de seus vários clientes separados uns dos outros, além de ser útil para escalonamento no futuro. Mas uma desvantagem dessa estratégia é que você pode acabar tendo dificuldades para obter uma visão holística dos dados de todos os seus clientes. Há muitas maneiras de mitigar esse desafio, e uma das principais é copiar e transformar seus dados em outra solução de armazenamento. No entanto, isso pode levar a alguns compromissos infelizes. Por exemplo, agora você está pagando mais para armazenar seus dados duas vezes. Agora você precisa gerenciar o processo de cópia e transformação, que pode se tornar oneroso à medida que você adiciona mais clientes. E por último, e talvez o mais importante, agora você está observando um estado atrasado de seus dados.
Para resolver esses desafios exatos, estamos muito satisfeitos em anunciar dois recursos que transformarão completamente a forma como você usa os dados do cluster e a facilidade com que pode remodelá-los. O primeiro recurso é chamado de Proveniência. Essa funcionalidade permite que você peça ao Data Federation que injete campos em seus documentos durante o tempo de query que indicam de onde eles vêm. Por exemplo, você pode adicionar a collection de origem no Atlas cluster ao federar entre clusters ou pode adicionar o caminho do seu bucket AWS S3 onde os dados estão sendo lidos. O melhor de tudo é que agora você também pode consultar esses campos para obter dados apenas da fonte de sua escolha!
A outra funcionalidade que estamos adicionando é um pouco detalhada e a chamamos de "globbing. " Para aqueles que estão familiarizados com o Atlas Data Federation, provavelmente conhece o nosso "wildcard collections. " Essa funcionalidade permite gerar nomes de collection com base nas collections existentes em seus Atlas clusters subjacentes ou com base em seções de caminhos para seus arquivos em S3. Esse é um recurso útil para evitar a necessidade de definir explicitamente tudo em sua configuração de armazenamento. “Globbing” é um pouco semelhante, exceto que, em vez de gerar dinamicamente novas collection para cada collection em seu cluster, ele mesclará dinamicamente as collection para oferecer uma visão “global” de seus dados automaticamente. Para ajudar a ilustrar isso, vamos orientá-lo por um exemplo.
Imagine que você esteja administrando uma agencia de viagens de sucesso no MongoDB. Por vários motivos, você optou por armazenar os dados de seus clientes em diferentes bancos de dados com base em sua localização. (Talvez você queira fragmentar com base nisso e tenha bancos de dados diferentes em regiões diferentes para fins de conformidade.)
Isso funcionou bem, mas agora você gostaria de consultar seus dados com base nessas informações e obter uma visão holística de seus dados em todas as regiões em tempo real (sem afetar suas cargas de trabalho operacionais). Então, vamos discutir como resolver esse desafio!
Para acompanhar este tutorial por conta própria, você precisará do seguinte:
- Experiência com a Federação de Dados Atlas.
- Um Atlas cluster com os dados de amostra nele.
Veja como os dados são modelados em meu cluster (os dados em seu cluster podem ser distribuídos entre as coleções da maneira que seu aplicativo exigir):
- Cluster: MongoTravelServices
- Banco de dados: Irlanda
- Collection: user_feedback (8658 documentos)
- Collection: Passageiro
- Collection: Flights
- Database: israel
- Collection: user_feedback (8658 documentos)
- Collection: Passageiro
- Collection: Flights
- Database: usa
- Collection: user_feedback (8660 documentos)
- Collection: Passageiro
- Collection: Flights
O objetivo aqui é consolidar esses dados em um banco de dados e, em seguida, fazer com que cada uma das collection de feedback do usuário, passageiros e voos represente os dados armazenados nas collection de cada banco de dados no cluster. Por fim, também queremos poder consultar o nome "database" como se fosse parte de nossos documentos.
- A primeira coisa que você precisa fazer é navegar até a aba “Data Federation” no lado esquerdo do seu Atlas Dashboard e clicar em “set up manually” no menu suspenso "criar novo banco de dados federado" no canto superior direito da interface do usuário.
- Depois, para este exemplo, editaremos manualmente a configuração de armazenamento, pois esses recursos ainda não estão disponíveis no editor de UI.
1 { 2 "databases": [ 3 { 4 "name": "GlobalVirtualDB", 5 "collections": [ 6 { 7 "name": "user_feedback", 8 "dataSources": [ 9 { 10 "collection": "user_feedback", 11 "databaseRegex": ".*", // This syntax triggers the globbing or combination of each collection named user_feedback in each database of the MongoTravelServices cluster. 12 "provenanceFieldName": "_provenance_data", // The name of the field where provenance data will be added. 13 "storeName": "MongoTravelServices" 14 } 15 ] 16 } 17 ], 18 "views": [] 19 } 20 ], 21 "stores": [ 22 { 23 "clusterName": "MongoTravelServices", 24 "name": "MongoTravelServices", 25 "projectId": "5d9b6aba014b768e8241d442", 26 "provider": "atlas", 27 "readPreference": { 28 "mode": "secondary", 29 "tagSets": [] 30 } 31 } 32 ] 33 }
Agora, ao se conectar, você verá:
1 AtlasDataFederation GlobalVirtualDB> show dbs 2 GlobalVirtualDB 0 B 3 AtlasDataFederation GlobalVirtualDB> use GlobalVirtualDB 4 already on db GlobalVirtualDB 5 AtlasDataFederation GlobalVirtualDB> show tables 6 user_feedback 7 AtlasDataFederation GlobalVirtualDB>
E uma contagem simples resulta na contagem de todas as três collections agrupadas:
1 AtlasDataFederation GlobalVirtualDB> db.user_feedback.countDocuments() 2 25976 3 AtlasDataFederation GlobalVirtualDB>
25976 é a soma de 8660 documentos de feedback dos EUA, 8658 de Israel e 8658 da Irlanda.
E, por último, posso fazer query dos metadados de procedência usando o campo “provenancedata.databaseName:
1 AtlasDataFederation GlobalVirtualDB> db.user_feedback.findOne({"_provenance_data.databaseName": "usa"}) 2 { 3 _id: ObjectId("63a471e1bb988608b5740f65"), 4 'id': 21037, 5 'Gender': 'Female', 6 'Customer Type': 'Loyal Customer', 7 'Age': 44, 8 'Type of Travel': 'Business travel', 9 'Class': 'Business', 10 … 11 'Cleanliness': 1, 12 'Departure Delay in Minutes': 50, 13 'Arrival Delay in Minutes': 55, 14 'satisfaction': 'satisfied', 15 '_provenance_data': { 16 'provider': 'atlas', 17 'clusterName': 'MongoTravelServices', 18 'databaseName': 'usa', 19 'collectionName': 'user_feedback' 20 } 21 } 22 AtlasDataFederation GlobalVirtualDB>
Então, o que fizemos e o que aprendemos?
- Vimos como é rápido e fácil criar um banco de dados federado no MongoDB Atlas.
- Aprendo como você pode combinar e remodelar facilmente dados de seus clusters subjacentes do Atlas dentro do Atlas Data Federation com o Collection Globling. Agora, você pode consultar facilmente uma coleção user_feedback e fazer com que ela consulte dados nas coleções user_feedback em cada banco de dados.
- Vimos como adicionar dados de procedência aos nossos documentos e consultá-los.
- O globbing de collection é um novo recurso que se aplica às fontes de cluster Atlas e permite a manipulação dinâmica de collections de fontes semelhante a “wildcard collections.”
- A proveniência permite incluir metadados adicionais com seus documentos. Você pode indicar que o Atlas Data Federation deve incluir atributos adicionais, como cluster de origem, banco de dados, collection, o caminho de origem no S3 e muito mais.
- Atualmente, isso só é suportado no editor JSON do Data Federation ou por meio da definição da configuração de armazenamento no shell, não no editor de configuração de armazenamento visual.
- Isso é particularmente importante para implementações de vários inquilinos feitas no MongoDB.
Para saber mais sobre oAtlas Data Federation e se ele seria a solução certa para você, confira nossa documentação e tutoriais ou comece hojemesmo.