我使用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)
User.where(id: Membership.uniq.pluck(:user_id))`
Run Code Online (Sandbox Code Playgroud)
(3.8ms)SELECT DISTINCT
memberships.user_idFROMmembershipsUser Load(11.0ms)SELECTusers.*FROMusersWHEREusers.idIN(1,2 ......)
User.where(id: Membership.uniq.select(:user_id))
Run Code Online (Sandbox Code Playgroud)
用户加载(15.2ms)SELECT
users.*FROMusersWHEREusers.idIN(SELECT DISTINCTmemberships.user_idFROMmemberships)
User.uniq.joins(:memberships)
Run Code Online (Sandbox Code Playgroud)
用户负载(135.1ms)SELECT DISTINCT
users.*FROMusersINNER JOINmembershipsONmemberships.user_id=users.id
这样做的最佳方法是什么?为什么带连接的查询要慢得多?
mysql activerecord ruby-on-rails database-performance ruby-on-rails-4
我正在努力解决 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) 我正在尝试为数学表达式编写一个简单的数据类型.我现在的代码是:
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).有什么建议?