2012-04-14 3 views
12

Je planifie un projet parallèle dans lequel je traiterai des données de séries temporelles et je voudrais essayer une de ces nouvelles bases de données NoSQL et je cherche une recommandation.Quelle base de données NoSQL utiliser pour les données de type Séries sparse?

Pour un ensemble (croissant) de symbols, j'aurai une liste de (time, value) tuples (augmentant avec le temps). Tous les fichiers symbols ne seront pas mis à jour. certains symbols peuvent être mis à jour tandis que d'autres peuvent ne pas, et complètement nouveau symbols peut être ajouté.

donc La base de données devrait permettre:

  • Ajouter des symboles avec la liste initiale d'un élément (tuple). Par exemple. A: [(2012-04-14 10:23, 50)]
  • Mettre à jour les symboles avec un nouveau tuple. (Ajouter ce tuple à la liste de ce symbole).
  • Lire les données pour un symbole donné. (Idéalement, permettez-moi de préciser le délai dans lequel les données doivent être retournées)

Les opérations de création et de mise à jour devraient être atomiques. S'il est possible de lire plusieurs symboles à la fois, ce serait intéressant.

Les performances ne sont pas critiques. Mises à jour/créations se produira environ une fois toutes les quelques heures.

+0

[Stack Overflow est pas un moteur de recommandation] (http://meta.stackexchange.com/a/128562/172496) –

Répondre

17

Je crois que littéralement toutes les bases de données majeures de NoSQL soutiendront cette exigence, particulièrement si vous n'avez pas réellement un grand volume de données (qui pose la question, pourquoi NoSQL?). Cela dit, j'ai récemment dû concevoir et travailler avec une base de données NoSQL pour les données de séries chronologiques. Je peux donc donner quelques informations sur cette conception, qui peut ensuite être extrapolée pour tous les autres.

Notre base de données a été Cassandra choisie, et notre conception a été comme suit:

  • Un keyspace unique pour tous les 'symboles de
  • Chaque symbole était une nouvelle ligne
  • Chaque entrée de temps était une nouvelle colonne pour cette rangée pertinente
  • Chaque valeur (peut être supérieure à une valeur unique) a été la partie de la valeur de l'entrée de temps

Cela vous permet de réaliser tout ce que vous avez demandé, notamment de lire les données pour un seul symbole et d'utiliser une plage si nécessaire (appels de plage de colonnes). Bien que vous disiez que la performance n'était pas critique, c'était pour nous et c'était assez performant aussi - toutes les données pour un seul symbole sont triées par définition (tri par nom de colonne) et toujours stockées sur le même nœud (pas de communication croisée pour les requêtes simples). Enfin, cette conception se traduit bien dans d'autres bases de données NoSQL qui ont des colonnes dynamiques.

Suite à cela, voici quelques informations sur l'utilisation de MongoDB (et collections plafonnés si nécessaire) pour un magasin de séries chronologiques: MongoDB as a Time Series Database

Enfin, voici une discussion de SQL vs NoSQL pour les séries temporelles: https://dba.stackexchange.com/questions/7634/timeseries-sql-or-nosql

Je peux ajouter à cette discussion ce qui suit:

  • La courbe d'apprentissage pour NoSQL sera plus élevée, vous n'obtiendrez pas la flexibilité et la fonctionnalité supplémentaires gratuitement en termes de «coûts souples». Qui supportera cette base de données de manière opérationnelle?
  • Si vous pensez que cette fonctionnalité va croître à l'avenir (soit plus de champs à ajouter à chaque entrée de temps, soit une plus grande capacité en termes de nombre de symboles ou de taille des séries chronologiques), alors allez définitivement avec NoSQL. L'avantage de la flexibilité est énorme, et l'évolutivité que vous obtenez (avec la conception ci-dessus) à la fois par symbole et par nombre de symboles est presque illimitée (je dis presque illimité - les colonnes maximales par ligne sont dans les milliards, maximum les rangées par espace clé sont illimitées je crois).
4

Jetez un oeil à opentsdb.org une base de données de séries temporelles opensource qui utilise hbase. Ils ont été intelligents sur la façon dont ils stockent le TS. Il est bien documenté ici: http://opentsdb.net/misc/opentsdb-hbasecon.pdf

+0

+1 pour opentsdb: il est une solution OSS parfaite pour stocker énorme séries chronologiques (comme les données de tick forex). La configuration de Hbase peut être fastidieuse, mais les python collectors d'OpenTsdb (les transacteurs de tri d'OpenTsdb) facilitent le stockage à la volée des données en streaming. –

Questions connexes