Question

J'utilise ETS - fonctionne très bien. Cependant, je l'utilise comme un cache de données d'itinéraire - que je charge lorsque le chargement du module, et enregistrer lorsqu'une modification est apportée (il est lu beaucoup plus que par écrit).

Je pensais que DETS rendrait les choses beaucoup plus propre - Je n'ai pas à vous soucier de la gestion de la persistance de la table. Serait-ce une bonne utilisation de DETS? (La taille est pas un problème, surtout préoccupé par augmentation importante des performances de lecture - toutes les données peuvent facilement tenir dans la mémoire).

Était-ce utile?

La solution

DETS est beaucoup plus lent que ETS dans la plupart des cas, mais je suppose que si votre taille de données est petite, plus si elle est mise en cache par le cache disque et sera plus rapide pour récupérer la deuxième fois que vous l'avez lu, donc le meilleur chose est l'essayer avec votre type d'utilisation

Mais avez-vous pensé à utiliser à la place de Mnesia ETS directement? Avec les disc_copies de type table Mnesia vous obtiendrez la vitesse de l'ETS et encore persistance

Autres conseils

Droit de la dét page man :

"Puisque toutes les opérations effectuées par dét sont des opérations de disque, il est important de réaliser qu'une seule opération de consultation implique une série de recherche sur disque et les opérations de lecture. Pour cette raison, les fonctions DET sont beaucoup plus lentes que les Ets correspondant fonctions, bien que dét exporte une interface similaire. "

C'est, pour un stockage principalement en lecture, dét est pas un choix optimal.

(je dois admettre que je trouve cette décision de conception bizarre -. Une meilleure mise en œuvre devrait mettre en cache les recherches récentes Cependant, étant donné que la FTE et dét sont des équipements de base en Erlang, je suppose que les implementors gauche que l'optimisation pour les utilisateurs.)

Pour écrire rarement, lu beaucoup de données que vous gardez bien en mémoire, consultez un « Mochiglobal ». Mochiweb dispose d'un module propre que les abus Erlang le tas de partage pour les constantes de module via le système de gestion de code pour fournir un accès ultra-rapide aux termes de génération de modules avec des valeurs données comme des constantes à la volée.

Riak utilise un Mochiglobal pour l'état de sonnerie, IIRC.

Hers est la source:

https://github.com/mochi/mochiweb/blob/ maître / src / mochiglobal.erl

Il n'y a absolument pas de persistance ici, bien sûr, mais si vous cherchez à lit beaucoup optimisez, vous ne pouvez pas obtenir beaucoup mieux que cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top