Contactお問い合わせ
お気軽にお問い合わせください。
超高速汎用 ソート/マージ ライブラリー
(データベース 分析、再構築)
Opttech Sort for Windowsは、
データベースファイルから抽出した様々な形式のデータを
ソート(並べ換え)、マージ(併合)、条件による抽出、集計などを行う
テキストファイルの扱いに慣れたプロフェッショナルに最適のツールです。
コマンドラインおよび Windows ベースの
スタンドアローンでの使用はもちろんのこと、
Visual Basic、C++、Delphi など各種高級言語からの
サブルーチンとして使用することも可能です。

データベースシステムにはデータ処理機能が予め用意されてはいますが、それらの機能はデータベースサーバ上で実行されるので、同時に多くのユーザが利用するとデータベースシステムのパフォーマンス低下を引き起こしかねません。そのため個人レベルのデータ分析や集計は、一旦抽出したデータを使用して処理したほうが効率的なことが多いのです。

Opttech Sort for Windows はデータベースの再構築にも非常に有用です。外部データが予めソート済みであれば、データベースへのロード時間を著しく短縮することが可能になります。また、重複データや不要データの削除、テーブル内容の再構築、特定のデータ内容の一括変更なども、ロード前の外部データレベルでの処理のほうが容易です。

例えばインターネットでのアクセスログなど大量のテキストログの分析や集計に Opttech Sort for Windows は最適です。一般的なフィールドに加え、IPアドレスをソートキーとして使うことができるため、不正アクセスの解析やマーケティングデータの分析などに威力を発揮します。
| レコード件数 | ファイルサイズ | 処理時間(ソート) | 処理時間(セレクト) |
|---|---|---|---|
| 10,000 | 800KB | 0.05 秒 | 0.02 秒 |
| 50,000 | 4MB | 0.39 秒 | 0.05 秒 |
| 100,000 | 8MB | 0.81 秒 | 0.10 秒 |
| 500,000 | 40MB | 4.72 秒 | 0.42 秒 |
| 1,000,000 | 80MB | 10.06 秒 | 0.82 秒 |
Private Declare Sub Sortvb Lib "OTSW32.DLL" Alias "s_1mains" _ (ByVal Infile$,ByVal Outfile$,ByVal Ctlstmt$,Numrec&,Retcode&) Private Sub cmdStartButton_Click() Infilev$ = txtInfile.Text Outfilev$ = txtOutfile.Text Ctlstmtv$ = txtCtlstmt.Text Call Sortvb(Infilev$, Outfilev$, Ctlstmtv$, Numrecv&, Retcodev&) txtNumrec.Text = Str$(Numrecv&) txtRetcode.Text = Str$(Retcodev&) End Sub
/* C program calling Opttech Sort with records */
char io_area[100], *result;
unsigned int func, io_len, ret_code;
FILE *f1, *fopen();
/* set up for initialization call func=1 */
func = 1;
strcpy(io_area,"sort(1,10,c,a)");
io_len = strlen(io_area);
RSMSCS(func, io_area, &io_len, &ret_code);
if (ret_code != 0) sorterr(ret_code);
if ((f1 = fopen("samp.dat","r")) == NULL) {
printf("can not open file \n"); exit(1); }
/* pass records to sort func=2 */
func = 2; result = fgets(io_area, 100, f1);
while(result != NULL) {
io_len = strlen(io_area);
RSMSCS(func, io_area, &io_len, &ret_code);
if (ret_code != 0) sorterr(ret_code);
result = fgets(io_area, 100, f1);
}
/* get sorted records back from sort func=3 */
func = 3;
while(ret_code != 1) {
RSMSCS(func, io_area, &io_len, &ret_code);
if (ret_code == 1) break;
if (ret_code > 1) sorterr(ret_code);
io_area[io_len-1] = '\0';
printf("%s\n",io_area);
}