AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 250689
Accepted
TheDataGuy
TheDataGuy
Asked: 2019-10-10 09:00:22 +0800 CST2019-10-10 09:00:22 +0800 CST 2019-10-10 09:00:22 +0800 CST

MongoDB - Posso criar índice TTL com método de rolagem

  • 772

Estou ficando preso ao arquivar uma enorme quantidade de dados no MongoDB 3.6

Quero excluir 506 milhões de registros em uma coleção. Eu tentei remover usando bulk.remove(), mas isso também é lento. 50 registros estão sendo removidos por segundo.

Mas em algum lugar eu leio, índice TTL e faço intervalo de varredura a cada 1 hora. Então ele vai remover de forma mais rápida.

Mas se eu criar esse índice em primeiro plano, ele bloqueará a coleção. Então estou pensando em fazer com o método de criação de índice de rolamento.

Se fizer assim, digamos, em um conjunto de réplicas de 3 nós, desanexe o node3 e, em seguida, crie o índice. Uma vez criado, ele começará a remover automaticamente os dados. Então, uma vez que eu adiciono o nó de volta ao conjunto de réplicas, talvez o primário faça a exclusão depois de criar o índice, dessa vez ele tentará replicar, na pior das hipóteses, os dados já foram removidos desse nó, então ele vai quebrar a replicação?

mongodb archive
  • 1 1 respostas
  • 1297 Views

1 respostas

  • Voted
  1. Best Answer
    Stennie
    2019-10-10T20:35:44+08:002019-10-10T20:35:44+08:00

    Posso criar um índice TTL com o método de rolagem

    Sim, essa é uma abordagem com suporte para criar índices em conjuntos de réplicas . No entanto, se o seu objetivo é remover com eficiência uma grande quantidade de documentos existentes, há algumas ressalvas a serem observadas, conforme indicado abaixo.

    Eu tentei remover usando bulk.remove(), mas isso também é lento.(50 registros estão sendo removidos por segundo).

    Um índice TTL não acelerará a remoção de documentos se você já tiver um índice que suporte a localização de documentos expirados: o thread TTL ainda precisa encontrar e remover documentos correspondentes, portanto, fará um trabalho semelhante a uma remoção em massa.

    Eu investigaria por que suas operações atuais de remoção em massa são lentas. Por exemplo, certifique-se de ter um índice ideal para localizar documentos para remover e monitorar os recursos do sistema (memória, E/S, rede, ...) para garantir que não haja gargalos óbvios.

    Se você tiver um grande número de documentos prontos para serem removidos quando o índice TTL for criado, isso poderá ter um impacto significativo no desempenho. As consultas de remoção em massa com um índice de suporte permitiriam mais controle sobre o impacto, pois você pode adicionar critérios de consulta para restringir o intervalo de documentos correspondentes a cada exclusão em massa.

    Mas em algum lugar eu li, índice TTL e faço o intervalo de varredura a cada 1 hora. Então ele vai remover de forma mais rápida.

    Esse tempo está incorreto: a tarefa de exclusão de TTL é executada a cada 60 segundos. Com base em um campo de data indexado, o monitor TTL pode expirar documentos após um determinado número de segundos ou expirar documentos em um horário específico .

    Supondo que seus documentos tenham um intervalo de datas de expiração, assim que a remoção inicial de documentos expirados for concluída, um índice TTL poderá excluir documentos em lotes menores, o que terá menos impacto do que uma exclusão em massa pouco frequente.

    Mas se eu criar esse índice em primeiro plano, ele bloqueará a coleção. Então estou pensando em fazer com o método de criação de índice de rolamento.

    Antes do MongoDB 4.2, um índice de primeiro plano construído em uma coleção preenchida bloquearia todas as outras operações no banco de dados que contém essa coleção. Para uma coleção preenchida em um ambiente de produção, você definitivamente desejará usar uma compilação de índice contínuo ou uma compilação de índice em segundo plano. A compilação de índice contínuo garante que apenas um dos membros do conjunto de réplicas esteja criando um índice e permite que uma compilação de índice em primeiro plano seja concluída mais rapidamente, no entanto, essa abordagem inclui algum risco de esse membro se tornar obsoleto durante a execução no modo autônomo.

    O MongoDB 4.2+ usa um processo de compilação de índice otimizado que limita o escopo do bloqueio à coleção afetada e mantém apenas um bloqueio exclusivo no início e no final da compilação do índice. Você ainda pode usar a abordagem de criação de índice contínuo, mas não há mais uma distinção de criação de índice em primeiro plano versus em segundo plano.

    Se fizer assim, digamos, em um conjunto de réplicas de 3 nós, desanexe o node3 e, em seguida, crie o índice. Uma vez criado, ele começará a remover automaticamente os dados.

    O thread de índice TTL em membros do conjunto de réplicas somente exclui documentos quando um membro está no estado primário . As exclusões de documentos são replicadas por meio do oplog para que os secundários sempre tenham um ponto de tempo consistente com o primário atual.

    Se você reiniciar um membro do conjunto de réplicas no modo autônomo, o monitor de coleta de TTL não será iniciado (novamente, para manter o estado secundário consistente).

    • 1

relate perguntas

  • Mongo Map-Reduce ou Sharding?

  • Configurando o Mongo com clustering

  • Diferença entre as chamadas find e findone do MongoDB

  • A fragmentação é eficaz para coleções pequenas?

  • Bons recursos para operar/administrar o MongoDB

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve