2012-02-17 3 views
0

データベースの日付範囲が重複しないようにする必要があります。私はこれをデータベースにとらわれないようにしたいと思っています - それはデータベースangostic(http://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%ではない)であっても十分な問題です3a%3a%3aP11_QUESTION_ID:474221407101)。データベースに書き込むアプリケーションは1つだけです。いくつかの読者が読んでおり、読書のパフォーマンスが重要です。書き込みを行うアプリケーションはスレッド化されています(Webアプリケーションであり、クラスタ内にあります)。シングルプロセスワーカーまたはその他のDB特有のもの?

私は、一度に1つのプロセスしか書いていないことを確認するのが最も簡単かもしれないと考えていました。これは正しいアプローチですか?もしそうなら、私はちょうどいくつかの要求キューを聞いて、それらを受け取る順序でこれらの要求を処理する単一のスレッドアプリケーションを持っている必要がありますか?とにかくこれらのリクエストはすべてデータベースに格納されており、created_atの日付とステータスを使用して処理することを考えていただけです。

+0

私の最初の考えは、どのDMLでも起動し、ビジネスルールを適用するトリガーを作成することです。 Oracleに対してはおそらくうまくいくでしょうが、mySqlについてはわかりません。すべてのDBは異なり、機能や機能が異なるため、1つのサイズの幸運はすべてのアプローチに適合します。 – tbone

答えて

0

この問題を解決する1つの方法は、すべての日をDATE値として含むテーブルをセットアップすることです。このようなSoemthing:

CREATE TABLE MY_SCHEDULER (
    SCHEDULED_DATE DATE PRIMARY KEY, 
    OWNER_ID NUMBER(8) 
); 

SCHEDULED_DATEは1日に相当するであろうと00:00時点で格納されます。主キーの整合性は、同一のSCHEDULED_DATEで2つのレコードを挿入できないことを保証します。 OWNER_IDは、その日付を "所有している"人への参照です。 DATE変数がOracleでは7バイトであり、その数は大きすぎず(最大22バイト)、ストレージに問題はないはずです。 100年分の日付は約10 MBに過ぎません!

関連する問題