-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PostgreSQLにする #4534
Comments
大変そう。手伝えることがあったら言ってください。 |
ありがとうございます! |
ちなみに何を使うとかいう具体的な方針は決まってたりしますか? |
PostgreSQLの具体的なバージョンはまだ未定ですがORMはtypeormの予定です |
pgブランチ作りました。 |
外部キー制約って配列には適用できない...? |
noteFileAttachment といった別のテーブル作るしかないか |
renoteCount とか repliesCount とか reactionCounts とか保存すべき? |
とりあえず無くしといてパフォーマンス上の問題があるようなら非正規化でも良いかもしれないけど後から設計を変えるのもそれはそれで面倒 |
visibleUserIds も外部キーの配列だけど、さすがにこれのためだけにテーブル作るのはなんかアレ |
んーでも、自分宛てのダイレクト投稿を一覧取得するケースもあるか... |
renoteCount (APIではnumber) 保存する |
ありがとうございます
んー、そんなことないかも |
JSON? 今みたいに |
typeormはやめてsequelize-typescriptにします |
TypeORM 評判悪いと聞いていたので正直ほっとしました。 |
個々のIDが変わっても問題ないならばマイグレ用意することはできる |
ユーザーに関しては、IDが比較可能である必要はない(ランダムな文字列で問題ない)ため、マイグレの際は以前のObjectIDをそのまま引き継ぐことが可能そう |
現在のIDについては 日付が含まれているものの、生成時期を考えると (上位4ビットが0になった時期がないので) また、現在のIDは上位の方のビットが0101までのIDが採番されているので |
そういえば: PostgreSQLになったらElasticSearchではなくなる? |
sequelize-typescript は ActiveRecord しかできなくて微妙 |
PeerTube の開発者の方々にお伺いをたてるのも手かと。 |
Misskeyはデータベースから取得したレコードはすぐレスポンスとして返す場合がほとんど(いじくったりしない)ので、レコード自体にメソッドがあっても意味ないし、いちいちインスタンス化するコストもかかる |
v10時点でのデータベースの設計や命名などで気になっている点がある方は今のうちに言っておいてください |
20%くらい終わった |
ついでに #4018 もやる |
型定義は作らないかもしれないけど、「不要な値を削除」方式ではなくこんな感じに「必要な値をコピー」する感じ |
型定義作るとしたら、せっかく作っても型定義とドキュメントが一致していないということが起こり得るので、ドキュメントから型定義を自動生成するようにする |
今はAPIのパラメータの型情報はドキュメント(cafy定義)から自動生成している状態なのでそれと同じ感じで |
modelのリファクタ系 |
↑今はmodel配下のマッピングの差分がわからなくなってしまったので |
今まで models にあったものは models/entities と models/repositories に分割されました 例えば今までこのように書いていたものはこうなります before import Note, { INote, pack } from './models/note';
const foo: INote = bar();
const note = Note.findOne({ _id: x });
return pack(note); after import { Note } from './models/entities/note';
import { Notes } from './models';
const foo: Note = bar();
const note = Notes.findOne(x);
return Notes.pack(note); |
entity と repository を区別するために、上の例にあるように repository の方は複数形になってます |
entity は、上述のようにスキーマ定義であってメソッドなどは何も持ってないので、コード上で entity を使うのは型注釈のためだけになると思います |
30%くらい終わった |
各種IDにULIDを使おうと思うんですけどどう思いますか? |
@syuilo |
う~~~む |
ランダムではないので連続性は保たれそう |
ちゃんと元の順番通りinsertしていけば |
ULIDほどのユニークさは求めてないのでULIDをちょっと改造したものになりそう |
そもそも |
IDは変わると考えてます |
ID変えてしまうとユーザー移行が難しくなるのではと思います (AP的に) |
こまこまのこまり |
にすれば旧IDと重複しないので旧IDがそのまま使えて |
So is there any plan to support other databases? |
Support is difficult because MySQL doesn't support arrays or JSON columns. |
Summary
Related to #3510, #4203
Working on https://github.com/syuilo/misskey/tree/pg
メモ
The text was updated successfully, but these errors were encountered: