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 / 736
Accepted
eiefai
eiefai
Asked: 2011-01-21 09:18:53 +0800 CST2011-01-21 09:18:53 +0800 CST 2011-01-21 09:18:53 +0800 CST

É melhor armazenar imagens em um BLOB ou apenas a URL? [duplicado]

  • 772
Essa pergunta já tem respostas aqui :
Fechado há 11 anos .

Possível duplicado:
Arquivos - no banco de dados ou não?

Eu queria saber se há algum bom motivo para ainda usar campos blob em um banco de dados. Alguns anos atrás eu trabalhei com um banco de dados com um monte de imagens nele, o banco de dados estava muito lento e eu não conseguia ver nenhuma boa razão para manter as imagens dentro do banco de dados, então eu peguei as imagens e armazenei os nomes dos arquivos em vez de.

Essa foi uma jogada inteligente? O que você faria no meu lugar?

database-tuning architecture
  • 7 7 respostas
  • 44549 Views

7 respostas

  • Voted
  1. Best Answer
    Eric Humphrey - lotsahelp
    2011-01-21T11:17:26+08:002011-01-21T11:17:26+08:00

    Como você pode ver pelas outras respostas, este é um grande "Depende". Alguns outros fatores podem ser se você está pagando pela hospedagem, eles cobram mais pelo armazenamento de arquivos ou armazenamento de banco de dados. O armazenamento de arquivos geralmente é mais barato, especialmente para serviços em nuvem.

    Se você for auto-hospedado e estiver usando o SQL Server, a próxima versão, codinome Denali, estenderá o FILESTREAM para permitir acesso via TSQL e sistema de arquivos. Também garantirá que eles permaneçam em sincronia. Você pode acessar, atualizar, excluir de qualquer lado e manterá tudo organizado.

    Faça sua pesquisa e descubra o que é importante para você e escolha a direção com base nessa escolha.

    • 30
  2. Gaius
    2011-01-21T09:40:35+08:002011-01-21T09:40:35+08:00

    A razão para usar BLOBs é simplesmente a capacidade de gerenciamento - você tem exatamente um método para fazer backup e restaurar o banco de dados, você pode facilmente fazer backups incrementais, há risco zero de a imagem e seus metadados armazenados em tabelas de banco de dados ficarem fora de sincronia , você também tem uma interface de programação para executar consultas ou carregar/salvar imagens, portanto, você não precisa fornecer acesso ao sistema de arquivos de clientes remotos e sabe que os mesmos GRANTs serão aplicados às imagens e seus dados associados. Além disso, você tem um método de gerenciamento de armazenamento (por exemplo, no Oracle, você pode colocar tudo no ASM e usar o Oracle como seu LVM para tudo).

    Outra aplicação é misturar dados relacionais com objetos serializados (um BLOB pode ser qualquer binário, não precisa ser imagens). Ou você pode executar uma consulta em relação a dados e bytes xy no BLOB, que pode ser um cabeçalho de arquivo, por exemplo. As aplicações são de fato infinitas.

    Se o acesso a um BLOB foi mais lento do que o acesso ao seu sistema de arquivos, é altamente provável que seu banco de dados tenha sido configurado incorretamente.

    • 17
  3. Joe
    2011-01-21T09:48:10+08:002011-01-21T09:48:10+08:00

    Eu não uso blobs - principalmente de uma perspectiva de backup e restauração, pois não quero que os dados do blob diminuam meus backups.

    Eu não armazeno um URL completo, no entanto ... Eu apenas armazeno o caminho do arquivo abaixo de um determinado ponto e construo o caminho, pois tenho mais de uma maneira de pessoas e programas acessarem meus arquivos (FTP, HTTP, diretório local, diretórios montados em NFS).

    ... claro, eu provavelmente lido com mais e maiores imagens do que a maioria das pessoas ... um dos meus conjuntos de dados recebe cerca de 700 GB de imagens (compactadas) por dia. Mas mesmo as miniaturas dessas imagens, ainda guardo externamente.

    • 13
  4. Wyatt Barnett
    2011-01-21T16:08:19+08:002011-01-21T16:08:19+08:00

    Eu sou um grande fã de armazenar a cópia de "referência" da imagem no banco de dados - do ponto de vista de gerenciamento/recuperação de desastres, essa é realmente a maneira de voar.

    Agora, você ainda pode fazer muitas coisas para servir a imagem fora do sistema de arquivos para a maioria dos aplicativos, então você não está colocando muita pressão no próprio servidor de banco de dados para fazer coisas que ele realmente não quer fazer.

    • 8
  5. j.p.
    2011-01-22T02:31:33+08:002011-01-22T02:31:33+08:00

    Se você está trabalhando com linux, armazenar as imagens no sistema de arquivos e não no banco de dados tem um desempenho significativamente melhor, veja este trecho do livro Advanced Rails de Brad Ediger .

    • 8
  6. phred
    2011-08-17T20:51:11+08:002011-08-17T20:51:11+08:00

    Eu não sou muito fã de armazenar imagens no banco de dados. Em um aplicativo pequeno com poucos usuários, parece uma solução fácil, mas à medida que você começa a escalar, torna as coisas mais difíceis.

    Minha preferência é começar armazenando as imagens em uma pasta no servidor web, mas manter o caminho em uma configuração de fácil acesso para que, quando eu precisar, possa movê-las rapidamente para seu próprio servidor de imagens dedicado e otimizado. Mais tarde, talvez queira movê-los para outro lugar (pense S3 ou Akamai) da mesma maneira. Tudo isso é muito mais complicado se eu tiver que alterar o código que esperava lê-los do banco de dados.

    • 5
  7. marcio
    2011-09-27T07:08:04+08:002011-09-27T07:08:04+08:00

    Essa foi uma jogada inteligente?

    Se foi uma jogada inteligente ou não, depende do seu caso específico:

    Se a localização do arquivo estiver afetando diretamente qualquer estrutura de url ou se você estiver armazenando endereços completos de arquivos no banco de dados (ruim), posso dizer que foi uma má jogada, pois você terá problemas caso alguém mova ou renomeie algum diretório.

    Mas como Mas se seu aplicativo for construído de uma maneira que você simplesmente precise apontar o diretório de arquivos e a lógica de acesso ao arquivo for dinâmica, você fez uma jogada inteligente pelos seguintes motivos:

    • Com o armazenamento em banco de dados, se houver necessidade de atender muitas imagens por solicitação, você aumentará o tempo de resposta de sua aplicação, pois os arquivos serão enviados de forma síncrona para a rede. Além disso, você adicionará um pouco mais de processamento ao seu servidor.

    • O armazenamento de arquivos geralmente é mais barato que o armazenamento de banco de dados.

    • Com o armazenamento de arquivos (a menos que haja restrições de acesso às imagens: apenas um determinado usuário pode acessar um determinado grupo de imagens), não há necessidade de nenhum processamento para acessar imagens ou qualquer outro tipo de arquivo.

    • Com o armazenamento em banco de dados não é possível acessar seus arquivos via FTP (bem óbvio, mas é bom lembrar).

    • O armazenamento de arquivos de banco de dados diminuirá a velocidade e/ou desordenará seus backups periódicos de banco de dados.

    O que você faria no meu lugar?

    Eu manteria essa decisão a menos que um fator dominante contrário aparecesse.

    Espero que ajude.

    • 4

relate perguntas

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

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

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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