私は一種の DWH プロジェクトに参加しています (完全ではありませんが、まだ)。そして、私たちが常に遭遇するこの問題があり、より良い解決策があるかどうか疑問に思っていました. フォロー
次のような、ユーザーが経験したすべての状態を含むレコードを含むいくつかの大きなファイルを受け取ります。
UID | State | Date
1 | Active | 20120518
2 | Inactive | 20120517
1 | Inactive | 20120517
...
そして、私たちは通常、各ユーザーの最新の状態に関心があります。これまでのところ、少しソートするだけで、希望どおりの方法で取得できました。唯一の問題は、これらのファイルは通常大きいことです.. 20 ~ 60 GB のように、並べ替えのロジックが通常それほど単純ではないため、これらのファイルを並べ替えるのが面倒な場合があります。
私たちが一般的に行っていることは、すべてを Oracle にロードし、中間テーブルとマテリアライズド ビューを使用して実行することです。それでも、パフォーマンスが私たちを悩ませることがあります。
20 ~ 60 GB は大きいかもしれませんが、それほど大きくはありません。つまり、これらのレコードを処理するには、もう少し専門的な方法である必要がありますね。
この問題に取り組むには、次の 2 つの基本的な方法があると思います。
1) DBMS、スクリプト、およびコンパイルされたものの外部でのプログラミング。しかし、何かを開発するためにもっと多くの時間が費やされない限り、これはあまり柔軟ではないかもしれません。また、ボックスのリソースを管理するために忙しくしなければならないかもしれませんが、それについて心配したくありません。
2)すべてをDBMS(私の場合はOracle)にロードし、提供されるツールを使用してデータをソートおよびクリップします。これは私の場合ですが、すべてのツールを使用しているか、単に Oracle 10g の正しい方法で行っているかはわかりません。
質問は次のとおりです。
上記のような何百万もの履歴レコードを含む 60 GB のファイルがあり、ユーザーは DB に各ユーザーの最後の状態を含むテーブルを必要としています。
あなたたちはどうしますか?
ありがとう!