Nekosyndrome/Yonkoma

中長期計劃

Opened this issue · 0 comments

priority_queue<Jobs>

  • SS級: 支援多層級/多管理員的管理介面
  • 優先: script.js refactor, 支援多版架構

資料表計劃(仮)

CREATE TABLE `bans` (
  `id` int(10) INTEGER NOT NULL AUTO_INCREMENT,
  `board` VARCHAR(32) DEFAULT NULL,
  `type` VARCHAR(32) NOT NULL,               #word,ip,host,imagehash,country

  `ipstart` INTEGER DEFAULT '0',
  `ipend` INTEGER DEFAULT '0',
  `value` VARCHAR(255) DEFAULT NULL,
  `created` INTEGER NOT NULL,
  `expires` INTEGER DEFAULT NULL,
  
  `creator` INTEGER NOT NULL,
  `reason` TEXT,
  `post` TEXT,
  PRIMARY KEY (`id`),
  KEY `expires` (`expires`),
  KEY `ipstart` (`ipstart`,`ipend`),
  KEY `value` (`value`)
);

CREATE TABLE `boards` (
  `board` varchar(32) NOT NULL PRIMARY KEY,
  `title` VARCHAR(255) NOT NULL,
  `subtitle` VARCHAR(255),
  `imgsize` INTEGER DEFAULT '0' NOT NULL,
  `settings` TEXT,
  PRIMARY KEY (`board`)
);

CREATE TABLE `admin` (

);

CREATE TABLE posts (
    "board" VARCHAR(32) NOT NULL,
    "no" INTEGER  NOT NULL AUTO_INCREMENT,
    PRIMARY KEY ("board", "no"),
    "resto" INTEGER  NOT NULL,
    "bump" TIMESTAMP DEFAULT '0' NOT NULL, #原root
    "time" INTEGER  NOT NULL,
    "md5chksum" VARCHAR(32)  NOT NULL,
    "imghash" VARCHAR(64) NOT NULL,
    "tim" INTEGER  NOT NULL,
    "ext" VARCHAR(4)  NOT NULL,
    "imgw" INTEGER  NOT NULL,
    "imgh" INTEGER  NOT NULL,
    "imgsize" INTEGER NOT NULL, #原本是VARCHAR
    "pwd" VARCHAR(32)  NOT NULL,
    #原本now包含id和other,現在拆開
    "now" VARCHAR(255)  NOT NULL,
    "id" VARCHAR(32) NOT NULL,   
    "other" VARCHAR(255) NOT NULL,
    "name" VARCHAR(255)  NOT NULL,
    "email" VARCHAR(255)  NOT NULL,
    "sub" VARCHAR(255)  NOT NULL,
    "com" TEXT  NOT NULL,
    "ip" VARCHAR(255) NOT NULL,
    "host" VARCHAR(255)  NOT NULL,
    "uuid" VARCHAR(255) NOT NULL,
    "status" VARCHAR(255)  NOT NULL
);
CREATE INDEX ON posts (board, resto);
CREATE INDEX ON posts (board, bump);
CREATE INDEX ON posts (board, time);
CREATE INDEX ON posts (board, resto, no);
CREATE INDEX ON posts (ip);
CREATE INDEX ON posts (uuid);
CREATE INDEX ON posts (imghash);

一些決定(仮)

  • 不解問題

    • 怎麼樣在存regex資料庫找任一個match文字x的regex(禁字,禁host)
    • 在資料庫裡找與數字x hamming distance<=k的record做法(image hash ng)
    • 洗版的判定
    • 怎麼樣讓nosql的資料表,post no按照每版最大值增加
  • [image相關] 刪除file index, 還有 fileio interface

    • index改放資料庫多開一個表就好了?
    • fileio感覺不需要抽象那麼多,要分散儲存基本上mount就搞定
    • 也許加move()函式的抽象化,例如object storage會用到
    • image 的 file_exist 也不需要php判斷, 直接讓user收到404就好了?
    • config要加支援其他domain拿
  • db相關

    • 所有版面放同個table(重大決定)
      • 原因是sql系列普遍都支援composite primary key, 而且同一張表index search比較方便
      • 反過來說nosql就GG了,雖然放個別的table也是GG?
    • 優先sqlite, 再來mysql
    • 其它db也許會放棄或晚點維護
    • 想支援nosql或雲端db 如dynamo/datastore?
      • no的auto increment會是大問題,像google每秒只能有一筆transaction conflict
      • 暫時沒想到其他
  • cache相關

    • 每個thread, 最新posts, 用json存起來
    • 還有template rendering結果
    • cache應該在文章regist 或 del 階段就可以產生了
    • 支援 redis? memcache?
    • config cache: 如版面設定或禁字,禁isp等就output php檔案讓opcache處理?
  • 想納入標準的module

    • admin_enhance
    • ascii art, netabare(spoiler), ... , config 支援preg取代就好了?
    • threadlist, category
    • recaptcha
    • geoip?
    • report
  • 雜項

    • 改用uri? 例如 komica.org/00/123456
    • template class改用其他的
    • 把project分開,例如 nginx設定,admin,www,script 等
    • 同一串(thread view的頁面)就不做分頁了
      • 雖然說跑script大概300~500會是界線,但通常也很少有那麼長的串
    • 多種首頁? 例如category, 正常futaba style, thread list(就table只列標題)