谢谢两位大佬
我记得 Metabase 是执行 sql,然后有些定时任务啥的。
有调研过 ror 技术栈有做类似的事情吗?
之后会考虑再整理下。
A 和 B 的 n 是自己算的。保证两点就可以,递增并全局唯一。
一个简单的算法,就是在创建提议者的时候给他们一个 id 号,比如 1、2、3。然后 n 从 1 开始并把 id 当做小数部分。
比如 1.001,下一个 n 就是 2.001,以此类推。
代码实现 https://github.com/yfractal/concurrency-lab/blob/master/paxos/src/paxos_proposer.erl#L154
假设 A 给的是 1.001,B 给的是 1.002,那么认为 B 的大。
https://github.com/yfractal/concurrency-lab/blob/master/paxos/src/paxos_acceptor.erl#L70
@zzz6519003 加了 erlang 的实现 https://ruby-china.org/topics/38909。之后会考虑加图片的
不是 uniq key,用了 limit,会漏数据。
虽然觉得对我没什么用,还是谢谢。
求代码,伪代码也行。
ror,不会内存溢出,因为每次拿 1000 个,就是上面的代码。
直接遍历,是每个都查一次 sql?数据量大一点,会很慢。
我误以为 spirngboot 和 ror 一样是个全家桶。。。
既然说 orm,我们就把问题放在 orm 里讨论。
现在的问题是:遍历一样表,考虑到内存,需要分批次获取。
方便给代码吗?随便哪种 orm 的都可以,伪代码也行。
我知道 java 可以这么写(这种方法不是最好的,想知道更好的方法)
@Query("SELECT * FROM users WHERE id >= :startId"
+ " and ORDER BY id ASC LIMIT :limit")
List<User> getBatch(@Param("limit") long limit,
@Param("startId") long startId);
public List<User> getBatch(@NonNull Long limit, @NonNull Long startId) {
List<User> users = this.dbRepository.getBatch(limit, startId);
return users.stream().collect(Collectors.toList());
}
要遍历所有的,外面还要有一个循环。。。
RoR 里面,这么写
User.find_each do |user|
end
一样的功能,一次拿 1000 条,我忘了可不可以设置 1000 这个值了,但这个值一般没必要改。
比如数据库里有 users 表,提供这样一个 API,一次可以拿 1000 个。 多次调用 API 后,可以拿到所有的 users。
求具体说一说。
比如 批量获取
,用 SpringBoot 除了手撸以外,有没有更好的办法?
就是拼字符串方便,dehug 方便。所以用啊。
拼接字符串方便,好 debug。
启动 java 项目的时候,我总是在想,到底要不要传环境变量,这个环境是 dev 呢,还是 development 呢?schema 在哪呢,要怎么跑呢?
我写了小 100 行的 Java 代码,搞了一个批量获取的 API,RoR/Grape 10 行可以搞定吧?
Clojure 呢,语言本身不支持 debug。。。先完成什么,都靠干撸,都撸秃噜皮了,一手老茧。
有测试、开发环境的还好,很多都是没有的。。。
目录结构,完全看项目搭建者高兴。debug 都是从头 debug 到尾。
http 长连,ror 并发应该上不来。可以考虑一单独启动一个新版 rails 服务做长连。旧服务只负责写。这要把 actioncable 写相关的代码引进来、然后两个服务连一个 redis 就行。
我一开始看公开课,其实是为学英语,学着学着就跑偏了…最后英语没学好(也就计算机方面的还凑合),却成了程序员。
最近事情太多 ,有时间的时候会考虑搞。
大佬说的对
推荐几门公开课:
入门 CS50,基础 CS61A,算法 CS61B,这些在网上都可以找到,除了视频,还有课后作业(project)。
工程方面,推荐 CS169,前几年一直是用 RoR 讲的。
网络、操作系统这些,只在大学里学过,没上过公开课。都是根据具体问题学的。不过不只看一本书,而且也不仅仅是看书。
美国的课程,有几部分,上课讲、讲义、课后项目、助教辅助。教材一般会推荐几本,讲到具体的内容,会推荐相应的章节去看。老师的态度也是,你爱看不看,把问题搞清楚了就好。这样的话,就会发现,一门课程下来,一本书都没完全读完,但又多了好多书。有些书,其实是参考资料,当 wiki 用就好。
还真想不出来要推荐什么书,不过 算法导论 不推荐,很多人能背出算法的 i,j,k,但却说不出算法思路。算法推荐 算法引论。
推荐 CS61A 的课堂笔记。
再就推荐 设计数据密集型应用。很成体系,适合自学。
好的书和课程,不是面面俱到,而是要画好一个骨架,然后可以根据这个骨架,去添加血肉。
有直播吗?
函数式这么玩,是因为他们没对象… 这个东西,写到时候挺爽的,维护起来略麻烦
signature 喊的最凶的是 clojure、elrang 这种。也有一些实现,但实际项目中用的又没多少。 clojure 这种没有对象的概念,操作的都是字段。 ruby 这种面向对象语言,操作的不是某个字段,而是类。
我觉得前端挺不容易的。不单单技术方面,还要很耐心,还要跟后端扯皮。
分工。后门后端大佬一般不写代码,但绝对是团队核心。
一个全局锁,就不行了吧。。
大神可以去分享啊
发的时候存了 redis 里,加过期时间,每次发的时候都有判断有没有这个 key,有就不发,没有就发,并刷新 key。 或者利用 rate limit 也能做。
为啥我觉得一楼比正文好呢
一般 IM 都会用 Erlang 或者 Rust,钉钉完全是用 Java 吗(我就是好奇问问,楼主可以忽略我?
Rei 说的是锁 Shell
Shell.find(params[:id]).lock(:true)
,
其他线程还想读的这个 id 的 shell 的话,就要等锁。
如果你不想锁 Shell 的话,还可以先把 shell 的 book 都创建出来(不给 id),在加 book 的时候,就可以上锁了。
Redis 的分布式锁,也可以,效果应该是一样的(哦,不是,如果操作时间特别长,redis 好,因为上了 exclusive lock,所有读操作都锁了,redis 分布式锁,只锁了加入 shell 这个操作)
为什么不成功或者失败的时候,jenkins 发个请求?
websocket-client-simple
,连一两个还好,多了,性能怎么样,就不知道了。
AC 改的话,先要能主动连 ws,收消息要 hack、发消息也要 hack(AC 是对 channel 发消息,然后做广播,client 不需要),还要再配合 AC 的抽象,还不如自己写。
用 Erlang/Elixir 啊,要不然用 Rust 啊。 我瞎说的,其实 AcitionCable 够用了,实在不行 AnyCable。