Pour l'un de mes projets, je dois entrer une grande collection d'événements dans une base de données pour traitement ultérieur et j'essaie de déterminer quel SGBD serait le mieux adapté à mon objectif.Suggestions de base de données pour les séries chronologiques d'événements
J'ai:
À propos 400000000 événements discrets au moment
Environ 600 Go de données qui seront stockées dans la DB
Ces événements viennent dans une variété de formats, mais j'estime le nombre d'attributs individuels à environ 5000. La plupart des événements contiennent uniquement des valeurs pour environ 100 attributs chacun. Les valeurs d'attribut doivent être traitées comme des chaînes arbitraires et, dans certains cas, des entiers.
Les événements seront éventuellement consolidés en une seule série chronologique. Bien qu'ils aient une structure interne, il n'y a aucune référence à d'autres événements, ce qui - je crois - signifie que je n'ai pas besoin d'un DB objet ou d'un système ORM.
Mes besoins:
licence open source - je dois ruser un peu.
Évolutivité en étant capable de s'étendre à plusieurs serveurs, même si un seul système sera utilisé au début.
Requêtes rapides - les mises à jour ne sont pas si critiques.
Pilotes/fixations matures pour C/C++, Java et Python. Préférentiellement avec une licence qui joue bien avec les autres - je préfère ne pas m'engager à quelque chose à cause d'une décision technique. Je pense que la plupart des drivers DB n'ont pas de problème ici, mais il faut quand même le mentionner.
Disponibilité pour Linux.
Ce serait bien, mais pas nécessaire, si elle était également disponible pour Windows
Mon DB idéal pour cela me permettra de récupérer tous les événements d'une période de temps spécifiée avec une seule requête .
Ce que j'ai trouvé/considéré jusqu'à présent:
Postgresql avec une taille de page accrue peut apparemment avoir jusqu'à 6000 colonnes dans chaque tableau. Si mon estimation du nombre d'attributs n'est pas désactivée, cela pourrait le faire.
MySQL semble avoir une limite de 4000 colonnes par table. Je pourrait utiliser plusieurs tables avec un peu de SQL-fu, mais je préfère ne pas.
MongoDB est ce que je suis actuellement pencher vers. Cela me permettrait de préserver la structure interne des événements, tout en étant capable de les interroger. Son API semble également assez simple.Je n'ai aucune idée de la qualité des performances, du moins sur un seul serveur. Et son cadre de collecte de métriques semble intéressant.Je pourrais utiliser une seule série chronologique pour chaque attribut (ce qui pourrait aider avec un peu de mon traitement), avoir la valeur de l'attribut comme une étiquette et en plus marquer les entrées pour les associer à un événement spécifique. Il a probablement une courbe de préparation plus raide que les trois ci-dessus, à la fois d'un point de vue administrateur et un programmeur d'applications. Aucune idée de sa performance.
Utilisez directement HBase. Cela pourrait mieux répondre à mes exigences que OpenTSDB, bien que - d'après mon expérience passée avec hadoop - les frais généraux d'administration sont probablement encore plus élevés que les trois premières options.
Il y a probablement d'autres bases de données qui pourraient le faire, alors ne hésitez pas à me le faire savoir - Je vous serais reconnaissant toute suggestion ou commentaire qui pourrait me aider. PS: J'ai seulement une expérience minimale en tant qu'administrateur DB, donc je m'excuse pour toute idée fausse.
La plupart (tous?) Des systèmes de gestion de base de données SQL ont également une limite sur le nombre d'octets dans une rangée. Selon les dbms, il peut s'agir d'une limite stricte (impossible de créer une table pouvant stocker plus de 8 Ko d'affilée) ou d'une limite logicielle (certaines colonnes peuvent être déplacées vers un autre emplacement de stockage dans la base de données, affecte la performance). –