嗨,我不想在我的表中验证3列的独特组合.
假设我有一个名为cars的表,其值为:brand,:model_name和:fuel_type.
我当时想要的是根据这些记录的组合来验证记录是否是唯一的.例如:
brand model_name fuel_type
Audi A4 Gas
Audi A4 Diesel
Audi A6 Gas
Run Code Online (Sandbox Code Playgroud)
应该都有效.但"奥迪,A6,气体"的另一项记录不应该有效.
我知道这个验证,但我怀疑它实际上做了我想要的.
validates_uniqueness_of :brand, :scope => {:model_name, :fuel_type}
Run Code Online (Sandbox Code Playgroud) 我对查看EXPLAIN ANALYZE结果不是很熟悉,我的查询太慢了,我遇到了很大的问题.我试图阅读如何解释解释查询的结果,但我仍然不知道我应该寻找什么,以及可能出错的地方.我有一种感觉,某处有一些大红灯闪烁,我只是看不到它.
所以查询很简单,看起来像这样:
EXPLAIN ANALYZE SELECT "cars".* FROM "cars" WHERE "cars"."sales_state" = 'onsale' AND "cars"."brand" = 'BMW' AND "cars"."model_name" = '318i' AND "cars"."has_auto_gear" = TRUE LIMIT 25 OFFSET 0
Run Code Online (Sandbox Code Playgroud)
结果如下:
Limit (cost=0.00..161.07 rows=25 width=1245) (actual time=35.232..38.694 rows=25 loops=1)
-> Index Scan using index_cars_onsale_on_brand_and_model_name on cars (cost=0.00..1179.06 rows=183 width=1245) (actual time=35.228..38.652 rows=25 loops=1)
Index Cond: (((brand)::text = 'BMW'::text) AND ((model_name)::text = '318i'::text))
Filter: has_auto_gear"
Total runtime: 38.845 ms
Run Code Online (Sandbox Code Playgroud)
一点背景:我在Postgresql 9.1.6上,在Herokus专用数据库上运行.我的数据库有大约7,5Gb内存,表车包含3,1M行,并且行中有2,0M的行有sales_state ='onsale'.该表有170列.它使用的索引如下所示:
CREATE INDEX index_cars_onsale_on_brand_and_model_name
ON cars
USING btree
(brand COLLATE pg_catalog."default" …Run Code Online (Sandbox Code Playgroud) postgresql performance database-design postgresql-performance
我在ubuntu 12.04上使用ubuntu apt-get安装了redis服务器2.8.
我从其他数据库复制了dump.rdb.现在,当我尝试启动新服务器时,我不断得到:
[35763] 04 Mar 01:51:47.088 * 1 changes in 900 seconds. Saving...
[35763] 04 Mar 01:51:47.088 * Background saving started by pid 43313
[43313] 04 Mar 01:51:47.088 # Failed opening .rdb for saving: Permission denied
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
我们正在改进我们在Heroku托管的rails应用程序的性能(rails 3.2.8和ruby 1.9.3).在此过程中,我们遇到了一个令人担忧的问题,其源头似乎非常难以追踪.让我快速解释一下我们如何解决问题以及我们如何尝试隔离它.
-
从6月左右开始,我们在整个网站的Time to First Byte中经历了奇怪的滞后行为.使用该站点时显而易见的问题(有时候应用程序没有响应10-20秒),并且它也通过webpagetest.org出现在瀑布分析中.我们的总部设在丹麦,但是从任何主机那里得到了这个结果.
为了确认问题,我们进行了基准测试,我们向一个简单的页面发送了300个相同的请求并测量了响应时间.如果我们向首页发送300个请求,则中位响应时间低于1秒,这是相当不错的.令我们感到害怕的是,60个请求占用的时间增加了一倍,而其中40个请求占用的时间超过4秒.有些请求需要16秒.
这些缓慢的请求都没有出现在我们用于性能监控的New Relic中.无论我们的Web流程规模有多高,都不会显示请求排队,结果也是一样的.尽管如此,我们还是拒绝承认问题是由应用程序代码引起的,所以我们尝试了另一个实验,我们通过机架中间件响应请求.
通过在机架堆叠的开始将这种中间件(TestMiddleware),我们返回的请求之前就击中了应用程序,确保不会影响下面的中间件或Rails应用程序可能会导致延迟.
Middleware setup:
$ heroku run rake middleware
use Rack::Cache
use ActionDispatch::Static
use TestMiddleware
use Rack::Rewrite
use Rack::Lock
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use Rack::Sendfile
use ActionDispatch::Callbacks
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::DalliStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use ActionDispatch::Head
use Rack::ConditionalGet
use Rack::ETag
use ActionDispatch::BestStandardsSupport
use NewRelic::Rack::BrowserMonitoring
use Rack::RailsExceptional
use OmniAuth::Builder
run AU::Application.routes
Run Code Online (Sandbox Code Playgroud)
然后我们运行相同的脚本来记录响应时间并得到几乎相同的结果.平均响应时间约为130MS(显然更快,因为它没有击中的应用程序,但仍然60请求了超过400个毫秒和25个请求花了超过1秒.同样,一些16秒钟缓慢请求.
一种解释可能与网络上的慢速跳跃或DNS设置有关,但traceroute的结果看起来非常好.
通过在Heroku上托管的另一个rails 3.2和ruby 1.9.3应用程序上运行响应脚本来确认此结果 …
升级到rails 4后,当我在生产中的服务器上的rails控制台中执行命令时,不再显示已执行的SQL.如何在不损害性能的情况下再次启用它?
我们的智能搜索引擎/聚合器正在经历一些严重的扩展挑战.我们的数据库拥有大约200k个对象.从分析和新版本来看,我们的大部分麻烦似乎都来自数据库.我们正在使用Heroku提供的最小的专用数据库(Ronin).
我们一直在研究索引和缓存.到目前为止,我们设法通过减少数据库调用和智能缓存内容来解决我们的问题,但现在甚至这似乎已经结束了.我们不断问自己,我们的代码/配置是否足够好,或者我们是否只是没有使用足够的"硬件".
我们怀疑我们从Heroku购买的数据库解决方案可能表现不佳.例如,在200k项目上进行简单计数(无连接,无任何操作)大约需要250ms.这似乎很长一段时间,尽管postgres以其糟糕的表现而闻名?
我们还开始使用基于纬度/经度的地理定位查找.两列都是索引浮点数.进行距离计算涉及相当复杂的数学,但我们使用的是非常好推荐的geocoder宝石,怀疑它运行非常优化的查询.甚至地理编码器仍然需要4-10秒来执行查找,比如说40.000个对象,只返回第一个最接近10的限制.这听起来好像很长一段时间,我们咨询的所有有经验的人说这听起来很奇怪,再次暗示数据库性能.
基本上我们想知道:我们对数据库有什么期望?可能有问题吗?如果我们决定升级,我们还能期待什么呢?
我的另一个问题是:我在这里读到,我们可以通过将整个数据库加载到内存中来提高性能.我们是否应该自己配置,如果是这样的话?
关于最后一个问题的更新: 我从Heroku支持的乐于助人的人那里得到了这个:
"这意味着有足够的内存(足够大的专用数据库)将热数据集存储在内存中.这不是你必须手动完成的事情,Postgres配置自动使用我们专用数据库上的所有可用内存.
我看了一下你的数据库,看起来你现在正在使用大约1.25 GB的RAM,所以你还没有最大化你的内存使用量."
更新数字和数字
好的,现在我有时间查看数字和数字,我将尝试回答以下问题:
问题的答案:
throughput: 9.0 cpm, total time: 0.234 s, avg time: 25.9 ms 嗨,我刚试过在我的mac上通过自制软件安装git - 出了点问题.我安装了mac app的github,但我尝试删除它.我系统中当前的git版本是:
Nielsk@~: $ git --version
git version 1.9.3 (Apple Git-50)
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过自制软件安装git会发生这种情况:
Nielsk@~: $ brew install git
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/git-2.1.3.y
######################################################################## 100,0%
==> Pouring git-2.1.3.yosemite.bottle.tar.gz
==> Caveats
The OS X keychain credential helper has been installed to:
/usr/local/bin/git-credential-osxkeychain
The 'contrib' directory has been installed to:
/usr/local/share/git-core/contrib
Bash completion has been installed to:
/usr/local/etc/bash_completion.d
zsh completion has been installed to:
/usr/local/share/zsh/site-functions
Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into …Run Code Online (Sandbox Code Playgroud) 我刚用Homebrew和RVM安装了一个干净的Mavericks安装.双方brew doctor并rvm requirements返回"都好",但是,当我跑bundle install在我的项目目录我的大部分宝石安装好的,但少数失败,同一以下错误安装:
Bundler::GemspecError: Could not read gem at /Users/NK/.rvm/gems/ruby-2.0.0-p353/cache/eventmachine-1.0.3.gem. It may be corrupted.
An error occurred while installing eventmachine (1.0.3), and Bundler cannot continue.
Make sure that `gem install eventmachine -v '1.0.3'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)
然后,如果我再试一次,gem install eventmachine -v '1.0.3'我得到:
ERROR: Error installing eventmachine:
invalid gem: package is corrupt, exception while verifying: undefined method `path2class' for #<Psych::ClassLoader:0x000001018f7990> (NoMethodError) in /Users/NK/.rvm/gems/ruby-2.0.0-p353/cache/eventmachine-1.0.3.gem
Run Code Online (Sandbox Code Playgroud)
我试图破坏RVM并重新安装,但没有任何帮助.
其他人似乎也有同样的问题,但似乎还没有人为这个答案提供资金:
编辑
看到这两个: …
我正在EC2上运行ubuntu AMI.是否可以为正在运行的EC2实例分配/请求新的公共IP地址而不终止它并再次启动它?请注意,我对使用弹性IP功能不感兴趣,我只想使用EC2分配的常规随机公共IP地址.
当尝试将rails 5应用程序部署到heroku时,我遇到以下错误Running: rake assets:precompile:
remote: ExecJS::ProgramError: SyntaxError: Unexpected token: name (autoRegisterNamespace) (line: 14767, col: 7, pos: 457487)
remote: Error
remote: at new JS_Parse_Error (<eval>:3623:11948)
remote: at js_error (<eval>:3623:12167)
remote: at croak (<eval>:3623:21858)
remote: at token_error (<eval>:3623:21995)
remote: at unexpected (<eval>:3623:22083)
remote: at semicolon (<eval>:3623:22601)
remote: at simple_statement (<eval>:3623:25779)
remote: at <eval>:3623:23567
remote: at <eval>:3623:22774
remote: at block_ (<eval>:3623:27903)
remote: at <eval>:3623:23677
remote: at <eval>:3623:22774
remote: new JS_Parse_Error ((execjs):3623:11948)
remote: js_error ((execjs):3623:12167)
remote: croak ((execjs):3623:21858)
remote: token_error ((execjs):3623:21995)
remote: …Run Code Online (Sandbox Code Playgroud)