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 / 329590
Accepted
mjaggard
mjaggard
Asked: 2023-07-24 20:16:15 +0800 CST2023-07-24 20:16:15 +0800 CST 2023-07-24 20:16:15 +0800 CST

Posso forçar um BLOB a ser armazenado externamente no MySQL?

  • 772

Eu tenho uma tabela que, por razões históricas, contém alguns conteúdos HTML e PDF. Ele também contém nomes de arquivo/URLs caso o conteúdo HTML e PDF tenha sido gravado no armazenamento.

Atualmente, o aplicativo gravará o PDF e o HTML na tabela, depois outro processo os lerá, os gravará no disco e os colocará NULLnos campos de conteúdo HTML e PDF.

Meu banco de dados está ficando muito grande e custando mais do que eu esperava e estou me perguntando se esse armazenamento não está sendo liberado corretamente. Eu tenho duas perguntas:

  1. Posso validar esta teoria? Atualmente, estou olhando information_schema.TABLES.DATA_LENGTHe INDEX_LENGTHvendo o espaço sendo usado pela mesa, mas não tenho certeza se entendi completamente isso e o DATA_FREEvalor.
  2. Se for a gravação desses BLOBs médios/pequenos que está causando o problema, posso forçá-los para armazenamento externo com base no fato de que eles serão configurados posteriormente NULL?
mysql
  • 2 2 respostas
  • 25 Views

2 respostas

  • Voted
  1. Best Answer
    Rick James
    2023-07-26T09:06:32+08:002023-07-26T09:06:32+08:00

    Resposta curta: o MySQL não tem controle sobre a localização do BLOB, mas sua solução é boa.

    Resposta longa:

    Não, embora o InnoDB coloque big BLOBsem um lugar diferente, você não tem controle sobre esse mecanismo de armazenamento "off-record". E você deve continuar a usar INSERT, SELECT, etc para acessá-los.

    O problema é que um tablespace InnoDB só aumenta de tamanho; ele nunca encolhe, exceto por OPTIMIZE TABLE(ou ações equivalentes específicas).

    Como já mencionado, OPTIMIZE TABLEdará espaço de volta ao SO, caso a tabela tenha sido criada com innodb_file_per_table = ON. Mas pode demorar muito. Digo "pode" porque ele só precisa copiar o que sobrou, mais alguns bytes para os NULLs que você deixou para trás. Portanto, pode não demorar muito depois que todos os blobs forem removidos.

    Em geral, (como você supôs), é melhor jogar pdfs e htmls no disco e deixar que outros htmls os busquem por meio de <img src=...>coisas semelhantes.

    E, sim, o "outro lugar" poderia facilmente ser algum outro servidor (mais barato?); <img>não se importa em qual máquina está alcançando.

    • 1
  2. Rohit Gupta
    2023-07-25T04:29:19+08:002023-07-25T04:29:19+08:00

    A redução do armazenamento csn pode ser feita usando o comando otimizar. O banco de dados geralmente diminuirá o espaço de armazenamento em tempo real porque terá um impacto adverso na velocidade de um sistema ativo

    A tabela MySQL OPTIMIZE ajuda você a otimizar o espaço de armazenamento da tabela. Ele reorganiza os dados de armazenamento de forma a aumentar a eficiência do Input Output e reduzir o espaço de armazenamento. Para executar esta instrução, você precisa dos privilégios SELECT e INSERT. A seguir está a sintaxe da instrução MySQL OPTIMIZE TABLE -

    Do ponto de tutoriais

    O armazenamento de blobs no banco de dados é feito pelo seu aplicativo. É uma escolha feita pelo desenvolvedor. Você pode alterar seu programa para armazená-los em arquivos separados

    • -1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

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