2016-04-26 46 views
5

Am Dynamodbの新機能DynamoDBには100kを超える項目を持つテーブルがあります。また、この表は頻繁にリフレッシュされます。この表では、関連データベースの世界でこれと似たようなことができるようにしたいと考えています。テーブルからどのように最大値を得るかです。Amazon Dynamodbで集計関数を使用する方法

答えて

16

DynamoDBはNoSQLデータベースであるため、データのクエリ方法は非常に限定されています。 DynamoDB APIを直接呼び出してテーブルから最大値などの集計を実行することはできません。この問題を解決するには、さまざまなツールやアプローチを検討する必要があります。

あなたが考えることができる可能な解の数があります。

が、これはおそらく非常に悪い考えであるあなたのテーブル内の複数の100kの項目を表スキャン

を実行します。テーブルスキャンはすべての単一項目を読み込み、アプリケーション側のロジックに最大値を指定させることができます。これは実用的な解決策ではありません。

を使用すると、別のDynamoDBのテーブルのインデックスを維持するために、DynamoDBのストリームとラムダ関数を使用することができ、あなたのユースケースに応じて、DynamoDBの

にインデックスをマテリアライズド。あなたのテーブルが書き込み専用で、削除も削除もない場合は、別のテーブルに最大値を保存し、新しいレコードが挿入されると、それらを比較して必要な更新を実行できます。

このアプローチは、いくつかの制約条件の下で実行可能ですが、一般化された解決策ではありません。

は赤方偏移は、簡単にこれらのタイプの計算を実行することができ、非常に強力なビッグデータプラットフォームであるのに対しアマゾン赤方偏移

DynamoDBのは、そのような最大などの分析業務を行うためのものではありません使用して分析を行います。 DynamoDBインデックスと同様に、分析目的でテーブルのほぼリアルタイムのコピーを保持するためにレコードが挿入されると、DynamoDBストリームを使用してRedshiftにデータを送信できます。

オフラインまたは分析ソリューションをさらに探している場合は、これが良い選択です。

アナリティクスElasticsearchを使用して実行

DynamoDBのデータ耐久性に強い保証を持つ強力なNoSQLの溶液であるが、Elasticsearchは、最大のようなクエリを可能にし、これらの集計は、スライスしてダイシングすることができる非常に柔軟なクエリ方法を提供どんな属性値でもリアルタイムで。上記のソリューションと同様に、DynamoDBストリームを使用して、レコード挿入の更新と削除をリアルタイムでElasticsearchインデックスに送信できます。

DynamoDBに固執したいが追加のクエリ機能が必要な場合は、特にElasticSearchサービスを使用してElasticsearchクラスタを完全に管理する場合には、これは本当に良いオプションです。 ElasticsearchはDynamoDBテーブルを置き換えるものではなく、同じデータの簡単に検索可能なインデックスであることに注意してください。

だけ

に明白な解決策をSQLデータベースを使用するには、SQLの要件を持っているならば、SQLベースのシステムへのNoSQLベースのシステムから移動しています。AWSのRDSは、管理されたソリューションを提供します。 DynamoDBは多くのメリットをもたらしますが、ユースケースがSQLソリューションに向かっている場合、最も簡単なことは、それに対抗せずにソリューションを変更することかもしれません。

これは、SQLベースのソリューションまたはNoSQLベースのソリューションが優れているとは言えません。それぞれの賛否両論があり、それぞれのユースケースに応じて異なりますが、考慮するオプションは間違いありません。

0
+1

これはDynamoDBのに接続されたアマゾンEMRクラスタを介して利用可能です。 DynamoDB自体で使用可能な機能ではありません。 DynamoDBストリームに接続されたセカンダリサービスの使用に反対しない場合は、[設定のチュートリアル(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Tutorial.html)集約クエリの場合 – Hal

関連する問題