リストHOME  リストOpen Source

データ検索(インデックス化)

概要

 データ検索のサンプルとして、個人情報検索基能のソースコードを既に公開していますが、ここでは、その検索機能を改善して、さらに検索処理を高速化してみたいと思います。データのインデックス化と呼ばれている手法を利用して、二分木探索で検索するデータの範囲を、一気に絞り込むことで、高速化を実現します。既に、公開しているデータ検索処理と比べると、数段とパフォーマンスが改善されていると思います。

 ソースコードは、Microsoft社の製品 エクセル向けに書いたものなので、利用するには、ご使用のコンピュータに、エクセルがインストールされていることが、必須条件です。


 以下は、サンプル画面です。

インデックス化のサンプル


サンプルデータについて

 サンプルデータは、10000件の架空の個人情報です。このデータは、個人情報テストデータジェネレーターにより、作成したサンプルデータです。従って、サンプルデータに含まれる個人名などの情報は、実在の人物とはまったく関係ありません。

個人情報テストデータジェネレーター
https://testdata.userlocal.jp/

技術ポイント


改善案

   今回は、1文字目のインデックス化のみ実装しましたが、更に膨大なサイズのデータ検索となると、2文字目、3文字目のインデック化が有効な改善策になると思います。しかし、VBAのプログラム上で、これを実装しようとすると、リソースの消費量が、当然、膨大なものとなり、メモリが枯渇してしまい、非現実的なものとなってしまいます。 なので、ファイルシステムを利用した仕組みが現実的な改善策と思われます。

DATA_PATH\【一文字目のフォルダ】\【二文字目のフォルダ】\該当するデータファイル.dat

 このような、フォルダ構造のデータをあらかじめ、夜間バッチなどにより、作成しておけば実現できるのではないでしょうか。私自身、このやり方で、システム開発した経験はありませんが、理論的には、十分可能なはずです。
 また、更新のタイミングが夜間バッチでは、問題があり、変更されたデータをすぐに反映する必要がある場合は、差分(更新分)だけを、フォルダ構造に反映する仕組みを構築することが望ましいと思います。


インデックス化について

 インデックス化は、データ検索をインデックス参照により実現し、検索を高速化するための手法です。以下のToDoリストの検索を例にして簡単に説明してみたいと思います。上部がインデック化の前で、下部がインデックス化を実施後の図となっています。


インデックス化のサンプル


 インデックス化前は、データ数が3個で、これは、何か実施しなければならないToDoデータが存在するデータのみとなっています。日付を検索キーとして考えると、不連続なデータとなっています。これに対して、インデックス化を施した後のデータは、データ数が7個(1週間分という意味)、日付を検索キーとすると連続で抜けのないデータとなっています。

 こうすることで、無駄なデータが存在することになってしまうのですが、日付をインデックスとして、ToDoデータをインデックス参照により、取得することが可能になり、データ検索処理の高速化が実現できます。

 ちなみに、日付はVBAでは、基本的には、Date型で扱うのですが、実体はDouble型の倍精度実数で、1が一日分と換算できます。


ダウンロード

免責事項

 作者は、本ソフトウェアの使用または使用不能から生じるコンピュータの故障、情報の消失、その他あらゆる直接的及び間接的被害に関して一切の責任を負いません。

不具合の報告

 ご使用にあたり、改善の要望、不具合の発生等ありましたら、画面下のアドレスまで、ご連絡頂きますよう、宜しくお願いいたします。ご面倒、ご不便をお掛けしますが、宜しくお願いいたします。


休日判定・ページのフッター
管理者のメールアドレス