2013-08-13 28 views
9

AmazonのDynamoDbデータベースに1M以上の異なる時系列を保存したいと思います。各時系列には約50Kのデータポイントがあります。データポイントはタイムスタンプと値で構成されます。AWS DynamoDbで時系列を保存する

アプリケーションが頻繁に時系列に(すべての時間を)新しいデータポイントを追加すると、分析のための時間から時間まで(通常は全体の時系列)時系列を、取得します。

データベースをどのように構造化すればよいですか?私はtimeseriesごとに別のテーブルを作成する必要がありますか?または、すべてのデータポイントを1つのテーブルに入れる必要がありますか?

+4

あなたは何を使い終わったのですか? – Hugo

+3

あなたはどのようなデザインを使い始めましたか? – Narayan

答えて

12

あなたのデータは不変であると仮定するとサイズを与え、あなたはAmazon Redshiftを検討する必要があります。これは、ペタバイトサイズのレポートソリューション向けに書かれています。

Dynamoでは、私はいくつかの実行可能な設計を考えています。最初は複合ハッシュ/範囲キー(両方の文字列)を使用して1つのテーブルを使用できます。ハッシュキーは時系列名であり、範囲キーはISO8601文字列(アルファベット順は時系列順であるという心地よい性質を持つ)としてのタイムスタンプであり、各項目には特別な属性があります。価値'。これにより、時系列(hashKeyの等価性に関する問合せ)と時系列のサブセット(hashKeyの等価性およびrangeKey BETWEENの問合せに関する問合せ)からすべてを選択する能力が得られます。しかし、主な問題は「ホットスポット」問題です。内部的に、DynamoはデータをhashKeyでパーティション化し、すべてのパーティションにProvisionedReadCapacityを分散します。したがって、1秒間に1000KBの読み込みをすることはできますが、100個のパーティションがある場合は、各パーティションに1秒間に10KBしかなく、単一の時系列(単一のhashKey)からすべてのデータを読み取ると、1つのパーティションだけがヒットします。だから、1000KBの読み込みでは1秒に1MBが得られると思うかもしれませんが、もし10MBが保存されていれば、読んだほうがずっと長くなります。上側に

、DynamoDBのは非常に高いが高価なスケーリングに上限有します。あなたが望むのであれば、100,000のRead Capacity単位を支払うことができ、すべてのデータに対して1秒未満の応答時間があります。

もう一つの理論的なデザインは、別のテーブル内のすべての時系列を格納するだろうが、私はDynamoDBのは、テーブルの百万に拡大することを意図しているとは思わないので、これはおそらくノー行くではありません。

あなたはどこかの間でテーブル10の「データを読み取ることはほとんどない」、データは表1に入り「非常に読み」、および他のすべてのデータ10個のテーブルにまたがって時系列を試してみて広がる可能性があります。これにより、プロビジョニングされたスループット/パーティション調整ルールを「ゲーム」させることができますが、デザインの複雑さは非常に高くなります。全体として、それはおそらくそれの価値はない。新しい時系列はどこにありますか?あなたはどこにいるのでしょうか?あなたはどのように時系列を動かすのですか?

私は私自身の経験からの読み込みのDynamoDBのは、これらの種類のいくつかの内部「破裂」をサポートと思うし、それは私の番号がオフになっている可能だ、とあなたはadequeteパフォーマンスが得られます。しかし私の判断はRedshiftです。

+0

私は、MySQLデータベースの単一の小さなEC2インスタンスで100K時系列を扱うことができます。それは非常に安いです。 Redshiftには非常に高価な余分な大型EC2インスタンスが必要です... – jQguru

0

各時系列をJSONなどにドリップしてS3に保存するのはどうですか?ほとんどの場合、Dynamoのような場所からの参照が必要です。

入力を処理するには、まだ赤方偏移が必要な場合があります。