HBaseを使用して時系列データを保存します
質問
使用しようとしています hbase 時系列データを保存するには。現在、セル内のバージョンとしてタイムシリーズを保存しているモデル。これは、セルが何百万ものバージョンを保存することになる可能性があり、この時系列のクエリは、Getクラスで利用可能なSetimerangeメソッドを使用してさまざまなバージョンを取得することを意味します。 hbase.
例えば
{
"row1" : {
"columnFamily1" : {
"column1" : {
1 : "1",
2 : "2"
},
"column2" : {
1 : "1"
}
}
}
}
これは、hbaseに時系列データを保存するための合理的なモデルですか?
データを複数の列に保存する代替モデル(列全体でクエリすることは可能です)または行はより適切ですか?
解決
ここに時系列を保存するためにバージョン化を使用する必要はないと思います。うまくいかないからではなく、その特定のユースケースのために設計されておらず、他の方法があるからです。
時系列を列予選としてタイムステップとして保存することをお勧めします。値はデータ自体になります。何かのようなもの:
{
"row1" : {
"columnFamily1" : {
"col1-000001" : "1"
"col1-000002" : "2"
"col1-000003" : "91"
"col2-000001" : "31"
}
}
}
}
ここで良いことの1つは、HBaseが列予選を並べ替えられた順序で保存することです。したがって、時系列を読むときは、アイテムが順番に表示されるはずです。
もう1つの現実的なオプションは、Rowkeyの最初の部分としてレコードの識別子を持つことですが、Rowkeyにも時間を踏むことです。何かのようなもの:
{
"fooseries-00001" : {
"columnFamily1" : {
"val" : "1"
}
}
}
"fooseries-00002" : {
"columnFamily1" : {
"val" : "2"
}
}
}
}
これには、特定のシリーズで範囲スキャンを行うのは非常に簡単な機能があります。たとえば、Fooseriesの手順104から199を引き出すことは、実装して効率的になるためにかなり些細なことです。
これの欠点は、シリーズ全体を削除することであり、もう少し管理と同期が必要になります。もう1つの欠点は、MapReduce Analyticsがこのデータについてあらゆる種類の分析を行うのに苦労することです。上記のアプローチにより、時系列全体が1つに渡されます map()
ここに電話して、 map()
各フレームに対して呼び出されます。
他のヒント
もし私がHBaseで時系列ソリューションを構築するなら、私は間違いなく見ています http://opentsdb.net/ SutumbleUponによるオープンソースリリースは、SUが内部で使用されているため、安定して継続的なサポートを受けていると判断します。
を見てみましょう zohmg.
実際、名前の紙があります: 「大規模な時系列データセット分析のためのHBaseの3次元データモデル」(2012) (スライドのみ)質問者が提案したように、HBaseのバージョンフィールドを悪用するデータモデルのパフォーマンスが向上したことを示しています。しかし、それは無限の「バージョン」を保持するためではなく、細胞のバケツ(1時間または1日のsensordata)を保持するためではありませんでした。
+1 OpentsDBの場合、時間ベースのロールアップクエリを簡素化するために多くのトリックを行います。
元の質問に関しては、必要なだけ多くのセルバージョンを持つことができます(制限はありません)。パフォーマンスペナルティはありません。「GET」はHBaseでスキャンとして実装され、Setimerangeは非常に効果的なフィルターです。