不考虑我比较穷这一点以外,感觉挺香的。
明白,再次感谢。
哦,明白了,感谢。
再请教一下,是不是说探测出热点,就把数据在 web server 里缓存一份,降低后面存储的压力?换句话说,其实 web server 承担了缓存的责任?
感觉这个场景和 facebook 的有点像,他们有篇论文 Scaling Memcache at Facebook 感觉应该有一定的参考价值。
请教一下 redis 报警设置在百分之 40,这感觉有点低啊,为啥不弄高点?
感谢,我知道 Erlang 为了利用多核 CPU 有一系列的优化,有绑定 CPU、spin、sleep 线程之类的。但我没深入研究过 ,对硬件了解的比较少
不过凭感觉,Ruby Actor 应该是有优化空间的。当然,能利用多核,已经是非常大的一步了。
请教几个问题,还没看过 Reactor,不知道理解的对不对
这个 benchmark,要是 reactor 可以"绑定"到 cpu core 上,是可以成倍提升的?
Ruby 在调度(Ruby Reactor 是不是直接用系统线程调度的?)reactor 的时候,其实会有,一开始 reactor1 在 cpu0 上跑,然后跑着跑着,跑到 cpu1 上了这种情况?
而且随着 reactor/thread 的增加,这种情况会变多。
一直没找到比较好的 rust 学习资料,尝试写过一个小的 project,不过后来放弃了
java 有个 redis 的客户端,就是单线程 + 异步 io。
thread 和 fiber 有不同的适用场景。fiber 没办法抢占式调度,最后还得借助系统线程。
我对我说的那些话做个总结吧。。。
那两个 query 的例子,就是为了说明,Java 没有很好的东西处理这些常见的问题。所以需要花人力解决,所以生产力不高。
还有张口闭口 IDE 提示、手写 SQL 的,这些是编程入没入门的问题吧。
我在说生产力。。。举例能证明我的观点就够了。。。
如果是超大型微服务的项目(业务域内核心几十个系统),我不知道现在 RoR 在这方面怎么样
@fengkuok 是想说,这个场景下,Java 是一个选择,RoR 不一定行。
我的回复意思是,RoR 缺少实践,可能不行。但和生产力没啥关系。
为什么我们两个能聊下去?
大公司(有很多内部系统的公司),你的服务要依赖很多不稳定的其他服务和代码,并且要提供稳定的服务。用 Ruby,没有相应的支持(背书),要自己搞。背后隐藏来很多奇奇怪怪的东西。
这是楼主他们公司的事,我就是看个热闹。我不了解他们的具体情况,没发言权。
不过可以说一点,人力成本对小公司挺重要的,大公司,人力成本就没那么重要了。
*** 我只是说生产力问题,只针对下面这句罢了。***
感觉像讲故事,最近用 spring boot 做了一个小项目,在 idea 强大的智能完成加持下,感觉也不比 rails 效率低多少,但静态语言带来的安全感让写代码的心智负担降低很多。
最后,脱离场景(不了解情况)谈技术没有任何意义。
RoR 通过约定,降低复杂度。Spring 把复杂度都暴露给开发者了。有些 Java 的不便利,Ruby 里面就没有。
估计要习惯一下,习惯了就好。
恩,是的。
用不用 java 或者 spring 要看场景,每个人的认知都不一样,无关对错,个人选择罢了。
单说 web/API 开发。
如果是大公司,团队选择技术栈,那么我会选 java 和微服务。 如果是小公司:RoR 或者 Phoenix。 如果是个人项目:我会选 RoR。
这个是我个人的看法 ,我觉得参考价值不大。。。
不过确实没听过大公司,用 RoR 做微服务
超大型微服务的项目
我没研究过,但现在让我选的话,我不会用 RoR,因为觉得 RoR 缺少微服务方面的实践。
RoR 搞微服务的话,需要一些探索。Java 和 Go 这种,更稳妥一些。
n + 1 这个问题,我自问自答吧。
Java Spring 要解决这个问题,我手写 sql,同时有两个变量保存,还要把变量的关联关系对应上。。。
大体是
List<User> users = userMapper.findById(1024);
List<Book> books = bookMapper.selectMutiByUserId(users);
return presentUserWithBooks(users, books);
(最好应该加 transaction)
当然,这些代码并不是全部,首先是要写 selectMutiByUserId
这条 sql。
presentUserWithBooks
也要改,要把 user 和他的 books 对应上。。。
往快了说,我需要至少 30min。。。
如果是 RoR,2min 搞定,测都不用测。
user = User.includes(:books).find(1024)
return present_user_with_books(user)
我主要是针对这句话
感觉像讲故事,最近用 spring boot 做了一个小项目,在 idea 强大的智能完成加持下,感觉也不比 rails 效率低多少,但静态语言带来的安全感让写代码的心智负担降低很多
举的例子,也是开发中比较常见的,也是想说明,RoR web/API 开发这个场景下,开发效率会高很多。
技术栈对软件开发进度的影响,这个是另一个问题。这个问题本身想说明白就很难。比如,反复修改花费的时间这块要不要算,这个大家就有不同的理解。
单单
RoR web/API 开发这个场景下,开发效率比 Java Spring 高很多
这个观点想说明白已经很难了。。。就算是有了具体例子。。。
所以,关于“技术栈对软件开发进度的影响”,我觉得我还是保持沉默比较好。
错过了。。。大佬们有没有 ppt 或者录像啥的? @xiaoronglv @luikore
跪求
恩,是的,IDE 有很多强大的功能。
额。。。麻烦先看下前后文。
我是说 IDE @Data
默认是不能提示的。。。路由也是。
RoR 没 IDE,是因为多数的时候,不需要。编辑器的自定补全,差不多就够用了。
RoR 和 IDE 的关系是,不用 IDE 大家也能很高效的写代码,但如果有更强大的补全,自然是有帮助的。
Java 和 IDE 的关系是,如果没有 IDE,几乎是写不了代码。。。至少,我只有写 java 的时候,才会去用 IDE。
RoR/Ruby + 编辑器效率多数的时候 >= Java + IDE。
项目中的模型的属性和方法
属性,用了 @Data
,IDE 可以提示吗?反正我的没提示,你要是知道话,我刚好学习下。
controller 中的方法,route 中的路径
RoR controller 之间不会相互调用,不需要知道有哪些方法。。。
路径有命令行 rake routes
打印所有路径。
java spring 如果想知道有哪些路由,是怎么搞的?这个我确实不知道,想学些下。
比起代码的健壮性,ROR 的这点简洁不值一提。
这句话,你是想说 RoR 更简洁?
跟你聊的就是 RoR 和 Java 系列的开发效率高的问题。那段代码,还真扯不出健壮性问题。。。
你想聊健壮性,可以在达成“RoR 更简洁”这个基础下,我们继续聊。
IDE 自动引入
还是要按快捷键的,如果要使用鼠标操作的话,就跟麻烦了。。。重名了,还得选。。。IDE 只不过让自动引入变的不那么麻烦罢了。
用 rails 基本上就别考虑用 IDE 了。。。
因为用不着。
这个 List<Shop> shops = dao.query(Shop.class, Cnd.orderBy().desc("shopName"), new Pager(1, 20));
需要 IDE 提示,这个 shops = Shop.page(1).per(20).order(shop_name: :DESC)
编辑器就够了。
RoR 之所以 IDE 不流行,是以为没有 IDE 大家写的也挺 happy。IDE 对 Java 来说才是必需品。
所以 IDE + JAVA 这一套更适合打工人
恩,是的,Java 创造了更多的岗位,从这个角度看,确实如此。
少了一行,一开始没看出来,不好意思。
star 还是算了吧
你要知道更好的,就写下来。
@ywjno 完整的代码我贴出来了,你看看有没有问题? (根据 https://ruby-china.org/topics/40526#reply-364233 做了更改)
import org.nutz.*;
import xxx.xxx.models.Shop;
import java.util.*;
@Inject // nutz 自带注解,不依赖 spring
Dao dao
List<Shop> shops = dao.query(Shop.class, Cnd.orderBy().desc("shopName"), new Pager(1, 20));
RoR + kaminari
shops = Shop.page(1).per(20).order(shop_name: :DESC)
还有这个 name DESC 最好用一个常量
ruby 用 keyword。
var 是 Java 10 出来的东西,差 4 个月就是 3 年前的出的版本,难道你写 ruby 现在还在用快 3 年前的版本么
工业界,多数的项目,都是用 java 8 吧? https://www.jrebel.com/blog/2020-java-technology-report
我们先单独比较一下代码
RoR + kaminari
shops = Shop.page(1).per(20).order('name DESC')
var shops = dao.query(Shop.class, Cnd.orderBy().desc("shopName"), new Pager(1, 20));
另外,除了代码,还要 import 依赖,Dao,Shop,Cnd,Pager。dao 还要 Autowired 一下,这个 "shopName" 最好用一个常量。
另外 var 是 java 11 的语法吧?现在绝大多数都用的是 8 吧?或者你用的是 kotlin?
就是最简单的分页就行,既然容易,辛苦给一下代码?
如果用到插件,说一下插件是什么?如果是自己写,贴一下插件的代码?
大家还是拿代码说话。
既然 java、spring 这么棒。
写个分页查询吧,再写一下,如果解决 n + 1 问题吧。
用什么 orm 都行。
估计就是脚手架之类的。。。ror 的脚手架,都没人在生产环境用。。。java 生成一坨,更没法看了。。。
有的人认为 java 开发 web 更高效,比 ror 高效。但如果真问他们一个具体问题怎么处理,他们会说,spring boot 是解决依赖的,不解决这个。。。然后他们依然觉得 java 更适合开发 web。。。
反正就是不跟你说具体问题。。。
找家好一点的公司实习吧,没必要学 web 框架这么具体的技术。
对于本科生,会 Laravel,再学 RoR 的意义不太大了。除非对 RoR 的设计感兴趣。就是重要的不是怎么做,而是背后的原理。
教材推荐 SaaS 软件工程:云计算时代的敏捷开发,或者 cs169。
最后,计算机有很多有趣的东西,web 开发,只是这些有趣的东西的一小部分。