![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?5a7ff87)
No.7ベストアンサー
- 回答日時:
>Perl からSQLが呼べないかなぁと
>PasageSQLやMySQLだと一般プロバイダのCGI環境では使えないから
SQL自体はそれぞれのモジュールがあると思います
(少なくともPostgresはPg.pmがあります)
一般プロバイダでは使えませんが、海外などのFreeWebサービスではMySQLやPostgresを遣わせてくれる所もありますよ
また、DataBaseは通常Networkアクセスできるように作ってあるので設定まで出来る所であれば、webサーバ(Perlプログラムが動いてる所ですね)とDBサーバは別々に出来ます
またODBCドライバモジュールがあれば大体のDetabaseは使えるはずです(多分探せばODBC用perl moduleがあると思います・・・自信無いですが(^^;)
SQL Serverの内部解説書ですが、私が読んだのは
出版社: リックテレコム
書名: リファレンス WindowsNTによるSQL Server6.5チューニングガイド
著者: 飛鳥 亮
定価: 2800円(税別)
ISBN: 4-89797-211-6
です
ちょっと古い本ですが、まだ手に入るようです>参考URLを参照してください
>オープンソースのデータベースソフトがあるのなら、それもご紹介いただきたいんですが……(^_^;
オープンソースのデータベースソフトはPostgreSQLやMySQLがそうですよ(^^;
PostgreSQLは
http://www.sra.co.jp/people/t-ishii/PostgreSQL/
からダウンロードできるはずです
MySQLはこちら
http://www.softagency.co.jp/mysql/
参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4897972 …
ありがとうございます。
まあ、「手軽に使える」ことを売りにしてますからね。少なくともそれだけは誰にも負けないはずです(笑)
解説書は、財布と相談したうえで、ヒモが緩んでくれれば買いたいと思います(笑)
URLの方はさっそくソースを落としに行きたいと思います。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?5a7ff87)
No.6
- 回答日時:
なんかDatabaseのようなものを作ろうとしてらっしゃるみたいですね・・・
であれば一番手っ取り早いのはDatabaseに突っ込んでSQLでQueryするってのが一番早いですが(笑)
結局自分で実装するにしてもDBと同じ手法を使う事になるでしょう
データを一意に識別出来るindexを付けてやり
それぞれの項目毎にB木やバランスツリー、ハッシュなどで一意識別できるindexとキーを関連付けてやります
それで検索条件毎にそれぞれの項目毎のツリーなどからindexを限定してやって、最後にindexから実体を出力してやる、という方法が使えると思います
また、検索条件の最適化を行うと言う事も(条件によっては)出来るでしょう
・・・以上の事は実際のdatabaseがやってる事です(^^;
MS SQL Serverなどの内部動作解説本などがあるのでそういう物を読むか、OpenSourceなDatabaseのSourceCodeを調べるのもいいかもしれません
そぉです(^_^; Perl からSQLが呼べないかなぁと思って、今作ってるんです(笑)(←PasageSQLやMySQLだと一般プロバイダのCGI環境では使えないから、といったようなコンセプト)
つっても、ver.1 はすでにヴェクターに登録申請しましたけど。
MS SQL Server の解説書はめちゃくちゃ欲しいです(笑) 本屋にありますか?
オープンソースのデータベースソフトがあるのなら、それもご紹介いただきたいんですが……(^_^;
No.5
- 回答日時:
条件としては一般にどんなものが与えられるんでしょう?
項目A =~ /regexp/ && !(項目B =~ /regexp/ && 項目C =~ /regexp/)
ぐらい一般的なんでしょうか?
あと、検索の回数に関してですが、アプリケーションから1回呼ば
れるごとに1回検索するだけなんですね?
で、2回目の検索というのがあったとしたとき、CSVのデータに変更
がある可能性もあって、そのことを知るすべがないのでしょうか?
そうだとすると、前から順に探すくらいしか思いつきません。
ありがとうございます。
条件文はだいたいおっしゃるとおりです。
入力されたSQL文に対して条件にマッチするデータを抽出します。
で、検索回数は、1回の呼び出しに対して1回のみです。1回目の呼び出しでインデックスを作って2回目からはそれを使うという手もアリですが、そのインデックスは「ありとあらゆる条件」において流用できなければ実用できません(^_^;
……こんなところです。
はっきりいって、現状を保つ(線形検索する)か袋小路で迷うかといったような瀬戸際ですね(笑)
今のところ前者に心が動いておりますけれども(笑)
No.4
- 回答日時:
#3を書いた後で#1への補足を読んだのですが、線形文字列検索ではダメですか?
CSVファイル内の任意の文字列を高速検索するならBM法で何とかなるかでしょう。
アルゴリズム辞典で確認してください。
ありがとうございます。
駄目ってことはないんですが、言語が Perl なので、できれば高速化したいんです。あと、文字列検索ではなく、厳密にはデータ抽出ですね(^_^;
今のところ、処理能力が秒間600件(セルロン300)ですが、これだとちょっと弱いので……。
でも、各アルゴリズムの処理速度を見ていると、何だか線形検索が最速のような気がしてきました(笑)
線形検索なら速度が最善だろうが最悪だろうが O(n) にできますし。
とりあえず、条件文の解析の高速化とか、そういう方面でやってみます(^_^;
No.3
- 回答日時:
順次検索や大小比較が必要無いならハッシュで行けますね。
ハッシュ表を使わずにデータをほおりこめばインデックスもツリーも不要です(容量的には不利ですが)。
検索の“直前”であろうと“事前”であろうと「ツリーやインデックスを作る」のならB木で良いような気もしますが…。
この回答への補足
ありがとうございます。
「ハッシュ表を使わずにデータを放り込む」とはどういうロジックなんでしょう? データそのものをハッシュ値として使うのでしょうか。
それから、ツリー(インデックス)を直前に作るのは、検索条件が複数であるためです。
B木検索ではいけない理由は、それを作るためにソートを行うと、条件1、条件2……条件nというように条件の個数分だけソートを行わなければならないことになり、結果として処理速度が落ちるのです(^_^;
なぜそういうことをするのかというと、1つのデータは複数の項目を持っており、条件1では項目Aをキーとして検索を行い、条件2では項目Bをキーとして検索を行う、ということをやるからなわけです。
データの内容もこちらが予測したものってわけにもいかないので、データの種類に前提を作ることもできませんし……。
No.2
- 回答日時:
1回しか探索しないのだとすると、木を作る間に探せてしまうでしょ
うから、何度も探索するのを木で高速化したいということでよろし
いでしょうか?
そういう目的なら2分探索木かB木ということになると思います。前
者はバランスが悪い木になってしまうと、リニアサーチと変わらな
くなります。順序がバラバラといっても、もし部分的にソートされ
てたりする可能性があるなら、後者を使うべきでしょうね。
どちらも、
「C言語による最新アルゴリズム事典」奥村晴彦・技術評論社
で解説されています。
この回答への補足
ありがとうございます。
検索回数に関しては……。
まず俺が作っているのは、他のプログラムから呼び出されるモジュールです。
アプリケーションからの要求に応じてCSVファイルの中身を読み込み、サーチします。よって、1回しか検索しないかどうかについては何とも言えないのです(^_^;
ちなみに、データそのものもアプリケーションが用意した物を使うので、部分的にソートされている可能性があるとも言えるし、ないとも言えます。
どっちにしろご指定の本は便利そうですね。
本屋で探してみようと思います。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?5a7ff87)
No.1
- 回答日時:
データの内容によって色々変わってくると思うのですが・・・
キーの重複の有無、
キーのデータとの完全一致か、一部との一致か
などありますので、もう少し具体的な補足をお願いします
この回答への補足
ありがとうございます。
そういう条件もあるのですね。
データは基本的に、「ありとあらゆるデータ」が来る可能性があります。テキスト形式で記述されたCSVファイルの中身を検索するためのものだからです。
よって、キーが重複することもありえます。また、1回の検索で複数のデータが取得できてしまうこともありえます。
完全一致とかそういうのは、正規表現でなんとでも対処できるので、部分一致は考えなくていい、というところです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(SNS・コミュニケーションサービス) Yahoo!とGoogle検索のしくみの違いを教えてください 2 2022/08/14 01:53
- Excel(エクセル) Excelで、別シートへ情報を参照表示する関数について。 2 2023/06/26 09:58
- 数学 特定の座標点を通る回帰を行う方法について。 2 2022/10/10 10:27
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) マクロVBAのフォルダ階層別で検索の方法 4 2022/04/03 23:23
- くじ・懸賞 過去に 宝くじで おなじ当籤番号が出てしまう出来事を知っている方 1 2022/05/27 08:53
- WordPress(ワードプレス) WordPress のブログを初期化したい。リスクは? 1 2023/01/01 05:47
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Google Maps iPhoneのGoogle検索窓を通常の大きさに 戻す方法を教えて頂けませんか?(切実) 日本全国の 2 2022/10/02 02:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL VBAでクイックソート
-
c言語のリスト
-
SEOの本, 一冊読むなら?
-
入門より少し進んだC言語の勉強...
-
C言語初心者です、この問題難易...
-
作りたいソフトのお手本がない
-
論理的思考の身につけ方 プログ...
-
二分探索木
-
C++ 応用編について
-
Windows Media Playerを開くと...
-
iCloudフォトライブラリ内の画...
-
visual C#の本を買ったんですが...
-
iPhoneのカメラロールへ画像を...
-
プログラミングで何かゲームを...
-
Google ColaboでGUI作成
-
fopen()とFileOpen() どの様に...
-
APIとMFC
-
場所変更後のwindows media pla...
-
じゃんけんゲーム(DXライブラ...
-
本格的なGUIを作るのにおすすめ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
下記のアルゴリズムの問題がよ...
-
麻雀ソフトのソースコード
-
東芝新製品に採用されている
-
exclelのvba逆引き辞典について
-
C#のゲーム作成
-
【C言語】行列のランク(階数)...
-
情報オリンピックに向けて
-
先日のアルゴリズム更新について
-
大学生です。 画像のC言語の課...
-
アルゴリズムC
-
秘密分散について
-
アルゴリズムの参考書
-
プログラミングVBAについてです...
-
課題研究で3Dゲーム製作
-
C言語を学ぶには・・・
-
C言語を勉強するサイトを教えて...
-
オイラー法
-
アルゴリズムとデータ構造の本...
-
Google ColaboでGUI作成
-
Ps+のフリープレイでDestiny2の...
おすすめ情報