Pergunta

Os requisitos para o meu sistema de gerenciamento de documentos foram:

  1. Deve ser seguro contra roubo por simples cópia de diretórios, arquivos etc.
  2. Deve ser seguro contra a infecção pelo vírus tradicional (infecção do arquivo físico)
  3. Deve ser rápido para recuperar
  4. O repositório não deve ser visível ao casual (diretório) visitando usuários etc.

Decidi guardar todos os documentos (e imagens digitalizadas) como blobs no banco de dados e até agora a minha experiência é maravilhoso e recuperação de documentos é extremamente rápido assim - que satisfaz todos os critérios de cima e há até mesmo um par de vantagens adicionais, como Mem Auto documentos juntamente com a entidade se relaciona com, fácil e rápido seaching de conteúdo, removendo de todos os tipos de atividades do usuário em torno de abertura e nomeando de documentos etc etc.

A minha pergunta é - existem riscos graves ou coisas que eu esquecidos com este projeto e implementação

?

Editar Nota: DB é PostgreSQL, alças Blobs muito bem e escalas excepcionalmente bem. O ambiente é Multi-usuário.

Foi útil?

Solução

Quando seu DB cresce mais e mais ele se tornará mais difícil de backup. Restaurar um backup de uma tabela com mais de 100 GB de dados não é algo que te faz feliz.

Outra coisa que get é que todas as funções de gerenciamento de mesa ficar mais lento e mais lento como o conjunto de dados cresce.
Mas isso pode ser superado, fazendo sua tabela de dados contêm apenas 2 campos: ID e BLOB.

A recuperação de dados (por chave primária), provavelmente, só se tornar um problema muito tempo depois de bater em uma parede com o backup do conjunto de dados.

Outras dicas

A principal desvantagem que eu ouvi muitas vezes de usar blobs é que, acima de um certo tamanho, o sistema de arquivos é muito mais eficiente em armazenar e recuperar arquivos grandes. Parece que você já tomou isso em conta, a sua lista de requisitos.

Há uma href="http://arxiv.org/ftp/cs/papers/0701/0701168.pdf" rel="noreferrer"> referência boa que cobre os prós e contras de blobs.

Da minha experiência, algumas questões foram:

  1. velocidade vs ter arquivos no sistema de arquivos.

  2. caching. IMO o servidor web vai fazer um trabalho melhor de caching conteúdos estáticos. O DB vai fazer um bom trabalho também, mas se o DB é também entregar todos os tipos de outras consultas, não espere que esses documentos grandes a estadia em cache por muito tempo. Vocês têm essencialmente para transferir o arquivos duas vezes. Uma vez que a partir do DB à servidor web, eo servidor web, em seguida, para cliente.

  3. restrições de memória. No meu último emprego que teve um PDF 40MB no banco de dados, e continuei recebendo Java OutOfMemoryErrors no arquivo de log. Nós finalmente percebeu que toda a 80MB PDF foi lido na pilha não apenas uma vez, mas duas vezes, graças a uma configuração no Hibernate ORM (se um objeto é mutável, ele faz uma cópia para edição na memória). Uma vez que o PDF estava de volta transmitido para o usuário, a pilha foi limpo, mas foi um grande sucesso para sugar 80MB para fora da pilha de uma só vez apenas para transmitir um documento. Conheça o seu código e como a memória está sendo usado!

O seu servidor web deve ser capaz de lidar com a maioria das suas preocupações de segurança, mas se os documentos são pequenos eo DB não estiver sob uma carga grande, então eu realmente não vejo um grande problema com tê-los no DB .

Eu apenas comecei a pesquisar FILESTREAMing SQL Server 2008 para BLOBs e ter executado através de uma limitação enorme (IMO) - ele só funciona com segurança integrada. Se você não usar a autenticação do Windows para se conectar ao servidor de DB, você é incapaz de ler / escrever os BLOBs. Muitos ambientes de aplicação não pode usar a autenticação do Windows. Certamente não em ambientes heterogêneos.

Uma solução melhor para armazenar BLOBs deve existir. Quais são as melhores práticas?

Este tampas artigo a maioria das questões. Se você estiver usando SQL Server 2008, veja o uso do novo tipo FILESTREAM como discutido por Paul Randal aqui .

Depende do DatabaseType. Oracle ou SQLServer? Estar ciente de uma desvantagem -. Restauração de um único documento

Sorry - a resposta que ofereceu foi baseado em SQL Server, para a parte de manutenção não é apropriado. Mas arquivo I / O é realizado ao nível do hardware e qualquer banco de dados adiciona etapas de processamento extra.

O banco de dados vai impor sobrecarga extra ao recuperar o documento. Quando o arquivo está no disco você só é tão lenta ou tão rápido quanto o I / O no servidor. Você certamente deve gerir a sua meta em um banco de dados, mas no final você quer que o UNC do arquivo e direcionar o usuário para a fonte e sair do caminho.

Do ponto de vista de manutenção e administração você vai limitar-se a uma SAN quando se lida com MS SQL Server. Soluções como Documentum ter uma abordagem diferente com simples armazenamento no disco e permite-lhe implementar uma solução de armazenamento como achar melhor.

Editar

Deixe-me esclarecer minha afirmação - com o SQL Server que você têm opções limitadas quando você exceder a capacidade de armazenamento físico da caixa. Esta é de facto uma das grandes fraquezas do SharePoint que você não é capaz de simplesmente anexar qualquer tipo de armazenamento de rede.

Desde que eu experimentei armazenar arquivos de conteúdo como blobs, tanto SQL Server e Oracle, funciona bem com uma pequena base de dados e com um baixo número de usuários logados. sistema ECM separá-los e usar serviços separados para streaming de conteúdo. Dependendo do tamanho dos arquivos, os recursos do servidor pode ser afetado com a recuperação simultânea de arquivos grandes. Arquivo de bancos de dados com grandes conjuntos de arquivos torna-se devido problemático o tempo para restaurar e a incapacidade de recuperar documentos formam o arquivo.

Se esses arquivos são registros corporativos, e esta é a cópia autorizada de registros, você pode ter problemas de conformidade e gerenciamento de retenção, especialmente se você arquivar os arquivos. Também pesquisar e controle de versão pode tornar-se um enorme problema de avançar.

Você pode querer investigar um sistema de ECM com uma API de algum tipo, em vez de re-inventar a roda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top