Système de stockage de données approprié pour l'application Erlang lorsque les données ne correspondent pas à la mémoire

StackOverflow https://stackoverflow.com/questions/287233

Question

Je recherche des options possibles pour organiser le stockage des données pour une application Erlang. Les données qu’il est supposé utiliser sont fondamentalement une énorme collection de blobs binaires indexés par des identifiants de chaînes courtes. Chaque blob est inférieur à 10 Ko, mais ils sont nombreux. Je m'attendrais à ce qu'ils aient une taille totale allant jusqu'à 200 Gb, donc il est évident que cela ne rentre pas dans la mémoire. L'opération typique sur ces données est soit la lecture d'un blob par son identifiant, soit la mise à jour d'un blob par son identifiant, soit l'ajout d'un nouveau. À chaque heure de la journée, seul un sous-ensemble d'identifiants est utilisé, de sorte que les performances d'accès au stockage des données peuvent tirer parti du cache en mémoire. Parler de performance - c'est assez critique. L’objectif est d’avoir environ 500 lectures et 500 mises à jour par seconde sur du matériel standard (par exemple sur la machine virtuelle EC2).

Avez-vous des suggestions à utiliser ici? Si je comprends bien, dets est hors de question car il est limité à la 2G (ou était-ce 4G?). Mnesia probablement aussi hors de question; Mon impression est qu'il a été principalement conçu pour les cas où les données correspondent à la mémoire. J'envisage d'utiliser le pilote EDTK Berkeley DB pour cette tâche. Cela fonctionnerait-il dans le scénario ci-dessus? Quelqu'un a-t-il déjà utilisé ce logiciel dans des conditions similaires?

Était-ce utile?

La solution

tcerl n'a plus le même poids. Je n'utilise pas Erlang ces jours-ci, mais cela ressemble à ce que vous recherchez.

Autres conseils

Avez-vous regardé ce que fait CouchDB? Ce n'est peut-être pas ce que vous recherchez en tant que produit abandonné, mais il contient beaucoup de code erlang pour le stockage des données. On parle aussi de fournir une interface erlang native au lieu de l’API REST.

Y a-t-il une raison pour laquelle vous ne pouvez pas simplement utiliser un système de fichiers, considérant le nom de fichier comme l'identifiant de votre chaîne et le contenu du fichier comme un blob binaire? Vous pouvez en choisir un (système de fichiers) qui correspond à vos exigences en matière de performances. Vous devriez obtenir la mise en cache essentiellement gratuitement, fournie par votre système d’exploitation.

Mnesia peut très bien stocker des données sur disque. Il existe également des dets (stockage sur disque) qui sont à peu près analogues à Berkeley DB. C'est dans la bibliothèque standard: http://www.erlang.org/doc/ apps / stdlib / index.html

Je recommanderais Apache CouchDB.

C’est un choix judicieux pour Erlang, et son son (vous mentionnez les blobs basés sur l’ID sans mentionner d’exigences relationnelles) vous permet de rechercher une base de données orientée document.

Etant donné que l'interface est REST, vous pouvez très simplement ajouter un cache HTTP de marchandise devant si vous avez besoin de la mise en cache.

La documentation de CouchDB est d’une très grande qualité.

Il a également intégré Map-réduire:)

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