Configurar partição de índice
Nesta página
Importante
A opção numPartitions
está disponível como um recurso de visualização.
Para indexação, o Atlas Search considera cada documento como um único objeto de índice quando não está aninhado dentro de outro documento. Para documentos incorporados, o Atlas Search conta cada documento incorporado como objetos adicionais de índice, dependendo do número de níveis de aninhamento. O Atlas Search para de replicar alterações para índices maiores que 2.100.000.000 objetos de índice.
Se você implantou o Atlas Search em nós de pesquisa separados, pode aumentar o número de objetos de índice do Atlas Search particionando seus objetos de índice em subíndices. Por padrão, o Atlas Search suporta uma partição por fragmento. Cada partição suporta até 2 bilhões de objetos de índice. Você pode criar até sessenta e quatro (64
) subíndices utilizando a opção numPartitions
.
Quando você configura partições para o seu índice, o Atlas Search distribui automaticamente os objetos do índice entre os subíndices de maneira otimizada. Quando você executa consultas em uma coleção com sub-índices, o Atlas Search distribui as consultas para todos os sub-índices e coleta os resultados da pesquisa e os metadados para classificar, mesclar e retornar os resultados.
Recomendamos o particionamento do seu índice quando:
Seus objetos de índice atingem 50% do limite total.
O número de documentos em sua coleção chega a dois bilhões.
Seu índice está no estado
STALE
porque o Atlas Search interrompeu a replicação.
Quando você configura subíndices ou modifica o número de subíndices, o Atlas Search aciona uma reconstrução do seu índice.
Se você tiver mais de um subíndice no seu cluster, não poderá remover todos os nós de pesquisa e migrar para um modelo de implantação onde os processos mongod
e mongot
são executados no mesmo nó.
Sintaxe
{ "name": "<index-name>", "analyzer": "<analyzer-for-index>", "searchAnalyzer": "<analyzer-for-query>", "mappings": { "dynamic": <boolean>, "fields": { <field-definition> } }, "numPartitions": <integer>, ... }
Valores suportados
A opção Atlas Search numPartitions
aceita os seguintes valores:
1
- para criar um único índice, sem subíndices adicionais. Este é o valor padrão.2
- para criar até dois subíndices.4
- para criar até quatro sub-índices.8
- criar até oito sub-índices.16
- para criar até dezesseis sub-índices.32
- para criar até trinta e dois subíndices.64
- criar até sessenta e quatro sub-índices.
Exemplo
O exemplo de índice a seguir utiliza a coleção sample_mflix.movies
para demonstrar como configurar até 4
subíndices para os dados na coleção. Você pode usar o Editor Visual ou o EditorJSON na IU do Atlas e outros clientes compatíveis para criar o índice.
➤ Use o menu suspenso Selecione a linguagem para definir o cliente do exemplo nesta seção.
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \ --data ' { "collectionName": "movies", "database": "sample_mflix", "name": "partitioned_index", "type": "search", "definition": { "analyzer": "lucene.standard", "mappings": { "dynamic": true, }, "numPartitions": 4, "searchAnalyzer": "lucene.standard" } }'
Crie um arquivo chamado
indexDef.json
semelhante ao seguinte:{ "collectionName": "movies", "database": "sample_mflix", "definition": { "mappings": { "dynamic": true }, }, "name": "partitioned_index", "numPartitions": 4 } Execute o seguinte comando para criar o índice.
atlas deployments search indexes create --file indexDef.json
No Atlas, VáGo para a Clusters página do seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Inicie a configuração do seu índice.
Faça as seguintes seleções na página e clique em Next.
Search Type | Selecione o tipo de índice Atlas Search. |
Index Name and Data Source | Especifique as seguintes informações:
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
Especifique a definição do índice.
Clique em Refine Your Index.
Alterne Index Partitions para habilitá-lo.
Selecione
4
no menu suspenso Number of partitions e clique em Save Changes.
Substitua a definição de índice padrão pelo seguinte:
{ "mappings": { "dynamic": true }, "numPartitions": 4 } Clique em Next.
Verifique o status.
O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo Status lê Build in Progress. Quando o índice terminar de construir, o campo Status lê Active.
Observação
Collections maiores demoram mais tempo para indexar. Você receberá uma notificação por e-mail quando seu índice terminar a criação.
db.movies.createSearchIndex( "search-index", { mappings: { dynamic: true }, "numPartitions": 4 } )
using MongoDB.Bson; using MongoDB.Driver; // connect to your Atlas deployment var uri = "<connection-string>"; var client = new MongoClient(uri); var db = client.GetDatabase("sample_mflix"); var collection = db.GetCollection<BsonDocument>("movies"); // define your Atlas Search index var index = new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true } } }, { "numPartitions", 4 } }; var result = collection.SearchIndexes.CreateOne(index, "partitioned_index"); Console.WriteLine(result);
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; public class CreateIndex { public static void main(String[] args) { // connect to your Atlas cluster String uri = "<connection-string>"; try (MongoClient mongoClient = MongoClients.create(uri)) { // set namespace MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); Document index = new Document() .append("mappings", new Document() .append("dynamic", true) ) .append("numPartitions", 4); collection.createSearchIndex("partitioned_index", index); } } }
import { MongoClient } from "mongodb"; // connect to your Atlas deployment const uri = "<connection-string>"; const client = new MongoClient(uri); async function run() { try { const database = client.db("sample_mflix"); const collection = database.collection("movies"); // define your Atlas Search index const index = { name: "partitioned_index", definition: { /* search index definition fields */ "mappings": { "dynamic": true }, "numPartitions": 4 } } // run the helper method const result = await collection.createSearchIndex(index); console.log(result); } finally { await client.close(); } } run().catch(console.dir);
from pymongo.mongo_client import MongoClient from pymongo.operations import SearchIndexModel def create_index(): # Connect to your Atlas deployment uri = "<connectionString>" client = MongoClient(uri) # Access your database and collection database = client["sample_mflix"] collection = database["movies"] # Create your index model, then create the search index search_index_model = SearchIndexModel( definition={ "mappings": { "dynamic": True }, "numPartitions": 4 }, name="partitioned_index", ) result = collection.create_search_index(model=search_index_model) print(result)