パスワードを忘れた? アカウント作成
450164 journal

fslashtの日記: Linux + Apache + PHP + PostgreSQL

日記 by fslasht

STATUS: 故障中

 今度の案件はタイトルのような感じでで思いっきりベタだなあ。

 高速化のため DBにあるマスターテーブルをWebサーバのメモリにあらかじめロードしておきたいんだけど、PHPってずっとメモリを保持しておくにはどうしたらいいんだろう。
 保持しておきたいテーブルは、キーに対して値が1つ関連づけられているという単純な構造なのでハッシュテーブルなどで十分。
 共有メモリ関連のモジュールを使えばできそうだけど、使うときに一度変数にコピーしないといけないのが性能的に問題ありそう。
 ハッシュテーブルとかをそのまま保持してくれるとありがたいんだけど。

○ 解決策案(妄想中

・共有メモリ上の領域を独自に管理
 共有メモリ上に取得した領域の中にデータ領域やインデックスの領域を独自に管理してデータ管理を行う。
 利点:確保したメモリの必要部分(インデックスと対象データ)のみアクセスするだけで済むのでメモリ転送の無駄は少ないはず
 欠点:コード量が増える。PHPでそこまで低レベルな処理を行うと速度的に心配

・RAMディスクとDBMを使う
 RAMディスク領域を確保しておいてそのうえにファイルを作り、DBMを使ってDB処理をする
 利点:コーディングが楽
 欠点:DBMのオーバーヘッドで速度的に心配

・PHPのモジュールを作る
 メモリ上にデータ格納・検索するモジュールを作る
 利点:たぶん処理効率は一番高い
 欠点:作るのが大変。標準の環境ではなくなる
 ※モジュールで確保したメモリってずっと残ってるのかな

・メモリ保持用プロセスを常駐しておく
 CLI版のPHPでデータ格納・検索用のプログラムを作って、常駐しておく。(起動時にDBからテーブルを一括して読み込んでおく)
 WEBサーバ側のPHPスクリプトからは、Scoket等で呼び出す。
 利点:全部PHPで作れる(利点か?)
 欠点:プロセス間通信のオーバーヘッドが心配。PHPでマルチスレッドなサーバー作れたっけ?(応答を一瞬で返せるならシングルスレッドでもいいか)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...