¿Cómo construiría una estructura de datos compartidos para un alto rendimiento y disponibilidad?

Hash Array Mapped Trie (HAMT) es una estructura de datos que ofrece muchas flexibilidades para el caso de uso que describa. Cada nodo interno tiene un factor de ramificación de [math] 2 ^ k [/ math] que generalmente se implementa como una matriz de elementos [math] 2 ^ k [/ math]. Es una estructura de datos con reconocimiento de caché y tiene una profundidad esperada de [matemática] O (\ log_ {2 ^ k} n) [/ matemática] y se escala extremadamente bien con respecto a las inserciones y consultas. Debido a su alto factor de ramificación de nodos internos, ofrece una complejidad de tiempo casi [matemática] O (1) [/ matemática] y, por lo tanto, coincide con el rendimiento de una tabla hash en el mundo real. Es una estructura de datos funcional y persistente y ofrece toda la bondad de la inmutabilidad. Esta estructura de datos es originalmente de Phil Bagwell. Vea su artículo Ideal Hash Trees (http://lampwww.epfl.ch/papers/id…) para más detalles. Esta estructura de datos viene con las bibliotecas estándar de Scala y Clojure.

También está disponible una versión simultánea sin bloqueo de esta estructura de datos, conocida como CTrie, que ofrece una implementación segura de subprocesos mutables que garantiza el progreso. El documento Cache-Aware Lock-Free Concurrent Hash Trie (http://infoscience.epfl.ch/recor…) de Aleksandar Prokopec, Phil Bagwell y Martin Odersky brinda más detalles de la implementación.

Usamos Ruby, usamos la opción 1. Básicamente, un filtro de flores implementado en redis, al que se accede mediante un montón de servicios a través de la red.

En nuestro caso, la consistencia del filtro de floración es importante, y no guardamos copias separadas. En ciertos otros casos, las copias compartidas / replicadas de los datos podrían funcionar.

Este problema cae muy bien en las fortalezas de Clojure.
Clojure y sus estructuras de datos inmutables y persistentes están diseñadas para acceso compartido con buenas características de rendimiento.

http://blakesmith.me/2012/05/15/…
http://clojure.org/data_structures

More Interesting

Paso mucho tiempo pensando en el diseño, por lo que la implementación es terriblemente lenta. ¿Cómo supero este problema?

¿En qué se diferencia la ramificación y el límite del retroceso?

Cómo calcular el número 50 usando números binarios

¿Cuál es la forma más eficiente de ordenar un millón de enteros de 32 bits?

¿Cuáles son los algoritmos básicos en informática?

Cómo implementar el mapa usando el árbol de búsqueda binario en Java

Cómo escribir un algoritmo

Cómo encontrar las rutas que cubren todos los vértices dados (también se conocen el vértice inicial y final) en un gráfico cuyos bordes tienen peso y dirección

Cómo hacer que el código de una ordenación de inserción sea más optimizado utilizando una lista vinculada

¿Cuál es el mejor libro para aprender algoritmos?

¿Cuál es el algoritmo más adecuado para la agrupación en una red social?

¿Cuál es el mejor algoritmo para encontrar el número más pequeño (mínimo 40 dígitos) cuyo último dígito se mueve al frente y es nueve veces el número original?

Teoría de conjuntos: ¿un subconjunto es un tipo de intersección?

¿El uso de algoritmos en una clave de contraseña típica de 256 bits que siempre está cambiando pero que aún se muestra al usuario (como en un teléfono, por ejemplo) para crear código requeriría supercomputadoras más rápidas disponibles para superarlo?

¿Hay alguna lista de problemas de árbol AVL similares a los problemas de árbol binario de Stanford?