0

約300〜400レコードを含むDBがあります。次のような30個のレコードをフェッチするための簡単なクエリを作成できます。

SELECT * FROM table
WHERE isValidated = false
LIMIT 30

DBテーブルの内容についてもう少し。isValidatedという名前の列があり、(正しく推測したように)trueまたはfalseの2つの値のいずれかを取ることができます。クエリの後、いくつかのレコードを検証する必要があります(isValidated = true)。30レコードの各束から約5〜6レコードです。これに対応して、各クエリの後に、前のクエリからレコード(isValidated = false)をフェッチします。実際、私はそのようなアプローチでテーブルの最後に到達することは決してありません。

検証プロセスはJava+Hibernateで行われます。私はHibernateを初めて使用するため、この単純なクエリを作成するためにCriterionを使用します。

そのようなタスクのベストプラクティスはありますか?フラグフィールド(すでにフェッチされたレコードをマークする)を追加したバリアントは不適切です(このDBの過剰設計)。おそらく、すでに処理されたレコードが保存される仮想テーブルなどを作成する機会があります。ところで、すべてのレコードが処理された後、それらの処理を再開することが計画されています(一部のレコードを検証する必要がある可能性があります)。

よろしくお願いします。

4

1 に答える 1

2

いくつかの解決策を想像できます:

  1. すべてをメモリに保存します。レコードは 400 件しかありませんが、この数が少ないことを考えると、これは完全に優れたソリューションになる可能性があります。
  2. 一意の列 (PK など) で order by 句を使用し (とにかく行う必要があります)、最後に読み込まれたレコードの ID を保存し、次のクエリで必ず使用するようにします。where ID > :lastId
于 2012-05-18T20:28:01.020 に答える