熊猫像长了烙腮胡~
@martin91 谢谢你的解答
@martin91 这段代码,子线程访问的都是主线程循环内的局部变量,如果不加 join,会有问题么?
@nowherekai 这个 i 是局部变量,在主线程内,一个个的循环内,i 都是不同的变量,其他线程的 i 变量难道会改变?
@martin91虽然我现在也不明白,为啥 RAILS_ENV=production 起不了作用,但是按你方法解决了,.
@yanhao 我用的是 rails5,创建线程加时间间隔有什么作用么?
@nouse 我是 RAILS_ENV=production 模式跑的,为啥常量的加载没有在启动前就进行完毕,而是运行一段时间后才报错?
@nowherekai thread 里面使用主线程的变量,但是 i 是局部变量啊!会有啥问题?
@pengedy 说的很好!
用 rubymine 之后,debug 方便了很多,开发效率高了不少。不过内存占用吓死人。
@benzhang 谢谢解答 0rz
@huacnlee 谢谢你的解答!0rz
@huacnlee 我想我是不需要分库分表了。谢谢你的耐心解答 0rz.我还有个问题一直不懂。是不是把一百万用户的信息放到 redis 里面,读取速度会比从 mysql 读取要快?在 mysql 中根据 id 查询,和从 redis 中按照 user_id 读取,哪个更快呢? 根据我以前碰到的问题,貌似 mysql 里两张内存中的临时表,对某个数字字段做关联查询,查询速度比在硬盘上的两张表,对数字字段加索引后,进行关联。查询的要慢.是不是在 mysql 中的内存中的表,进行关联查询,是要做全表扫描的?
@benzhang 生产环境部署读写分离,用 binlog 同步会有多大延迟?
@huacnlee 这样分 1024 张表,之后其他跟用户表相关的表你们是如何处理的?是不是为了查询性能,增加了很多陇余的表?比如将跟用户相关的订单表按照用户的 id 分布规律,划分了分表..但是订单表又可能要按照 product_id 来查询,是不是又要根据 product_id 的分表规律,来再划分一次订单的分表?
@nine 服务器都部署在海外。准备用 aws,这方面有啥推荐的不?
老雇主了。对新人很有耐心~资磁一下
这个 gem 有点 bug,执行完操作,数据库连接不会释放。所以得手动释放. 环境问题可以在配置文件顶部配置. 我生产环境用的配置如下。
ENV["RAILS_ENV"]='production'
require File.expand_path('../config/boot', __FILE__)
require File.expand_path('../config/environment', __FILE__)
Dir[File.expand_path("../lib/*.rb", __FILE__)].each {|file| require file }
module Clockwork
configure do |config|
config[:sleep_timeout] = 5
config[:logger] = Logger.new(File.join(Rails.root,'log/clockwork.log'))
config[:max_threads] = 15
config[:thread] = true
end
error_handler do |e|
ExceptionNotifier.notify_exception(e)
end
def self.wrapper(message)
logger = ->(mes) do
`echo #{Time.now.to_s} #{mes} >> #{File.join(Rails.root,'log/clockwork.log')}`
end
begin
start_time = Time.now
logger.call message + '开始'
yield
end_time = Time.now
duration = ((end_time - start_time)/60).round(1)
logger.call message + "结束,用时#{duration}分钟"
ensure
ActiveRecord::Base.clear_active_connections!
end
end
every(1.hours, 'stub.job') do
puts 'clockwork is running.current time is ' + Time.now.to_s
end
every(1.day, 'get_test_data', :at => '01:00') do
Clockwork.wrapper('测试') do
Food.foo_ceshi
end
end
end
第四条,两次 pluck 会导致查询 2 次,而且加不加 false 都一样,不会立即执行.; 第五条只用 distinct 还好,如果加上 order by,会导致创建临时表。速度比在 rails 代码里加运行 uniq 慢得多。
目光离不开楼主头像啊~
后端用 ruby 还不够你用啊?用了两三年的 rails,发现所有出现的性能问题,都不是语言的问题。rails 生态系统很完善了,对非科班出身的人来说,太友好了。如果你觉得有精力可以学习其他的东西了。也不要想着后端了。开始学习 app 的开发吧。我觉得这才是互联网的未来。
@yan32768 react native 我没研究过。不过 titanium 能做到 80%~90% 的代码相同。它也是跨平台的 native 框架。不同于 html5 的框架,它可以调用设备原生的功能,相机、电话、定位这些都没问题。在 appstore 上曾一度有 10% 的 app 是用它开发的。区别于其他普通的 native 的开发框架。它可以做到所见即所得,修改代码不用重新编译。开发修改的速度可能是原生框架的好几倍。最诱人的特性是代码可以放到服务器上,然后拉到手机端缓存起来,再执行。所以不需要频繁的提交 appstore 审核。这代表的是 app 开发的黑科技。
各位都没听过 titanium 框架么?
@brucebot 这个 gem 我也用过。不过它还是在本地处理视频的,还是得安装 ffmpeg 的。
@qinix ,我先研究研究~谢谢
自己新建一个文件夹,放 app/下,rails 好像不会自动加载吧?如果要放,得在 application.rb 文件里面把文件夹路径加到 autoload_paths 数组里面。或者把跟数据库无关的类似模型的文件放到 model/concerns 下面吧。
@hooopo 那用 ecs 云服务器,自己搭设 redis 服务器,是否更划算呢?
@hfpp2012 不知阿里云的键值存储 KVStore(支持 redis 协议),和缓存服务 ocs(兼容 memcache) 比起来,是否也会快一些呢?
@qhwa 如果用 ocs,获取数据的速度能达到多少 ms?很多场景都需要 redis,比如 sidekiq,既然都需要用,我想用一台服务器就好了,既做队列,又做缓存。