2008-10-13 13 views
16

Necesito una forma de realizar búsquedas de valores-clave en (potencialmente) cientos de GB de datos. Idealmente, algo basado en una tabla hash distribuida, que funciona muy bien con Java. Debe ser tolerante a fallas y de código abierto.Necesito un sistema de búsqueda de valor-clave distribuido

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

Debe ser capaz de admitir lecturas y escrituras concurrentes desde varias máquinas (sin embargo, las lecturas serán 100 veces más comunes). Básicamente, el objetivo es hacer una búsqueda inicial rápida de los metadatos del usuario para un servicio web.

¿Alguien puede recomendar algo?

+0

¿Qué está optimizando para?Por ejemplo, rendimiento de lectura (lecturas simultáneas de múltiples máquinas), tolerancia a fallas ante el hecho de que las máquinas no estén disponibles, baja cantidad de máquinas ... ¿También necesita escrituras? – Alexander

+0

Gracias, he editado la pregunta con esta información. – sanity

+0

¿Cómo quieres que se distribuyan tus datos? ¿Deberían todos los datos estar disponibles para/en/desde cada nodo o no? En el primer caso, la siguiente pregunta es "¿por qué la búsqueda distribuida?". – Alexander

Respuesta

12

Es posible que desee comprobar Hazelcast. Está distribuido/particionado, súper lite, fácil y gratis.

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

Saludos,

-talip

1

Probablemente debería especificar si tiene que ser persistente o no, en la memoria o no, etc. Usted podría intentar: http://www.danga.com/memcached/

+0

Gracias, he agregado una nota que debe ser persistente, lo que creo que descarta la memcached. – sanity

+0

memcached también fue mi primer pensamiento, pero "centésimas de GB" es un poco demasiado para RAM – Javier

-1

DNS tiene la capacidad de hacer esto, no sé qué tan grande cada uno de sus registros es (8GB de toneladas de datos pequeños?), pero puede funcionar.

+0

DNS asume una estructura de datos jerárquica, me temo que no hará lo que necesito. – sanity

8

es una implementación del protocolo CHORD en Java. Es un protocolo de tabla hash distribuida que debe ajustarse perfectamente a sus necesidades.

0

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

0

OpenChord suena prometedor; pero también consideraría BDB, o cualquier otra tabla hash que no sea SQL, por lo que se puede distribuir fácilmente (si la cantidad de nodos de almacenamiento es (casi) constante, al menos), solo hash la tecla en el cliente para obtener el servidor apropiado

2

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

0

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

0

Trate distribuidos estructura Mapa de Redisson, se basan en Redis servidor. Al usar la configuración del clúster Redis, puede dividir 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(); 
Cuestiones relacionadas