book000 / twitterts

Twitter Unofficial Scraping API Library for TypeScript : https://book000.github.io/twitterts/
https://www.npmjs.com/package/@book000/twitterts
MIT License
22 stars 2 forks source link

generate-types: すべてのレスポンスを型生成してからマージする #1293

Open book000 opened 1 day ago

book000 commented 1 day ago

以下の処理を1日1回行う。実行時に既存プロセスがある場合はキルする

  1. なければ、types テーブルと type_mapping をつくる
  2. type-mapping を responses に突合して、typesにないレコードを抽出する。このとき、response_type は JSON に絞る
  3. 順次、型生成し、types テーブルと type_mapping にINSERTする。responses と types の関係は多対一とし、関係性は type_mapping で定義する。生成した型結果が同じ場合は types 内で重複させない

※2と3をストリーミングでメモリ最低限に走らせられないかな?

型のマージ処理はいままでと同様。ただし、ソースが types テーブルとなる。

book000 commented 1 day ago

responses テーブルの定義

https://github.com/book000/twitterts/blob/fa17a1d1fc55d19e90f81857ab1560fb22c48f3c/src/saving-responses/index.ts#L144-L165

book000 commented 1 day ago

テーブル設計

types

ユニークキーは endpoint_type, method, endpoint, url_hash, status_code, generated_types_hash。

type_mapping

response_id と type_id で複合 PK とする。

book000 commented 14 hours ago

パーティション分割をどう考えるかだな…。responsesテーブルはcreated_atでパーティション分割していて、古いものは定期的に削除される。 これに付随する形でtypesとかtype_mappingも消えるべきなんだけど、それをするためにはリレーションシップを張るかtypes側にもcreated_atを持たなきゃならん

book000 commented 14 hours ago

各レスポンスを受けたときにresponsesテーブルに型定義を随時生成して書き込む場合:

book000 commented 4 hours ago

外部キーを設定して、ON DELETE CASCADEをつけるのがよさそう。そうします

book000 commented 3 hours ago

typeじゃなくてschemaとする。複数形はschemata