Skip to content

Commit

Permalink
Quartz sync: Nov 18, 2024, 7:33 PM
Browse files Browse the repository at this point in the history
  • Loading branch information
nitaking committed Nov 18, 2024
1 parent 5e85d2b commit 935ad09
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ tags:
// /src/index.ts

const app = new Hono().basePath("/api");
app.use("/static/*", serveStatic({ root: "./" }));
app.use("/static/[]()*", serveStatic({ root: "./" }));
```

```bash
Expand Down
14 changes: 0 additions & 14 deletions content/thoughts/DrizzleORM > Join結果のマッピング.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
tags:
- seed
- orm
- drizzle
---
DrizzleはSQLクエリビルダーなので、オブジェクトにマッピングされない。flatにクエリ出力される。(SQLと同じだ)

[Drizzle Queries](https://orm.drizzle.team/docs/rqb)を使用した場合、オブジェクトにマッピングされる。その際はSQL上でjsonを整形した上でキャストされるので高速だが、nestした場合(a -> b -> c)にサブクエリが3階層となり、aliasが繋がらないSQL生成結果となってしまった。つまりうまくクエリ生成ができなかった。

そのため、[Aggregating results](https://orm.drizzle.team/docs/joins#aggregating-results) という形で集計を試みた。

- [【Drizzle ORM】JOINした結果をマッピングして集計する](https://pote-chil.com/posts/drizzleorm-join-aggregate)
- [Drizzle Team Community - Answer Overflow](https://www.answeroverflow.com/c/1043890932593987624)

しかし、こちらはインメモリ処理をするため、実行速度が遅く、150件程度でレスポンスタイムが250ms程度となってしまった。ローカルホストでこれなので実用に耐えられず、断念。

結局、Prismaで実装したところ、エラーなくレスポンスタイムも60ms程度に済んだ。

---
>
> その際のPR内容
>
> 実装にあたり、以下の問題を抱えました。
> ### Case: Drizzle/Query
>
> 出力されたサブクエリでのエイリアスやスコープが参照できないスコープとなってしまい、SQLレベルで実行エラーとなってしまう。
> ### Case: Drizzle/Select
>
> Queriesを使用せずにネストした形でSQLを実行するためにはjson構造をうまく定義する必要があり、クエリレベルでの対応は手修正が必要となる。
> PostgreSQLのhelperなどは散見されたが、MySQLでのhelperは確認できず。
>
> [gist.github.com/rphlmr/de869cf24816d02068c3dd089b45ae82](https://gist.github.com/rphlmr/de869cf24816d02068c3dd089b45ae82) _(too large to embed)_
>
> また、[Aggregating results](https://orm.drizzle.team/docs/joins#aggregating-results) を試したが、こちらはマッピングが手動になるためバグリスクがあり、ランタイムでNode.js上で処理するためパフォーマンスが悪く、最終的なレスポンスタイムが200ms以上となったため、不採用。
>
> ### Case: MikrORM / Kysely
>
> MikroORMはTypeORM同様、Decoratorでの定義が必要であり、少し作業量が多いと見た。
> また、Kyselyはより薄いSQL Query Builderであり、Drizzleと変わらないように思える or オブジェクトへのマッピングの対応可否が確認できなかった。
>
> ### Case: Prisma
>
> Prismaでのオブジェクトのマッピングは実装歴があるため試したところ、Drizzle/Queriesと同じようなインタフェースで実行できるようになった。
> Drizzleとの違いは実際のQueryで、Json構造で取り扱わずに複数のクエリで実行されていることによる。
>
> 最終的なレスポンスタイムも約60msと良好である。
> そのため、この実装を適用する。
>

0 comments on commit 935ad09

Please sign in to comment.