JRuby?
你是想说,纯粹从算法比较的角度来讲,这两个算法有本质的区别,所以不能直接比较?
这篇文章是从具体问题出发,提出解决方案,并做比较。算法是为解决实际问题而存在的。
我想了一下,还是说出我的想法吧。
数据结构是靠约束来定义的,如果约束不满足,就不能叫这个数据结构了。就好比偶数,能被 2 整除的数,是偶数。如果不能被 2 整除,就不是偶数。
不理解不恰当的地方, 这个是对拼写检查这个问题,提出了四种解决方案,然后并做比较,在实际应用中,也会在 bit map 和 bloom filter 之间做选择。 bloom filter 在拼写检查中,如果出现 false positive,结果就是一个错误(没在字典里)的拼写,认为是正确的,这个在拼写检查里,一般是可以接受的。
就想 #9 说的那样,用一个 job 轮询查有哪些商品到期了,这样有一个 job 做检查就可以了。时间间隔看需求来定。可能要看下对列怎么处理 repeat job 的,假设时间间隔是 200 毫秒。第一个 200 毫秒到了,处理时间,但花了 200 毫秒,还没处理完,那这个时候,是同时做处理,还是说等第一个处理完,然后再做第二个。如果是处理完第一个,再处理第二个,假设第一个花了 405 毫秒,那是马上做第二个处理,还是说,要等第 600 毫秒才处理(这样的话就有延迟,js repeat 是这么处理的)。
应该有两类 job,一类 job 做检查到期,一类 job 做后续操作,至少要用两个独立的 job queue,两者不能相互影响(第二类 job 跑满 cpu 的时候,第一类 job 要能正常工作),优先级应该能解决,但最好还是测一下。
midori 性能会提升不少吧?
有,不多。广州游戏公司用的比较多。有些 im 也是用 erlang,比如去哪的 im,比如我们。
刚好有个项目要连多个数据库。
然后 lisp 粉各种瞧不起大 JavaScript
Clojure 是这种
m = {}
m = (assoc m {:a => 1})
写起来容易,状态变化不那么清晰。
Erlang 的话是,
M = {}
M2 = maps:update(a, 1, M)
写起来麻烦,但状态辩护会更清晰。
我们有一段时间要搞 grpc,然后 grpc 死活搭不起来。我跟同事说,为什么非要等到 grpc?为什么不先切分服务?调用用什么不可以?grpc 好了,换一下就可以了。但就是说不通。
我一直觉得一个模块,对外提供服务、屏蔽实现细节,就可以了。至于是否是微服务只是表现形式罢了。
电子版据说要等一段时间。
感谢回复
还好很多厂子喜欢重复造轮子 ,而且同样的东西,大家理解程度不一样,结果也会不一样。
我明白微服务是很好的东西,解决了很多问题。但实践起来又有很多无奈。。。
我们最近刚好有个市场运营需求,用消息队列解了耦。但由于部署环境网络不连通,只好用 http 再把消息传出去。。。然后 rpc 又没时间搭。。。不过消息队列还是有必要的,市场想法多,如果让他们的需求一直入侵主代码,会越来越难维护。而且市场的需求挂掉话也不应该影响主项目。
感谢回复
还好很多场子都喜欢重复造轮子 ,而且同样的东西,大家理解程度不一样,结果也会不一样。
我明白微服务是很好的东西,解决了很多问题。但实践起来又有很多无奈。。。
我们最近刚好有个市场运营需求,用消息队列解了耦。但由于部署环境网络不连通,只好用 http 再把消息传出去。。。然后 rpc 又没时间搭。。。不过消息队列还是有必要的,市场想法多,如果让他们的需求一直入侵主代码,会越来越难维护。而且市场的需求挂掉话也不应该影响主项目。
这篇文章写的不怎么样(好吧,我偷懒了,没有再改改。。。
Hash 是准确的,准确的代价就是需要更多的存储空间。存储空间的代价有两个,一个是存储空间本身,一个是要分几次才能拿到内存里。
BloomFilter 是一个不准的 hash table。
比如输入一个 key,经过 hash function,得到一个 index,将 arr 的 index 设置为 1,既 arr[index] = 1
,
查找的时候,将输入通过 hash function 转化为数组的 index,如果 arr[indexe] 存在,就认为这个值插过了。
hash function 有一定的冲突的概率,比如 "abc" 和 "ccc" 通过 hash function 的到的 index 可能是一样的,就会误判。
伟大的计算机先哲,尼古拉斯赵四曾经说过,如果一次 hash 解决不了,就 hash 两次,所以 BloomFilter 一般会用多个 hash function。
我没想到 B 树要怎么做拼写检查。。。
B 树和 Trie 不一样的地方是,Trie 没有深度约束,B 树有。用 B 树的话,就要把 com(组件对象模型),cool,computer 都存到叶子上。。。
B 树还有一个 order 的约束,在单词上,order 只能为 26,那就是 13 到 26,空间也会有大量的浪费。
像 com(组件对象模型),computer 这种,在 B 树似乎要村两次?
被发现了…
我看错人了…不好意思…
嗯,都是类似的问题。bloom filter 还有一个经典的应用是过滤弱密码。bloom filter 可以把很多的数据都“存”在内心里,查起来快,redis 就 bloom filter 的插件。
不是问 B+ 树是什么,问是问怎么做拼写检查。
B+ 树要怎么用?
可不可以这么理解?减熵是目的,微服务是手段?
Trie
最重要的还是 清晰划分各个模块的职责
,划分不好,一样是一团粥。
比如会有这种注释出现,由于 A 系统做了 xxx,所以在 B 系统,我要这么 xxx。。。
如果微服务做的不完善的话(有的公司没有那么多人力来做),同样会有 A 服务拖垮了 B 服务的情况。。。
这个是怎么测试的?Stack Overflow 没看到相应的信息啊。
actioncale 有服务器发起的 ping,把这个调小了应该就可以了。