このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1287755129/11
#  3003,aaa 
#  3004,bbb 
#  3005,ccc 
#  ・ 
#  ・ 
#  こんなレコードが何百万行っていうCSVがあって、 
#  1カラム目の値をキーとして、2カラム目の値を取得したいんです。 
#  このリクエストは1分当たりに何度も発生します。 
#  当然、1カラム目の値はユニークです。 
#   
#  で、リクエストが発生するたびに、 
#  単純に先頭から検索していったんじゃ、時間がかかるんで、 
#  このCSVをハッシュに持っておいて、 
#  レスポンスを返すようなデーモンを作れば、速くなるかな〜 
#  と考えてるんですが、方向性は合ってますかね? 
#  #DBは使えない環境です。。。 
#   
#  ここで聞くことか迷ったんですが、 
#  組むならperlで組むんで、こちらで聞いてみました。 
#   
#  よろしくお願いします。 
# 
# 

要約関数(_述語幹部,_鍵整数値,_述語名) :-
        _法 = 1000,
        _剰余 is _鍵整数値 mod _法,
        concat_atom([_述語名幹部,'_',_剰余],_述語名),!.


'第一項をユニークな整数鍵とするCSVファイルを要約関数述語として登録'(CSVファイル,_述語名幹部) :-
        get_lines(CSVファイル,Lines),
        append(_,[Line|R],Lines),
        split(Line,[','],[_鍵整数値|_値ならび]),
        要約関数述語の節として追加(_述語名幹部,_鍵整数値,_値ならび),
        R = [],!.

要約関数述語の節として追加(_述語名幹部,_鍵整数値,_値ならび) :-
        要約関数(_述語名幹部,_鍵整数値,_述語名),
        P =.. [_述語名幹部,_鍵値|_値ならび],
        asserta(P).

要約関数述語の節を削除(_述語名幹部,_鍵整数値,_値ならび) :-
        要約関数(_述語名幹部,_鍵整数値,_述語名),
        P =.. [_述語名,_鍵値|_値ならび],
        retract(P).

要約関数述語の検索(_述語名幹部,_鍵整数値,_値ならび) :-
        要約関数(_述語名幹部,_鍵整数値,_述語名),
        P =.. [_述語名,_鍵値|_値ならび],
        call(P).

要約関数述語の節置換(_述語名幹部,_鍵整数値,_更新する値ならび) :-
        要約関数(_述語名幹部,_鍵整数値,_述語名),
        length(_更新する値ならび,Len),
        length(L,Len),
        P1 =.. [_述語名,_鍵値|L],
        retract(P1),
        P2 =.. [_述語名,_鍵値|_更新する値ならび],
        asserta(P2).