2016-08-19 3 views
1

モバイルデバイスからデータを収集するREST APIがあります。各モバイルデバイスは、APIにデータを送信する前に、データをある程度制限してキャッシュします。したがって、たとえば、4分ごとに、各モバイルデバイスは50個のデータ行をAPIに送信します。一行は、次のようになります。多数の並列バルクインサートのためのデータベース/ツールの選択

{"uid": "123", "lon": "12.1", "lat": "12.1", "vel": "145", "timestamp": "12345"} 

だから、1000の並列書き込みとなり、各書き込みが50、「行」を挿入すること(最悪の場合)に起こるかもしれない1000年のアクティブデバイスが存在します例えば。実際には、APIは50k行をデータベースに挿入しようとします。さらに、各デバイスが毎日2時間毎にデータを送信する場合、毎日1 500,000(1.5 milion)の新しい行があります。

その後、収集されたすべてのデータは、大量の別のサービスに送信されます(X行がDBに表示されるのを待つ何らかのワーカーによって、外部サービスに送信されます)。 7日を超えるすべての行が削除される可能性があります。また、APIエンドポイントの1つは、「uid」(user_id)フィールドと「timestamp」フィールドに基づいて過去7日間のデータを取得できます。

問題は、多くの書き込み/秒を処理するために使用するデータベース(またはデータベース/ツールの組み合わせ)ですか?

私の最初のアイデアは、非常に簡単にスケーラブルである(私は書き込み/秒を買うことができる)ので、DynamoDBを使用することでしたが、一瞬で50kの書き込みを処理することは不可能です。だから私の2番目のアイデアは、バックグラウンドワーカー/プロセスによってプライマリデータベースに挿入される50行のチャンクをキャッシュするために、いくつかの中間データベースを使用して、同じ瞬間に処理されたチャンクの制限を設けることでした。

私は今日、携帯端末(GPSの位置、速度など)から多くのデータを収集するアプリが多いと信じています。

データベース固有の質問だけでなく、dbaの質問もしていません。

答えて

1

完全に索引付けされた表に150万行を挿入したばかりです。私は1つのスレッド、PostgreSQLデータベースを使用して、私のノートブックで走った。全部で45.1秒かかりました。

これがあなたの毎日のデータであれば、ホイールを発明しても気にしないでください。 PostgreSQLとマルチコアサーバを入手してください。

関連する問題