OCRソフトでコスト削減

【RDBMS】に関する知恵袋

【質問】
OCRのソフトのコストについて言及すると、RDBMSで1000万件以上のレコードがあった場合の速度的な問題の解決方法は?RDBMSの知恵袋というと、RDBMSはSELECT文を使うと必ず全ての行にアクセスすると思います。1000万件のレコードの場合どのように速度面を考慮すればいいでしょうか?そこまで含めてデータベースソフトに丸投げでいいですか?RDBMSの知恵袋を見てみると、どのような対策が講じられているのか教えて下さい。また、今回は1000万件としましたが、1000万件では速度的な問題がほとんど発生しないかもしれません。どの程度のレコード数で速度的な問題が発生するかも併せて教えて下さい。OCRのソフトのコストの解説については以上です。
【解答】
>RDBMSで1000万件以上のレコードがあった場合の速度的な問題の解決方法は? >RDBMSはSELECT文を使うと必ず全ての行にアクセスすると思います。「必ずすべての行にアクセスする」とは、どういう意味でしょうか?主要なテーブルの母体データ件数が数千万件に達するといったシステムでも、そのすべてのデータを操作対象とするような業務は、全体から見ればほんの一部です。また、特定の行だけが操作対象なのに、OCRのソフトのコストなら、全件を無駄にサーチさせるといったことはおきないように、インデクスの定義、SQLの作成基準の制定&チェックなどを行います。多くの業務では、1回の処理で操作対象になるのは、1件~数件程度です。適切なインデクス定義、インデクスを活用し、データを絞り込める検索条件などのSQLの記述を行えば、インデクスを縦に辿ることができ、母体データ件数が多量であっても、極端に性能劣化することはありません。インデクスの段数は、「1ページで管理できるキー数」と「母体データ件数」の対数の関係になり、概算できます。母体データ件数=1000万件、キー長=8、インデクスを管理するページ長=4kとすると、ざっくりした概算では、インデクスは、4段程度になります。つまり、「=」条件、範囲条件などで絞り込みができる場合は、行データへのI/Oを含めて5回程度のI/Oで目的のデータを得られます。絞り込んだ検索中心の業務を行っている場合は、上位インデクスは、DBのI/Oバッファ(キャッシュ)に乗っている場合が多く、実I/Oはさらに少なくなる可能性が高いです。多量データを管理するシステムでは、パーティショニングなどで、負荷分散を行うといったこともよく行われます。RDBMSによっては、SQLを内部的に分割し、「パーティション毎にクエリを発行する」という子クエリを作り、並列処理させるといった機能を実装しているものもあります。多量の参照業務は、ホットスタンバイの待機系、あるいは参照専用ノードなどで、行うといったことも行われます。RDBMSの知恵袋について言及すると、多量データの操作でもっとも問題になるのは、他の回答者さんの回答にもあるように、「多量データのランダムアクセス」です。また、「多量データのソート」も、システム全体への負荷、性能を出す上で大きな問題になります。主に利用されるキー値の順に、なるべく近傍に行データを格納するという、クラスタ化といった機能を実装しているRDBMSがいくつかあります。この方式では、クラスタ化したキー順アクセスで、高性能を出すことが可能です。ランダムアクセスがリアルタイム処理でなくバッチ処理であれば、ランダムアクセスするキーをソートして、RDBMSの知恵袋についてです。また、キー順処理にするといった対処を行う場合もあります。データを絞り込みしていない状態で、ソートを伴う操作を行うのは、性能的には致命的です。OCRのソフトのコストの概要に触れると、インデクスは、検索での絞り込みだけでなく、「作業メモリ、作業ファイルを使った実ソートの抑止」にも活用できます。大規模&高性能を要求されるようなシステムでは、「作業メモリ、作業ファイルを使った実ソートが発生するSQLの記述を禁止」といった規制をするといったことも行われます。実際にどのように実現するかというと、DBA、アプリ開発部署、顧客などと調整を行い、「本当に必要なインデクス」、業務を実現する上で、「本当に必要な検索条件」などの操作などを分析、性能を確保するために、一部の業務での「検索条件の項目の洗い直し」などを調整します。また、規模の大きなシステムでは、DBミドルを作成し、プログラマが性能を出すことを無視したSQLを作ってしまわないようにするといった方法を採用することも少なくありません。全件操作するようなSQLでは、クラスタ化インデクスを除いては、インデクスを使うより、母体データだけを検索した方が性能を出せる場合もあり、RDBMSのオプティマイザも、そういった実行計画を選択する場合もあります。多量データの順検索などで威力を発揮する、一括先読みなどの仕組みを実装しているRDBMSも少なくありません。これ以外に、例えば1000万件の内、アクセス頻度が極めて低いデータについては、別方式で管理するといったことも行われます。HDDなどのハードのキャッシュ、I/O性能の向上などに期待し、導入するといったことも行われます。数千万件以上といった多量データを処理する場、メモリに関するパラメタチューニングだけでは、到底対処できないケースがあります。そのため、これまで述べた負荷分散、インデクスの適切な定義、SQLの記述方法の規制、DBミドルの作成、アクセスされることが極めて稀なデータは別方式で管理など、そのシステムにあった対処方法を組み合わせることでシステムを構築していきます。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1162933171
Webサービス by Yahoo! JAPAN

その他関連ワード