Pergunta

Eu preciso desenvolver um sistema para armazenar grandes números (10 de para 100 dos milhares) de objetos. Cada objeto é e-mail semelhante - existe um corpo principal do texto, e vários campos de texto auxiliares de tamanho limitado. Um corpo vai ser de alguns bytes, a vários KB de tamanho.

Cada item terá um único ID único (provavelmente uma GUID) que o identifica.

A loja só vai ser escrito para quando um objeto é adicionado a ele. Ele será lido muitas vezes. Eliminações serão raros. Os dados são quase todo o texto legível por isso vai ser facilmente compressível.

Um sistema que me permite emitir o I / Os e gerenciar a memória e cache seria o ideal.

Eu estou indo para manter os índices na memória, usando-o para mapear índices para a chave única (e principal) para os objetos. Assim que eu tiver a chave, então eu vou carregá-lo a partir do disco, ou o cache.

O sistema de gerenciamento de dados precisa ser parte da minha candidatura - Eu não quero depender de serviços do sistema operacional. Ou instalado separadamente pacotes. Nativo (C ++) seria melhor, mas um (C #) coisa manged seria ok.

Eu acredito que um banco de dados é uma escolha óbvia, mas isso precisa ser super-rápido para olhar para cima e carregamento na memória de um objeto. Eu não sou experiente com tecnologia de base de dados e eu estou preocupado que os sistemas relacionais gerais não vai lidar com todos os dados de tamanho dessa variável de forma eficiente.

(Note, isso não tem nada a ver com meu trabalho -. É um projeto pessoal)

Na sua experiência, quais são as alternativas viáveis ??para um banco de dados relacional tradicional? Ou seria uma obra DB bem para isso?

Foi útil?

Solução

SQLite , tem ligações para várias linguagens de programação e ambientes disponíveis e é, como o Berkeley DB , um banco de dados no disco sem a necessidade de uma instalação de banco de dados.

Se você acabou de adicionar os índices corretos, pesquisas será muito rápido, e uma vez que é um banco de dados baseado em conjunto no coração, você ainda pode fazer consultas a granel e similar.

Outras dicas

Eu daria PFS uma tentativa: http://blog.sensenet.hu/post/2008/05/Portal-File-System- (PFS) -um-open-source-content-repository- para-Net.aspx

Pena que você está em c / .Net, como Jackrabbit teria sido uma escolha perfeita.

Você não realmente indicar como você vai estar procurando esses dados. Eu fiz algum trabalho semelhante com algumas aplicações de mineração de texto onde os dados principal é armazenado no MySQL, mas eu manter um índice de pesquisa textual em Ferret (o projeto está em Ruby) para encontrar a linha apropriada na tabela de mensagens com base na pesquisa de palavras-chave. Penso que esta abordagem híbrida poderia trabalhar para você também. SQLServer e Lucene.Net pode funcionar bem para você no ambiente C #. Tenho certeza que se você olhar ao redor você pode encontrar soluções similares no espaço C ++.

Eu não recomendo o uso de pesquisa de texto completo SQLServer -. Lucene e é derivações parece ser a melhor escolha tanto

Eu acho que você teria muito mais sorte com praticamente qualquer solução DB sobre uma solução baseada em arquivo. Apenas sobre qualquer banco de dados moderno deve ser capaz de lidar com suas necessidades de dados, pelo menos, o espaço-wise. Construir os índices em seu campo grande é uma questão diferente e é por isso que eu recomendo uma abordagem de mineração de texto se você precisa procurar sobre ele.

Parece que apenas o que Berkeley DB foi projetado para. Eu não usei ele, no entanto.

Talvez você deve dar algum pensamento a um WebDav-servidor como o Apache + mod-DAV. Isto irá armazenar o conten e metadados no disco. Para pesquisar você pode colocar um motor de pesquisa existente no topo desta servidor WebDAV, por exemplo, Lucene.

Desta forma, você mantê-lo próprio desenvolvimento, no mínimo, e começar com um poderoso grupo de características.

Você já olhou para db4o ou Karvonite ?

Tenha um olhar em Glimpse .

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