小编ste*_*kin的帖子

Rails:加入记录的性能问题

我使用ActiveRecord和MySQL进行以下设置:

用户通过成员身份拥有多个组通过成员身份,
组拥有许多用户

schema.rb中还描述了group_id和user_id的索引:

add_index "memberships", ["group_id", "user_id"], name: "uugj_index", using: :btree
Run Code Online (Sandbox Code Playgroud)

3个不同的查询:

User.where(id: Membership.uniq.pluck(:user_id))`
Run Code Online (Sandbox Code Playgroud)

(3.8ms)SELECT DISTINCT memberships.user_idFROM memberships User Load(11.0ms)SELECT users.*FROM usersWHERE users.idIN(1,2 ......)

User.where(id: Membership.uniq.select(:user_id))
Run Code Online (Sandbox Code Playgroud)

用户加载(15.2ms)SELECT users.*FROM usersWHERE users.idIN(SELECT DISTINCT memberships.user_idFROM memberships)

User.uniq.joins(:memberships)
Run Code Online (Sandbox Code Playgroud)

用户负载(135.1ms)SELECT DISTINCT users.*FROM usersINNER JOIN membershipsON memberships.user_id= users.id

这样做的最佳方法是什么?为什么带连接的查询要慢得多?

mysql activerecord ruby-on-rails database-performance ruby-on-rails-4

13
推荐指数
1
解决办法
1044
查看次数

使用 Finagle 重试失败

我正在努力解决 Finagle 客户端重试问题。出于某种原因,客户端不会在测试中重试失败的请求,即使我使用自定义分类器,它应该将 200 以外的任何响应代码标记为 RetryableFailure。我已经尝试使用 ClientBuilder 和 Http.client 构建客户端。

我缩小了我的代码范围并只测试了必要的部分。

请看一下:

MyApi.scala:

import io.circe._, io.circe.generic.auto._, io.circe.jawn._, io.circe.syntax._
import com.twitter.finagle.http._
import com.twitter.finagle.Service
import com.twitter.finagle.Codec
import com.twitter.finagle.builder._
import scala.concurrent.ExecutionContext.Implicits.global
import com.twitter.conversions.time._
import com.twitter.finagle.http.service.HttpResponseClassifier
import com.twitter.finagle.service._
import com.twitter.util.Return

class MyApi(val host: String, val protocol: String = "https") {

  // def request: Service[Request, Response] = {
  //   val clientBuilder = ClientBuilder()
  //     .codec(Http())
  //     .responseClassifier(classifier)
  //     .noFailureAccrual
  //     .requestTimeout(30.seconds)
  //     .hostConnectionLimit(5)
  //     .tcpConnectTimeout(5.seconds)
  //     .retryBudget(budget)
  //     .retries(5)

  //   protocol match {
  //     case …
Run Code Online (Sandbox Code Playgroud)

api scala scalatest finagle

2
推荐指数
1
解决办法
1851
查看次数

Haskell中的代数数据类型

我正在尝试为数学表达式编写一个简单的数据类型.我现在的代码是:

data Expr
  = Num Double
  | Add Expr Expr
  | Mul Expr Expr
  | Sin Expr
  | Cos Expr
  | X
  deriving Eq
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,但我想简化一下,只有一行用于二元运算符(Add和Mul),一行用于一元运算符(Sin和Cos).有什么建议?

haskell

1
推荐指数
1
解决办法
71
查看次数