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

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

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

例えばインターネットでのアクセスログなど大量のテキストログの分析や集計に Opttech Sort for Windows は最適です。一般的なフィールドに加え、IPアドレスをソートキーとして使うことができるため、不正アクセスの解析やマーケティングデータの分析などに威力を発揮します。
| レコード件数 | ファイルサイズ | 処理時間(ソート) | 処理時間(セレクト) |
|---|---|---|---|
| 約 1 万件 | 1,258 KB | 252.5 ミリ秒 | 297.6 ミリ秒 |
| 約5万件 | 6,332 KB | 291.9 ミリ秒 | 299.9 ミリ秒 |
| 約10万件 | 12,674 KB | 328 ミリ秒 | 300.5 ミリ秒 |
| 約50万件 | 64 MB | 593.3 ミリ秒 | 299.4 ミリ秒 |
| 約100万件 | 128 MB | 963.9 ミリ秒 | 299 ミリ秒 |
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);
}