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 / 93560
Accepted
Nelson
Nelson
Asked: 2015-02-24 05:54:11 +0800 CST2015-02-24 05:54:11 +0800 CST 2015-02-24 05:54:11 +0800 CST

Como reduzir o tamanho do banco de dados com campos BLOB

  • 772

Eu tenho um banco de dados que é usado para armazenar impressões digitais. Na minha concepção, este deveria ser um banco de dados pequeno, mas o problema é que o desenvolvedor original provavelmente estava tropeçando no peiote e decidiu que seria uma ótima ideia armazenar as impressões digitais em campos BLOB.

Graças a esse truque de mágica, o banco de dados agora tem 3 GB de tamanho e o front-end está travando o tempo todo, não é de admirar, já que um simples SELECT TOP (1000) leva cerca de um minuto do MSSMS.

Então fico com uma dúvida de como proceder. Existe uma maneira de reduzir o tamanho da tabela que contém as fotos? Ou talvez outra alternativa para essa loucura.

Cumprimentos.

sql-server blob
  • 2 2 respostas
  • 2366 Views

2 respostas

  • Voted
  1. wBob
    2015-02-24T14:40:13+08:002015-02-24T14:40:13+08:00

    3GB não é realmente um monte de dados. Meu laptop tem 16 GB de memória, nosso datawarehouse é de 3 TB e seria um warehouse bastante pequeno. O tamanho máximo do banco de dados de acordo com aqui é 524.272 TB!? Portanto, acho que o desempenho aqui é mais sobre o kit em que você está, além do design de índice e consulta.

    Você poderia refatorar como Russell sugeriu. No entanto, você também pode manter o design original de uma tabela com indexação apropriada, seja um índice de cobertura não clusterizado ou mesmo indexação de texto completo para oferecer suporte às consultas do tipo 'pesquisa de registro' - isso não deve incluir o blob. Em seguida, obtenha apenas as imagens de impressões digitais de forma individual, quando solicitado pelo aplicativo. Em outras palavras, não inclua a coluna blob SELECTsonde ela não for explicitamente necessária. Isso terá o mesmo efeito que dividir os dados em duas tabelas sem redesenhar. Não tente obter todas as impressões digitais de uma só vez!

    Informe-nos mais sobre a especificação do kit em que você está, a versão do SQL Server em execução, a tabela DDL (incluindo índices) e o tipo de consulta que o aplicativo normalmente executa.

    • 3
  2. Best Answer
    RLF
    2015-02-24T08:34:13+08:002015-02-24T08:34:13+08:00

    Existem algumas abordagens para lidar com esse problema. Aqui estão três opções:

    1. Crie uma FingerprintBLOBtabela (talvez em um banco de dados diferente) para os BLOBs de impressões digitais e remova essa coluna do arquivo OriginalTable. Dessa forma quando você SELECT TOP(1000) * FROM OriginalTablenão precisar ler os BLOBs da FingerprintBLOBtabela. Isso deve reduzir bastante os requisitos de E/S.

      Se você deseja gerenciar todo o armazenamento do SQL Server, essa seria a escolha a ser feita. Ele mantém as impressões digitais no banco de dados, mas separa as questões de I/O para consultas gerais.

    2. Armazene cada FingerprintBLOB como um arquivo separado em uma estrutura de diretório no disco. Mantenha os BLOBs no \\Server\Share\Path\Filenamearquivo OriginalTable.

      Se você deseja manter o espaço do banco de dados menor e prefere armazenar no sistema de arquivos, escolha esta abordagem. Você pode implementar isso por conta própria, o que significa que precisará gerenciar os dois backups separados: banco de dados e estrutura de arquivos.

    3. Ou, uma opção híbrida é que você pode usar o SQL Server FILESTREAM, que pode ser usado para gravar arquivos em discos que não sejam de banco de dados, mas ainda fornecer um único processo de BACKUP e RESTORE do SQL Server que faça backup de ambos os tipos de dados.

    Qualquer abordagem seria melhor realizada criando novas tabelas ou uma tabela e estruturas de arquivo. Em seguida, migre os dados para os locais apropriados. Depois de migrar os dados, você pode ajustar os nomes dos objetos, se desejar.

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

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