2010-07-21 3 views
3

Quelle est la meilleure solution si j'ai besoin d'une base de données avec un milliard d'objets et que j'ai besoin d'un accès immédiat (ou presque immédiat) à n'importe quel élément de la base de données à tout moment.Gérer le stockage de milliards d'informations?

Cette base de données serait interrogée à environ 1000 requêtes par seconde. Les lignes de la base de données ne sont pas apparentées et n'ont donc pas besoin d'être relationnelles.

Si vous êtes curieux de savoir pourquoi, c'est pour une simulation d'éléments en mouvement. Je pensais à quelque chose comme plusieurs grappes équilibrées de charge d'un Cassandra qui sont accessibles via un cluster de serveurs Web à charge équilibrée.

L'argent est un facteur, donc moins cher sera le mieux. Il n'y a aucune restriction sur le logiciel ou l'outil mais il doit être open source. Nous recherchons simplement une solution de base de données qui serait utile pour gérer une quantité ridicule de données (ne nécessitant aucun lien relationnel) par un grand nombre d'utilisateurs.

Il est essentiel qu'il gère la redondance et les échecs.

Juste une idée de haut niveau pour me mettre dans la bonne direction serait génial.

+0

En moyenne, combien d'objets les 1000 req/sec doivent-ils collecter de vos milliards? Quelle corrélation y aurait-il entre les données sélectionnées par les différentes demandes? Quelle est la taille de chacun des milliards ou plus d'objets? Comment les objets sont-ils identifiés? –

+0

Dites environ 10 ou 20 par demande. Il n'y a pas de corrélation (il y en a mais il sera calculé côté client). Chaque objet est vraiment juste dire environ 10 attributs de texte brut et des données de position 3D. Les objets seraient identifiés par une clé unique (ou si l'utilisateur était ciblé sur un emplacement spécifique) ils devraient être en mesure de voir tous les objets dans les unités X (donc il devrait y avoir une possibilité d'interroger la base de données pour seulement les résultats à l'intérieur d'une plage de X, Y et Z. Les autres attributs pourraient aussi être interrogés, mais ne donneraient qu'environ 10 à 20 ou 100 à la plupart des objets retournés). – jreid42

+0

Pour clarifier vous ne pouvez pas dire me donner tous les objets avec l'attribut z == this. Ce serait toujours ... donnez-moi tous les objets dans les 200 unités de X, Y, Z ... alors vous pouvez également filtrer par leurs attributs (mais cela pourrait être fait côté client car il n'y en aurait pas autant dans le même Région). – jreid42

Répondre

0

Puisque vous devez être en mesure d'obtenir efficacement tous les objets dans un intervalle 3D (X_min < = X_obj < = x_max & Y_MIN < = Y_obj < = Y_MAX & Z_min < = Z_obj < = Z_max), je ne suis pas sûr à quel point un magasin à valeur-clé comme Cassandra vous conviendra. Il peut être intéressant de regarder aussi MongoDB puisque je crois que cela vous permet d'indexer plusieurs champs et d'interroger en fonction des intervalles.

+0

J'ai entendu dire que MongoDB n'est pas le meilleur en termes de protection de vos données. – jreid42

+0

MongoDB est aussi bon que n'importe quel autre DB dans de bonnes conditions.Il admet que le matériel échoue, et à moins que vous ayez les données sur deux ou trois machines différentes, vous ne pouvez pas être certain qu'il est sûr. –

+0

Cassandra permet également l'indexation de plusieurs champs et l'interrogation en fonction des intervalles. –

1

Une option à prendre en compte consiste à mapper vos coordonnées 3D sur un space-filling curve, représentant effectivement un point en tant que valeur unique. Ensuite, vous pouvez exécuter les requêtes de Cassandra pour obtenir des points dans une zone.

J'ai déjà vu cela dans un espace 2D, je suis sûr que c'est aussi possible en 3D.

Questions connexes