Question Utilisation de HBase pour stocker des données de séries temporelles


Nous essayons d'utiliser HBase pour stocker des données de séries chronologiques. Le modèle que nous avons actuellement stocke les séries temporelles en tant que versions dans une cellule. Cela implique que la cellule pourrait finir par stocker des millions de versions, et les requêtes sur cette série temporelle récupéreraient une série de versions en utilisant la méthode setTimeRange disponible sur la classe Get dans HBase.

par exemple.

{
    "row1" : {
        "columnFamily1" : {
            "column1" : {
                1 : "1",
                2 : "2"
            },
            "column2" : {
                1 : "1"
            }
        }
    }
}

Est-ce un modèle raisonnable pour stocker des données de séries chronologiques dans HBase?

Le modèle alternatif de stockage des données dans plusieurs colonnes (est-il possible d'interroger les colonnes) ou les lignes est-il plus adapté?


14
2017-11-08 17:21


origine


Réponses:


Je ne pense pas que vous devriez utiliser le contrôle de version pour stocker la série chronologique ici. Non pas parce que cela ne fonctionnera pas, mais parce qu’il n’est pas conçu pour ce cas particulier et qu’il existe d’autres moyens.


Je vous suggère de stocker la série chronologique comme pas de temps comme qualificatif de colonne et la valeur sera les données elles-mêmes. Quelque chose comme:

{
    "row1" : {
        "columnFamily1" : {
            "col1-000001" : "1"
            "col1-000002" : "2"
            "col1-000003" : "91"
            "col2-000001" : "31"
            }
        }
    }
}

Une chose intéressante ici est que HBase stocke les qualificatifs de colonne dans l'ordre trié, donc lors de la lecture de la série chronologique, vous devriez voir les éléments dans l'ordre.


Une autre option réaliste serait d’avoir l’identifiant de l’enregistrement en tant que première partie de la clé de ligne, puis d’avoir également le pas de temps dans le raccourci clavier. Quelque chose comme:

{
    "fooseries-00001" : {
        "columnFamily1" : {
            "val" : "1"
            }
        }
    }
    "fooseries-00002" : {
        "columnFamily1" : {
            "val" : "2"
            }
        }
    }

}

Cela a la bonne caractéristique que ce sera assez facile de faire des analyses de plage dans une série particulière. Par exemple, mettre en place les étapes 104 à 199 de fooseries sera assez simple à mettre en œuvre et efficace.

L'inconvénient de celui-ci est la suppression d'une série entière qui nécessitera un peu plus de gestion et de synchronisation. Un autre inconvénient est que l’analyse de MapReduce aura du mal à effectuer des analyses sur ces données. Avec l'approche ci-dessus, toute la série chronologique sera transmise à un seul map() appeler, alors qu'ici, map() sera appelé pour chaque image.


17
2018-04-26 03:19



Si je devais construire une solution de séries chronologiques sur HBase, je regarderais certainement http://opentsdb.net/ une version open source de StumbleUpon, car celle-ci est utilisée en interne par SU, je la considérerais stable et bénéficierait d’un support continu.


6
2017-12-01 06:05



Jeter un coup d'œil à Zohmg.


3
2018-01-09 03:37



En fait, il y a un article intitulé: "Un modèle de données tridimensionnel dans HBase pour l'analyse des séries de données chronologiques volumineuses" (2012) (seulement des diapositives) qui montre des performances améliorées pour un modèle de données qui exploite le champ de version de HBase, comme l’a proposé l’intervenant. Mais il n'a pas été conçu pour contenir des "versions" infinies, mais un seau de cellules (Sensordata pour une heure ou un jour).


2
2018-06-12 21:59



+1 pour openTSDB Il effectue de nombreuses astuces pour simplifier les requêtes de cumul temporelles.

Quant à la question originale, vous pouvez avoir autant de versions de cellules que vous le souhaitez (il n'y a pas de limite). Il n'y a pas de pénalité de performance, 'Get' est implémenté comme Scan dans HBase et setTimeRange est un filtre assez efficace.


0
2018-06-16 22:59