0

ユーザーが使用するアプリケーションの機能が継続的にテキスト ファイルに記録され、その後 (ピーク時間外) スケジュールされたアプリケーションがこれらのログ レコードを MS SQL Server ベースの RDBMS に挿入するアプリケーションがあります。ご想像のとおり、これにより大量のデータが生成されます (1 人のユーザー セッションで多数のレコードが生成され、数百人のユーザーがアプリケーションを 1 日中同時に使用しているため)。データベースには現在数百万のレコードがあり、主に日付範囲ベースのレポートを生成するために使用されます。このレポートは、データベースがパフォーマンスの問題を引き起こしている特定の日付範囲でどの機能が何回使用されたかを集計します。

これに対する直接的な解決策は、パフォーマンスを向上させるためにデータベースの設計を修正することであることに気付きました (可能な場合は!)。しかし、SQL 設計の変更を提案するつもりはありません。上記で説明したものと同様のデータセットを使用して NoSQL データベースを評価することになっています。

NoSQL データベースの調査を開始すると、さまざまな種類の NoSQL データベースが殺到しています。私の最初の調査では、グラフ指向データベースを除外できると確信しています。Key-Value ストアも、DynamoDB に関するこのペーパーから理解したように、ほとんどの場合、キーのみでクエリを実行できるため、私の目的には不適切なようです。要件は日付範囲に関する大量のクエリですが、機能によるクエリのオプションが望ましいです。

これにより、ドキュメント指向データベースと列ファミリー ストアが残ります。

これらすべての点に基づいて、私の場合にどのデータベースを提案しますか?

PS: クラウド上でデータを移行することは想定されていないため、クラウドベースのソリューションを提案しないでください!!!

4

2 に答える 2

0

RedisSSDBをお勧めします。組み込みのデータ型zsetは、時間ベースのデータを格納するのに理想的なデータ型です。シーケンスが保存されると(いつでも挿入および削除できます)、タイムスタンプで見つけることができます。

いくつかのコード スニペットを次に示します。

$ssdb->zset('z', 'a', 1384423054);
$ssdb->zset('z', 'b', 1384423055);
$ssdb->zset('z', 'c', 1384423056);
$items = $ssdb->zrange('z', 1384423054, 1384423057, $limit=100);

これら 2 つのデータベースの違いは、Redis がメモリのみ (バックアップ用のディスク) であるのに対し、SSDB はディスク ベースでメモリをキャッシュとして使用することです。

于 2013-11-14T09:59:27.413 に答える