Pergunta

Eu estou procurando um banco de dados que suporta as seguintes funcionalidades:

1) Grava no banco de dados são como dicionários Python ou Perl hashes. Por exemplo, uma "compra" registro pode ter esta aparência:

<purchase 5436> = { product: "BMX Bike", price: 99.50, city: "Springfield" }

2) Os registos são armazenados em matrizes de comprimento variável. O banco de dados contém muitas dessas matrizes. Por exemplo, a tabela de compra pode ter esta aparência:

purchase array 1: [ <purchase 5436>, <purchase 54>, <purchase 112> ]
purchase array 2: [ <purchase 76>, <purchase 5984>, <purchase 1102>, <purchase 12> ]
...
purchase array 658: [ <purchase 10142>, <purchase 35>, <purchase 6458>, <purchase 23> ]

3) Eu quero ser capaz de fazer dois tipos de consultas sobre esta base de dados:

3a) Contar o # de registros que correspondem a vários critérios. Por exemplo, quantos de compra foram feitas com um valor acima de 50? Eu sei de muitos bancos de dados que suportam esta.

3b) Conte o número de vezes que registros aparecem em uma determinada ordem. Por exemplo, quantas matrizes estão lá foram uma compra mais de 50 foi feito e, em seguida, uma compra em "Springfield" foi feito? Eu não sei que tipo de banco de dados você usaria para fazer isso.

edit: resposta a Steve Haigh: eu deveria ter mencionado que a velocidade é importante, e isso precisa de banco de dados a gigabytes de suporte de dados. Por exemplo, pode haver 1.000.000.000 de matrizes de compra, e eu quero contar quantos deles têm uma compra em "Springfield", seguido por uma compra em "Hometown" (note que a ordem é importante). Talvez eu esteja errado, mas acho que um banco de dados relacional seria muito lento para esta finalidade.

Foi útil?

Solução

Tem certeza de que não pode fazer isso com um banco de dados relacional usando um link ou junção mesa?

Você teria uma coluna de encomendas, uma coluna de produtos e uma tabela de ordem subprodutos que tem uma linha para cada produto por pedido.

Eu acho que isso artigo provavelmente expressa melhor do que eu podia.

Outras dicas

Você não realmente precisa de um banco de dados relacional como você só tem chave-> pares de valores agrupados em coleções, você precisaria de junta entre as duas tabelas (uma para os registros, um para as coleções) para iterate os registros em um coleta e no seu caso não vale a pena o custo.

Para os requisitos de desempenho, o que você precisa é ter certeza de que todo o fits estrutura na memória e não requer acesso ao disco. Você pode precisar de vários servidores para fazer isso, e um mestre que despacha as pesquisas para os outros servidores (assumindo que o tamanho de sua estrutura é maior do que a quantidade razoável de memória que um servidor moderna pode segurar, e que seus requisitos de velocidade são tão grande que você não pode permitir a paginação em disco.

Para o tipo de consultas que você mencionou, a sua melhor opção é ter um pouco de redundância de dados. Em inserções, você iria acompanhar as contagens. tendas redundância de dados a surtar pessoas apenas lendo o nome, mas às vezes é necessário. Basta ser extremamente cuidadoso com sua implementação e investir uma boa quantidade de testes de unidade aqui.

Pode haver, no entanto, algum tipo de consultas, que você nunca vai ser capaz de fazer em tempo real em questão de milissegundos, e que um em encontrar compras com uma condição seguido por compras com outra condição parece isto. Ou você encontrar uma maneira de manter um acompanhamento ao vivo desta números ao inserir / excluir / modificar, ou você terá que actualy iterate seus milhões de matrizes, não há maneira de evitar isso. Você vai precisar de considerar como recente suas necessidades de dados a ser, e talvez pré-calcular a cada poucas horas para gerar essas estatísticas e, em seguida, ser capaz de acessá-los em O (1) com as chaves de pesquisa.

Em poucas palavras, o problema é muito além da tecnologia você decidir usar para resolvê-lo.

Não estou certo i entender completamente o que você está procurando, mas você já olhou para couchdb ? . Seu documento orientado e esquema livre

O que você está descrevendo é bastante semelhante ao MUMPS mesmo que eu tenha algumas dúvidas sobre a capacidade de definir consultas onde a ordem dos "registros" nas matrizes é possível.

Tenha um olhar para o link, há também versões comerciais atuais deste como você vai ver.

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