DB検索プロジェクト

Check このエントリーをはてなブックマークに追加 Tweet

1 :伊吹萃香 ◆SUICAthVuI [sage]:2008/07/15(火) 11:21:12.59 ID:nbUQSmQo
現状の検索が重すぎるため、書き込みをDB登録して
そっちで検索かけようというプロジェクトです
夏休み前に運用開始できたらいいなぁ・・・

このへんとかも参照のこと
■ 【祝】 サーバー購入のお知らせ
http://ex14.vip2ch.com/test/read.cgi/operate/1204870752/


◆仕様とか
・運用開始からのデータのみ検索対象
・検索サーバは別立て。ex14とは切り離す

◆現状
・プロトタイプ一応完成。個人板にて運用中。
・出来杉さんのほうでも作成中

◆課題
・意識すり合わせ
・Sennaの組み込み
・携帯からの検索に対応
・スレッドタイトルを検索できるようにする
・本文、名前等簡単な検索対象を絞ることができる
・板ごと、もしくは全ての板を対象とした検査ができる
・Ajax等からの検索リクエストに対応する(read.cgiのレスポップアップとの連動等)
・最終的にモバイルユーザーを全てDB経由のソースで済ませる

※携帯対応したらあとは運用しつつの対応になるかも
2 :以下、名無しにかわりましてVIPサービスがお送りします [sage]:2008/07/15(火) 11:26:36.58 ID:XcvJPfco
乙です
3 :伊吹萃香 ◆SUICAthVuI [sage]:2008/07/15(火) 11:29:38.59 ID:nbUQSmQo
あとはテーブル関連として
・板ごとにテーブルを分けるか
・過去ログをそのままテーブルに残すのか(過去ログの検索もDBでやるのか)

他に問題点とか考慮すべき点があったらよろしくお願いします
4 : [sage]:2008/07/15(火) 11:52:30.96 ID:???
とりあえず出来過ぎさん待とうか
5 :萃香@飲酒係 :2008/07/15(火) 13:48:23.07 ID:???
MySQL+Sennaのプロジェクトtritonnのページです
http://qwik.jp/tritonn/

MySQLの入れ直しとか必要になるわけですが
現在のDB鯖だとそういう権限ってないような・・・
6 : [sage]:2008/07/15(火) 18:19:28.23 ID:???
今なにやってるか産業でww
7 : [sage]:2008/07/15(火) 18:20:28.02 ID:???
まずは動作環境作ってるのかなぁ
8 : [sage]:2008/07/16(水) 04:08:33.99 ID:???
今日やったこと

MySQLの動作確認テスト
HTMLの仮組み

次の課題はphp関連かなぁ
9 :出来杉3.0 :2008/07/16(水) 16:01:19.89 ID:???
どもども、乙です乙です出来杉です

こちらではroot権限付きサーバで使うことを前提に、まだ妄想設計段階だったりしますw

妄想設計の仕様(適当)
・掲示板サーバ(ex14)ローカルでも、別サーバでも
・検索対象はライブスレッド、過去ログはどんどん削除
・Senna、常駐スクリプト(インデックス作成用)などを使うのでroot権限付きが前提
・DBはほとんどor全く使わない(使うかもしれないのは検索結果に表示するdatの一部)

とりあえず特に気になる課題へのツッコミを
・Sennaの組み込み
 さくらプレミアムは共用ホスティングなので厳しい
 まずは代替検索エンジンを用意するか、専用サーバやVPSなどに移行する必要があるかと
10 : [sage]:2008/07/16(水) 23:38:13.78 ID:2enUouMo
DB使わないんですか?
11 :萃香@飲酒係 [sage]:2008/07/17(木) 15:14:12.69 ID:???
>>検索対象
スレ番入れて、レコードごっそり削除するような画面でも作りますかね
まぁこれは後ででいいでしょうけど
バックアップとかはどうしますかねぇ
何もなしでバッサリ削除するのも怖い気が

>>サーバ
荒巻になんとかしてもらわないとダメですね
一応他の検索エンジンも探してみますか
12 :出来杉3.0 :2008/07/17(木) 15:45:05.25 ID:???
>>10
まあ個人的な考えではねw

DATあるいはDBが無くても、Sennaのインデックスがあれば検索できるし、スレッドのURLくらいはわかるわけですよ
スレタイが欲しいならsubjectをメモリにキャッシュしておけばいいし、Sennaは検索でヒットしたレス番まではわからないので、スレ内容は>>1の一部だけをキャッシュすればおkだったりとかで

それと方法の問題&要確認は…

phpを使う場合
 eAcceleratorには変数をキャッシュしておく機能が付いてるらしい
 しかし使いにくいと言う話が…
 (ただし詳しいことはまだ調べてませんので)

Perlを使う場合
 SpeedyCGI(=PersistentPerl)はグローバル変数が保持される
 しかしプロセス間で共有されるかはわからない(要実験)
13 :出来杉3.0 :2008/07/17(木) 15:52:19.68 ID:???
あ、リロード><;

> サーバ
まあ、とりあえずスレタイくらいでいいなら、さくらプレミアムでも何とかなるでしょう
とりあえずはね^^;
14 :萃香@飲酒係 [sage]:2008/07/17(木) 15:57:54.86 ID:???
Sennaって単体では使えませんよねぇ
DBにレコード登録して、その項目に対してインデックスを張る認識だったんですけど違うのかな
15 :P [sage]:2008/07/17(木) 17:18:22.91 ID:rflf6R6o
私もDBにデータ突っ込んで、ミラーみたいにして
そこから検索するんだと思ってたwwww

あーなるほどー
16 :出来杉3.0 :2008/07/17(木) 17:18:53.59 ID:???
>>12の訂正
×Sennaは検索でヒットしたレス番まではわからないので
○Sennaは検索でヒットした部分の抜粋を作成できる
(これって"KeyWord In Content"と言うのか)

↑この機能を使うならDBの方がパフォーマンス的に優位かも??(しかしサーバが…)


>>14-15
Sennaは単体では使えませんが、DBは無くても使えますよ
DBを使うかどうかは前述のKWICを使うかどうかと言うところでしょう
そしてDBを使えるかどうかはサーバ次第ですかねw(VPSの安いプランとか)
17 :P [sage]:2008/07/17(木) 17:37:47.19 ID:rflf6R6o
Sennaが抜粋してくれるなら、KWICでいいと思います
18 :P [sage]:2008/07/17(木) 17:57:05.98 ID:rflf6R6o
DBとdatの代わりになるものが何かわかんないけど・・・
その方がいい予感がする
19 :出来杉3.0 [sage]:2008/07/17(木) 18:13:50.13 ID:???
>>17-18
KWICを使うなら、ファイルorDBからヒットしたスレのDATの中身全部持ってきて、再検索する必要がありますw

もっと小容量のスレタイ&抜粋リストを使えば、そこに書かれてるものに関しては処理は早いはず

後者は専用プログラムを常駐させておいて、余裕のある時or検索CGIにくれくれされた時にDATを読み込んでキャッシュするといいんじゃないかなーと思ってる
それで検索CGIがそのリストを使うときは、名前付きパイプを通して送ると言う感じで

前者はとても抜粋内容のキャッシュなんかしてられないw
こっちにするならキャッシュ機能のあるDBを使うのがいいかと
20 :荒巻@中の人 :2008/07/17(木) 18:19:26.07 ID:???
ちょっと今病気で倒れているのでおおざっぱにしかレスできないですが、

さくらプレミアムに検索クライアントを設置(表向きにクライアントに見えるIPはこいつっていうこと)
DBや検索などの実際の処理はあまり見せたくないIPのサーバーによって処理

っていうのは可能です。

つまりさくらに検索リクエストを整形してクライアントに送信するプログラムをおいて、実際のデータの蓄積とか、検索は実際には見えない後ろのサーバーでやると。

それならとある施設のグローバルIPと電源が使えるのでかなり性能の高いサーバーが設置できると思います。
21 :荒巻@中の人 :2008/07/17(木) 18:20:16.69 ID:???
あ、もちろんrootつきで。

22 :出来杉3.0 :2008/07/17(木) 18:42:03.35 ID:???
>>20-21
病気で倒れてるって、大丈夫ですか?

個人的にはその方法で問題ないです
23 :P [sage]:2008/07/17(木) 19:49:55.92 ID:rflf6R6o
荒巻の人大丈夫?多忙だろうけど体壊してるときはゆっくり休んでください

>>19
どっちのほうがいいのかなぁ・・・
DB使えればその方がパフォーマンスはいいんでしたっけ
24 :以下、名無しにかわりましてVIPサービスがお送りします [sage]:2008/07/17(木) 22:03:56.85 ID:rflf6R6o
実際、Sennaの機能とかよく分かってないので
出来杉案が無難だとは思うんですよね・・・

抜粋リストっていうのが良くわかんないですけど、テンプレートみたいなものですか?
25 :出来杉3.0 [sage]:2008/07/18(金) 19:03:54.60 ID:???
> 抜粋リストっていうのが良くわかんないですけど
http://find.2ch.net/?STR=%A5%D6%A5%E9%A5%B8%A5%EB&COUNT=10&TYPE=TITLE&BBS=2ch
↑の検索結果にはスレ内容の抜粋が載ってますよね

・スレの>>1から抜粋してメモリにキャッシュしておく
・検索結果を表示する時はいちいちDATを開かなくても、スレ内容の抜粋を取得できる
これが>>19の(スレタイ&)抜粋リスト方式です

ちなみにKWICと言うのは、前述の2ch検索みたいに
「ヒットしたスレ内から、検索キーワードを含む部分を探して抜粋する」
と言うものです
Sennaのインデックスからは元のスレ内容が取得できないので、ヒットしたスレの内容を全部を取得して、Sennaに投げる必要があります
これをメモリキャッシュを使い高速に行うには、DBを使うのがスマートでしょう
(ただし独自にキャッシュ管理スクリプトでも組めば、DB使うより早いかも)

> どっちのほうがいいのかなぁ・・・
・スレタイ&抜粋リスト方式 = 作るの楽、動作は速くて軽い、でもちょっとスレ見つけづらいかも?
・KWIC = 作るの面倒、動作は遅くて重い、でもちょっとスレを見つけやすいかも?
まあこんなとこでしょう
(スレタイ検索の場合は「スレタイ&抜粋リスト方式」の方が便利だったりしてw)
26 : [sage]:2008/07/18(金) 19:14:58.31 ID:???
実物見てようやくどんなのか分かりましたww

スレタイ検索に関しては、私は文句なしで抜粋方式でいいと思います
ただ本文検索やID検索もしたいってことらしいので・・・KWICをどれだけ軽量化出来るのかですかねww
27 : [sage]:2008/07/19(土) 00:38:15.65 ID:USq16Zoo
まずは荒巻の人のサーバ次第ですか・・・?
28 :出来杉3.0 :2008/07/19(土) 18:48:20.20 ID:???
ええ、サーバ次第ですかねぇ

KWICを使うならメモリはともかく、CPUにも再検索分の負荷がかかるので、それも考えないと
(CPUについては将来mreadもこっちに投げるとか言うならの話かも)


さっき全板(ごみ箱の5スレ含む)のsubjectを落として行数足したら、6559スレあるとか

〜以下はかなり適当な検証なので参考までに〜

メモリが512MBだとしたら、全スレメモリキャッシュできるかもしれないけど、できないかもと言うところなのかな…??
まあ、できればメモリは1GBはあった方が良さげ?と言うところかもしれない
29 :荒巻@中の人 :2008/07/19(土) 19:23:34.41 ID:???
一応ML115ベースでメモリは4G積んで、OSは64bitのFreeBSD7.0RE ってとこでどうでしょうか?
30 : [sage]:2008/07/19(土) 21:00:05.64 ID:8TrEwoAP
4G・・・
スペック的な知識無いですが、なんかすごいのは分かりました
31 : [sage]:2008/07/20(日) 02:52:11.50 ID:???
えっと、そのサーバのスペックなら
やりたかったことなんか出来そうな感じなんですか
32 :出来杉3.0 [sage]:2008/07/20(日) 15:34:45.96 ID:???
まあRAMが4GBあれば十分すぎるでしょうw

いろいろ考えてたらKWICとmreadはそれぞれ別のキャッシュの方が良さそうな気もしてきました(抜粋リストはともかく)

CPUが仮にAthlonだったら効率のいいキャッシュじゃないと厳しくなる か も しれない
でもRAMが4GBあれば2種類のキャッシュでも問題ないでしょう
33 : [sage]:2008/07/20(日) 16:20:57.76 ID:aGSyVVco
今のところ私に出来ることが何一つ見当たらないww
34 : [sage]:2008/07/22(火) 02:41:07.44 ID:???
あれ、レスがない・・・
35 :以下、名無しにかわりましてVIPサービスがお送りします [sage]:2008/07/22(火) 02:47:17.64 ID:aZizvVQo
仕様です
36 :荒巻@中の人 :2008/07/22(火) 10:23:43.24 ID:???
ML115注文しますた.

振り込み確認取れたので今週中には稼働可能な予定.
37 : [sage]:2008/07/22(火) 13:28:43.62 ID:W7Q7UscP
あ、はい分かりました
ご苦労様です
38 :出来杉3.0 :2008/07/22(火) 18:37:02.11 ID:???
このサーバ用のping発信スクリプト、それと検索サーバ用のマルチスレッドなスクリプトを作る踏み台として
subjectが壊れないように更新するスクリプトを作ってたりするかもしれない

>>33
さくらプレミアムでクライアントと検索サーバの間に入るスクリプトとかって作れないですかね?
Socketでシンプルな専用プロトコルのようなもので検索サーバと通信、とか考えてるんですが…
# しかし詳しいことは決まっていないと言う罠w

>>36
乙です、乙です!
39 :萃香@飲酒係 [sage]:2008/07/22(火) 18:48:46.97 ID:???
>>36
乙でーす

とりあえず詳細詰めるのが先ですかねー
40 :以下、名無しにかわりましてVIPサービスがお送りします [sage]:2008/07/22(火) 19:39:57.54 ID:OVR8.kUo
じゃあ風邪でも直しながら待ってますww

そのスクリプトはperlでいいんですか?
41 :荒巻@中の人 :2008/07/22(火) 23:47:22.37 ID:???
ただいまー

一応設置場所の段取り済ませてきますた.

ML1153台分のスペースと電源.(また2台までなら増設できる!)
あとスイッチ小さいのとDMZでグローバルなIP3つ.

ML115は本日発送なので明後日には稼働できるかな.
42 : [sage]:2008/07/22(火) 23:51:28.02 ID:???
1153台かと思った

そのサーバのホストってどうなります?
だいたいいつも自分でなんか組むときはローカルなので・・・
43 :ミーフォ茜 ◆BtIJSeriko [sage]:2008/07/23(水) 02:26:20.42 ID:LeeMUJco
1153台なんて常識的に考えて多過ぎです><
44 :出来杉3.0 [sage]:2008/07/23(水) 14:33:51.31 ID:???
・このサーバで動くpingスクリプト = 仕様が決まったら、出来杉3.0 ★がPerlで作りそうですよ
・さくらプレミアムで動く検索フロントエンド = PerlでもRubyでもphpでも作る人が好きなので作れば良さげですよ(さくらプレミアムってmod_php使えないのね)
・hpのML115で動く検索スクリプト = さてどうしようか、誰がどういう設計で作るかによるだろうね^^;

>>41
詳細スペックplz
45 : [sage]:2008/07/23(水) 14:48:09.74 ID:l6qzVRAo
組んだソースとかはここに晒していいんですか?
46 :荒巻@中の人 :2008/07/23(水) 23:43:59.29 ID:???
うー腹へったー!

サーバ到着。
サーバールームに移送してきたのでこれより設置にかかりますです。

>>44
ML115っていうHPのサーバにメモリが大量にのっかってるだけって感じかな
Rootごとプレゼント。
回線は全ポート開放されてるグローバルだけどIPは隠しておかないとだめ。
UPSもらってきたので8月の年間定期停電以外は障害なく使えるはず。
速度は1M/Secくらいが限界かな

はらへったー
47 : [sage]:2008/07/24(木) 00:19:35.00 ID:ui4o6k2o
お疲れ様ww
たこ焼きでも食べてくださいな

そのML115にはDB乗せるんですよね?
全文検索には必要っぽいし
48 :荒巻@中の人 :2008/07/24(木) 00:22:27.42 ID:???
そのあたりの設計はおまかせします。。

うー腹が・・・
周囲10Kmは飯にありつける店がない、というか自販機すらないという・・・

49 : [sage]:2008/07/24(木) 00:26:06.13 ID:ui4o6k2o
私もほとんど出来杉の人に任せちゃってるので

自販機は500mごとにあるものだと思ってました
50 :荒巻@中の人 :2008/07/24(木) 00:54:32.19 ID:???
ということで、鯖完成。
Webminとか個人的にあったら便利的な物以外はすっからかんです。
IPアドレスとかパスワードはメールで聞いてくださいー


あー・・ 帰れなかった・・・
終電・・・
51 : [sage]:2008/07/24(木) 02:28:58.37 ID:???
#!/usr/bin/perl
use Socket;

$port = getservbyname('http', 'tcp');
$ipAddr = "ここにIP";
$socketAddr = pack_sockaddr_in($port, $ipAddr);
@searcg_sys = ('$search_word','$search_bbs');

socket(ZIP, PF_INET, SOCK_STREAM, 0);
print ZIP @search_sys;
connect(ZIP, $socketAddr);
select(ZIP);
$| = 1;
select(STDOUT);

こんなですかね・・・ソケット
52 : [sage]:2008/07/24(木) 02:30:45.61 ID:???
なんかスペルミスあるww
53 : [sage]:2008/07/24(木) 02:31:40.54 ID:???
#!/usr/bin/perl
use Socket;

$port = getservbyname('http', 'tcp');
$ipAddr = "ここにIP";
$socketAddr = pack_sockaddr_in($port, $ipAddr);
@search_sys = ('$search_word','$search_bbs');

socket(ZIP, PF_INET, SOCK_STREAM, 0);
print ZIP @search_sys;
connect(ZIP, $socketAddr);
select(ZIP);
$| = 1;
select(STDOUT);

こっちで
54 :出来杉3.0 :2008/07/24(木) 19:30:03.19 ID:???
>>46
> ML115っていうHPのサーバにメモリが大量にのっかってるだけって感じかな
BTOの一番安いのに4GBメモリですか?

> 速度は1M/Secくらいが限界かな
メガビット毎秒なのかメガバイト毎秒なのかわかりません><

IPアドレスを隠しとくのは了解です

ところで、UPSって数年毎にバッテリー交換とかしないとw

>>47
全文検索だけならDBはただの邪魔者ですw
KWICを使うならあった方がいいかもしれないかもしれないよとw

>>53
うーん、確かそんな感じだった気がしますw
この手の事は↓が詳しいよw
http://x68000.q-e-d.net/~68user/net/
55 :荒巻@中の人 :2008/07/24(木) 20:23:26.33 ID:???
>>54

>BTOの一番安いのに4GBメモリですか?
メモリはいくら乗っけてもかなり安いからねー

>メガビット毎秒なのかメガバイト毎秒なのかわかりません><
単位はByteっす.


UPSは交換済みのやつです
56 : [sage]:2008/07/24(木) 23:52:52.97 ID:???
>>54
そのページのやつほぼそのまんまで行ける気がする・・・
57 :以下、名無しにかわりましてVIPサービスがお送りします [sage]:2008/07/25(金) 01:47:49.33 ID:h8LT75Qo
どういう仕様になるかわかんないけど、ソケットで送るデータは
板・検索ワード・どの部分か これだけでいいんですよね?
58 :出来杉3.0 :2008/07/25(金) 18:17:12.34 ID:???
>>55
把握すたw

鯖のログイン情報送っといてもらえると助かります

>>56
なかなかいい解説やサンプルがあって助かってますw

>>57
板、検索ワード、名前とかIDとか、1件目から10件目まで欲しいとか
くらいですかね
板や名前やIDは、2ch検索みたいに検索ワードに入れてもらうようにするかもしれません

あと、送り方の候補は今のところ2つくらいあるかな
・QUERY_STRINGそのまま( hoge=%82%c4%3b%82%b7%3d%82%c6&foo=bar )
・QUERY_STRINGをごにょごにょして、\n区切りで( て;す=と\nbar )

まあこんなとこで
59 : [sage]:2008/07/25(金) 18:33:11.73 ID:???
区切って 開いて

がスマートかな
163.99 KB Speed:0   VIP Service VIPサービス運用情報 更新 専用ブラウザ 検索 全部 前100 次100 最新50 続きを読む
名前: E-mail(省略可)

256ビットSSL暗号化送信っぽいです 最大8000バイト 最大95行
画像アップロードに対応中!(http://fsmから始まるひらめアップローダからの画像URLがサムネイルで表示されるようになります)


スポンサードリンク


Check このエントリーをはてなブックマークに追加 Tweet

荒巻@中の人 ★ VIP(Powered By VIP Service) read.cgi ver 2013/10/12 prev 2011/01/08 (Base By http://www.toshinari.net/ @Thanks!)
respop.js ver 01.0.4.0 2010/02/10 (by fla@Thanks!)