AKKA-HTTP
,spray-json
およびSlick
を使用して、スカラーでREST APIを作成しました。ルートの承認のために、私はoauth2
を使用しました。 (プレーンSQLを使用した)データを取得するためにAKKA-HTTP、spray-json、oauth2およびslickを使用してscala REST APIを最適化する方法は?
DAO:
def getAllNotes: Future[Seq[UserEntity]] = {
implicit val getUserResult = GetResult(r => UserEntity(r.<<, r.<<, r.<<, r.<<, r.<<, r.<<))
query(s"select id, email, password,created_at, updated_at, deleted_at from users", getUserResult)
}
データを取得するためにDAO(スリック表):
def getAll(): Future[Seq[A]] = {
db.run(tableQ.result)
}
は、ここでのルーティングの一部です:
val route: Route = pathPrefix("auth") {
get {
path("tests") {
complete(userDao.getAll.map(u => u.toList))
} ~
path("test") {
complete(userDao.getAllNotes.map(u => u.toList))
} ~
path("testUsers") {
baseApi(userDao.getAllNotes)
} ~
path("users") {
baseApi(userDao.getAll())
}
}
}
implicit def baseApi(f: ToResponseMarshallable): Route = {
authenticateOAuth2Async[AuthInfo[OauthAccount]]("realm", oauth2Authenticator) { auth =>
pathEndOrSingleSlash {
complete(f)
}
}
}
機能的には、すべてのルートが意図したとおりに動作していますが、OAUTH2とSlickテーブルを使用するとパフォーマンスが低下するようですデータを取得する。
上記のルートのそれぞれの結果:
1. "users" => 10 request per second: OAUTH2: YES, Slick Table: YES
2. "testUsers" => 17 request per second: OAUTH2: YES, Slick Table: NO
3. "tests" => 500 request per second: OAUTH2: NO, Slick Table: YES
4. "test" => 5593 request per second: OAUTH2: NO, Slick Table: NO
私の問題
がどのように私はのOAuth2とスリック表を使用してREST要求を最適化することができますか?
Slickテーブルと結合の代わりにPLAIN SQLを使用するとよいでしょうか?
各リクエストに応じて、暗黙の行マッパーによって、あなたは '' userDao.getAll.map(U => u.toList)を意味しています。どの例やコードスニペットでも十分に分析できます。 :) – Sujit
私は 'getAllNotes'メソッドの' implicit val getUserResult'を参照していました。代わりにクラスレベルで宣言できます。 –
暗黙のうちに私はこれを置き換え、私が受け取った成果は '5926 rps'です。そして、 'getNotes()'でCompiledをどうすれば使えますか?私はdb.run(コンパイルされた(tableQ))を試しましたが、 'getAllNotes'の中にエラー – Sujit