Pregunta

Necesito una forma de hacer búsquedas de valor clave en (potencialmente) cientos de GB de datos. Idealmente, algo basado en una tabla hash distribuida, que funcione bien con Java. Debe ser tolerante a fallas y de código abierto.

La tienda debe ser persistente, pero idealmente almacenaría en caché los datos en la memoria para acelerar las cosas.

Debería ser capaz de soportar lecturas y escrituras concurrentes desde múltiples máquinas (aunque las lecturas serán 100 veces más comunes). Básicamente, el propósito es hacer una búsqueda inicial rápida de metadatos de usuario para un servicio web.

¿Alguien puede recomendar algo?

¿Fue útil?

Solución

Es posible que desee consultar Hazelcast . Está distribuido / particionado, super lite, fácil y gratuito.

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

Saludos,

-talip

Otros consejos

Open Chord es una implementación de protocolo CHORD en Java. Es un protocolo de tabla hash distribuido que debe adaptarse perfectamente a sus necesidades.

Dependiendo del caso de uso, Terracota puede ser justo lo que necesita.

Probablemente debería especificar si debe ser persistente o no, en memoria o no, etc. Puede intentar: http://www.danga.com/memcached/

Las tablas hash distribuidas incluyen Tapiz, Acorde y Pastelería. Uno de estos debe satisfacer sus necesidades.

OpenChord suena prometedor; pero también consideraría BDB , o cualquier otro -SQL hashtable, hacer que se distribuya puede ser muy fácil (si el número de nodos de almacenamiento es (casi) constante, al menos), solo hash la clave en el cliente para obtener el servidor apropiado.

nmdb parece que es exactamente lo que necesita. Distribuido, en memoria caché, con un almacenamiento en disco persistente. Los back-end actuales incluyen qdbm, berkeley db y (recientemente agregado después de un correo electrónico rápido al desarrollador) gabinete de tokio . Sin embargo, el tamaño de clave / valor es limitado, pero creo que se puede eliminar si no necesita soporte de TICP.

Pruebe la estructura del Mapa distribuido de Redisson , basado en servidor Redis . Con la configuración de clúster de Redis, puede dividir los datos en 1000 servidores.

Ejemplo 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 tiene la capacidad de hacer esto, no sé qué tan grande es cada uno de sus registros (¿8 GB de toneladas de datos pequeños?), pero puede funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top