うううううんんんん

書くべきか書かざるべきか悩んだんだけど、どっかに書いとこうと思って本スレじゃなくここに。


  • dat落ちとスマート掲示板について

dat落ちに関しては現在スマート掲示板との連携は難しいと考えています。

理由としては
1、現在dat落ち判定はスレッドを読み込んだときのみに行われており、2chでの状態とは大きな乖離がある
2、2chのスレッド一覧データからdat落ちを判定することは可能であるが、多量のログファイルへの書き込みが発生する可能性がある。(つまり動作が遅くなる)後述


このため、ユーザーの意に沿う「dat落ち」というスマート掲示板の条件の作成は困難と考えています。
(ユーザーは2ch上でのdat落ちの情報を求めていると思われるため)


以下、駄文

  • subject.txtを利用したDat落ち判定 for BathyScaph

判定方法:

  1. まず、すべてのスレッドはdat落ちであるとする
  2. subject.txtに含まれるスレッドはdat落ちではない

この2段階の判定により、移転等でsubject.txtに一時的に含まれなくなるdat落ちでないスレッドを正しく判定出来る


注意すべき点:

  • dat落ち情報はログファイルとデータベースの双方に保存されている

データベースのみであれば上の判定はわずかな処理によって実現可能であるが、ログファイルに対し同じ方法を用いればファイルI/Oが無制限に起こりうる。(1000個のログファイルを持つスレッド数上限700の板では1000個のファイルの探査、1000個のファイルの読み込み、1000個未満のファイルの書き換え、700個程度のファイルの探査、700個以下の書き換えが一度の更新で必要)
そのため、ログファイルに対しては別のロジックを使用しなければならない。


最適と思われる処理案:

  1. 対象板内で現在dat落ちでないスレッドをデータベースから抽出、保存
  2. 対象板内で現在dat落ちであるスレッドをデータベースから抽出、保存
  3. データベース上で対象板内のすべてのスレッドにdat落ちフラグを付ける
  4. 新しいスレッドをデータベースに登録する
  5. データベース上でsubject.txtに含まれるスレッドのdat落ちフラグを外す
  6. subject.txtから1)と同様のデータを作成、保存
  7. 1)で保存したスレッドから6)のスレッドを差し引く
  8. 2)で保存したスレッドと6)のスレッドの共通部分を抽出
  9. 7)で得たスレッドに対応するログファイルにdat落ちフラグを書き込む
  10. 8)で得たスレッドに対応するログファイルのdat落ちフラグを削除する


処理案の問題点:
ログファイルへの処理はdat落ちフラグの書き込み/削除だけであり、処理すべきログファイルを動作の軽いデータベースで特定するため、ファイルI/Oは比較的少数で抑えられるが、それでもまだ大量のファイルI/Oが発生する。
(スレッド数上限700の板*1なら一度の更新で約700〜800ファイルに対する書き込みが発生する可能性がある)

*1:圧縮がかかるまでは上限+1割程度のスレッドが存在しています