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 / 77270
Accepted
stUrb
stUrb
Asked: 2014-09-23 05:29:07 +0800 CST2014-09-23 05:29:07 +0800 CST 2014-09-23 05:29:07 +0800 CST

Armazenando informações não muito voláteis no banco de dados com cache ou mongodb

  • 772

Para um novo projeto no qual estou trabalhando agora, eu estava em dúvida sobre qual banco de dados/sistema de armazenamento usar para informações específicas que não mudam com tanta frequência.

Temos, por exemplo, alguns perfis de empresas que terão apenas gravações incidentais quando coisas como o horário de funcionamento mudarem. Por outro lado, eles têm muita capacidade de leitura; a cada carregamento de página, as informações devem ser carregadas. Armazená-lo no sistema de arquivos como documentos simples resulta em muito IO; Usando isso como ponto de partida, eu estava procurando algum tipo de solução na memória.

Normalmente eu armazeno essas informações em um banco de dados Postgres, sem nenhum cache na camada de aplicativo. É claro que eu poderia adicionar uma camada de cache em redis ou memcached para produzir leituras de E/S menores do disco e lidar com atualizações do cache na camada de aplicativo na atualização das informações

Uma outra solução é usar o MongoDB para armazenar os 'documentos'. Mas não sei como o mongodb lida com a leitura/gravação. Por exemplo, a cada recuperação do documento, ele verifica o sistema de arquivos ou exibe o documento do cache/RAM? (Li em algum lugar que o mongodb mantém muita RAM disponível para si)

Alguém pode lançar alguma luz sobre isto?

postgresql mongodb
  • 1 1 respostas
  • 165 Views

1 respostas

  • Voted
  1. Best Answer
    Markus W Mahlberg
    2014-10-03T06:30:18+08:002014-10-03T06:30:18+08:00

    A resposta como sempre é: depende ;)

    Com um pouco de simplificação: Índices e documentos recentemente lidos (e escritos) são mantidos na RAM até que a RAM seja necessária para outra coisa. Portanto, se seus dados são lidos da RAM ou do arquivo, depende muito se a RAM no (s) nó (s) MongoDb é suficiente para manter o índice e pelo menos parte de seus dados (chamados de conjunto de trabalho) na RAM. É seguro dizer que a única coisa que pode substituir ter RAM suficiente em uma instalação do MongoDB é ter mais RAM.

    Portanto, a questão é: quanto é RAM suficiente? E a resposta novamente é: depende. No tamanho do seu banco de dados, no número de documentos em suas coleções, no número de índices que você precisa. Não é fácil descobrir os valores corretos e isso depende muito da situação, mas tentarei fornecer algumas regras práticas.

    1. Sempre que possível, use SSDs. Prefira usar metade da quantidade de RAM e SSDs do que dobrar a quantidade de RAM e HDDs.
    2. Gere uma fração razoável do tamanho de dados esperado (ou use uma fração razoável se você já tiver dados). Os valores podem ser completamente aleatórios, embora seu tamanho deva ser um tanto realista (você raramente tem nomes de empresas com 255 caracteres, por exemplo)
    3. Crie os índices conforme você espera precisar deles. Regra geral: gere um índice para cada campo ou combinação de campos que você espera consultar. Lembre-se de que um campo em um índice composto será usado se você consultar apenas esse campo. Você realmente precisa colocar algum esforço nesta etapa.
    4. Resuma os tamanhos de índice.
    5. Se seu tamanho de índice combinado para os dados de teste exceder sua RAM física, coloque um pouco mais na máquina, pelo menos 1,5 vezes o valor de seus tamanhos de índice combinados.
    6. Execute seus testes de desempenho.

    Embora isso pareça um pouco complicado, pode evitar que você desenvolva (e mantenha!) uma camada inteira em seu aplicativo. Isso se resume facilmente ao longo do tempo.


    Observação para dimensionamento geral: calcule os tamanhos de índice para o conjunto de dados esperado. Multiplique esse valor por 1,5 pelo menos. Prefiro sugerir a multiplicação por >3. Tome isso como seu tamanho de memória. Na verdade, o fator é determinado pelo seu fator de crescimento e limitado pelo ponto ideal em que seu hardware oferece o melhor retorno possível. Se seus requisitos de RAM estiverem excedendo a RAM do seu ponto ideal de hardware, você deve fragmentar seu cluster imediatamente.

    • 1

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

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