2010-08-22 17 views
1

Je crée une application qui nécessite le stockage et l'interrogation de très grandes quantités de données horodatées. Plus précisément, il s'agit de données de type analytique dans lesquelles un "ensemble" particulier peut contenir jusqu'à 100 points de données distincts liés ensemble par un horodatage partagé. Ces données sont statiques, en ce sens qu'elles ne changeront jamais une fois stockées mais pourront être interrogées plusieurs fois avant d'être effacées de la base de données (nous ne stockons actuellement que 12 semaines de données).Meilleur moteur de stockage pour les données analytiques statiques à grand volume

Pour le moment, nous stockons ces données dans MySQL avec plusieurs tables d'environ 100 millions de lignes chacune (nous ajoutons environ 3 millions de lignes par jour). Cela ne pose aucun problème lorsque vous stockez et interrogez les données uniquement par horodatage, mais cela devient fastidieux lorsque vous effectuez des sélections avec des tris et en particulier lorsque vous essayez de supprimer des anciennes données obsolètes des tables. Une requête DELETE utilisant par exemple WHERE timestamp < $ 12weeksago prend souvent plusieurs heures à compléter.

Nous souhaitons également conserver certaines données au-delà de la période de 12 semaines, ce qui ajoute une autre clause WHERE à la commande DELETE par rapport à une autre colonne. Cela ralentit les choses plus loin.

Quel moteur de stockage recommanderiez-vous en fonction de ce cas d'utilisation, en tenant compte du volume élevé de lectures/écritures et des besoins d'interrogation?

Répondre

0

Tout dépend du type de sélection que vous faites. Si une base de données NoSQL peut le faire, cela pourrait être votre meilleure estimation.

Cependant, je pense que vous pouvez probablement améliorer vos performances en partitionnant la base de données. Comme il est déjà basé sur le temps, vous pouvez facilement créer une partition par jour/semaine/mois, de cette façon vous n'avez qu'à interroger les tables qui sont pertinentes pour votre requête actuelle. Et la suppression des anciennes données est une simple liste déroulante au lieu d'une suppression lente.

0

Essayez Redis ou MongoDB. Ils ont tous deux été conçus pour ce genre de cas d'utilisation.