Pergunta

Eu preciso de uma maneira de fazer pesquisas de chave-valor em toda a (potencialmente) centenas de GB de dados. Idealmente algo baseado em um Distributed Hash Table, que funciona muito bem com Java. Deve ser tolerante a falhas, e de código aberto.

A loja deve ser persistente, mas, idealmente, cache de dados na memória para acelerar as coisas.

Ele deve ser capaz de suportar leituras simultâneas e escreve a partir de várias máquinas (lê será 100X embora mais comum). Basicamente, o objetivo é fazer uma pesquisa inicial rápida de metadados de usuário para um serviço web.

Alguém pode recomendar alguma coisa?

Foi útil?

Solução

Você pode querer verificar para fora Hazelcast . Ele é distribuído / particionado, super lite, fácil e gratuito.

java.util.Map map = Hazelcast.getMap ("mymap");
map.put ("key1", "value1");

Saudações,

-talip

Outras dicas

Abrir Chord é uma implementação do protocolo CHORD em Java. É uma tabela protocolo Distributed Hash que deve caber perfeitamente às suas necessidades.

Dependendo do caso de uso, Terracotta pode ser apenas o que você precisa.

Você provavelmente deve especificar se ele precisa ser persistente ou não, na memória ou não, etc. Você poderia tentar: http://www.danga.com/memcached/

Distributed Hash Tables incluem Tapestry, Chord, e pastelaria. Um deles deve atender às suas necessidades.

OpenChord parece promissor; mas eu também iria considerar BDB , ou qualquer outro não hashtable -SQL, tornando-se distribuída pode estar morto-fácil (se o número de nós de armazenamento é (quase) constante, pelo menos), apenas de hash a chave no cliente para obter o servidor apropriado.

nmdb sons como seu exatamente o que você precisa. Distribuído, em memória cache, com um armazenamento persistente no disco. back-ends atuais incluem qdbm, db Berkeley, e (recentemente adicionado depois de um rápido e-mail para o desenvolvedor) Tóquio . tamanho da chave / valor é limitado, porém, mas eu acredito que pode ser levantada se você não precisa de suporte Ticp.

Tente estrutura Mapa distribuídos a partir Redisson , é baseado em Redis servidor. Usando configuração de cluster Redis você pode dividir dados entre 1000 servidores.

Exemplo de uso:

Redisson redisson = Redisson.create();

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap");
map.put("123", new SomeObject());
map.putIfAbsent("323", new SomeObject());
map.remove("123");

...

redisson.shutdown();

DNS tem a capacidade de fazer isso, eu não sei quão grande cada um de seus registros é (8GB de toneladas de dados pequenos?), Mas pode funcionar.

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