Xargin

If you don't keep moving, you'll quickly fall behind

使用sql来查询es

es的DSL实在是过于难用,相信使用过的同学都会有这种感受。而sql对于99%的程序员来说没有什么学习成本。 所以在工作需要的情况下,完成了这么一个简单的项目: > https://github.com/cch123/elasticsql 把sql转换为es的DSL,这样你就不用每次都去写那个痛苦的DSL了。 这个库可以用来做什么呢?嗯,比如你在业务中用到了es,又不想去为了这套es培训所有人学会es的dsl,那么你可以使用它。再比如你想要实现一个支持sql的es的proxy,也可以把它当成你的一个模块来使用。 当然目前项目还在初期阶段,只实现了取数据部分。就是指定where条件,获取数据这种逻辑。count/sum/min之类的聚会还没有做,回头会加上。 不过where条件的话自我感觉支持还算完美,虽然目前还有点纠结sql里的equal应该用match phrase还是用term来做(因为match phrase要涉及到分词之类的逻辑,

谈一谈es的优势和限制

企业内部使用的elasticsearch是提供垂直搜索的一种方案,什么是垂直搜索呢。 先抄个百度百科: 垂直搜索引擎是针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。垂直搜索是相对通用搜索引擎的信息量大、查询不准确、深度不够等提出来的新的搜索引擎服务模式,通过针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。其特点就是“专、精、深”,且具有行业色彩,相比较通用搜索引擎的海量信息无序化,垂直搜索引擎则显得更加专注、具体和深入。 其实说白了就一句话,垂直搜索是在企业内部使用的搜索引擎。这种搜索引擎的特点是,内容可能是一些结构化的数据,而不像大搜索那样都是杂乱的内容。 一般被拿来解决一些什么样的问题: 1.数据库字段太多,查询太慢,索引没有办法再做优化 2.数据库一个count就拖死全表。 3.

关于灰度发布

几个月前部门内容组织了一次系统设计的议题,分到我们头上的题目是设计一套灰度发布系统。嗯,然后我们就精心设计(参考公司现有系统)了一番,不过鉴于滴滴现在大部分的人都是百度来的(误,所以这种系统大概也都是差不多的思路实现而来的。所以感觉应该算是一种通用系统吧~ 为什么要有灰度发布系统?灰度发布是现代互联网公司比较必然的一种需求,像滴滴这种规模的公司,千万级的司机和亿级的用户,如果不经小规模实际业务场景测试(代码本身的测试流程先不算)就对线上流程贸然修改、重构并且上线,必然会造成群体性事件,影响到公司的形象,伤害到终端用户,并最终波及到码农可怜的年终奖。而灰度发布能带来什么样的好处呢?可以让你少伤害一部分用户啊~如果出了问题,回滚或者对影响到的用户进行补偿都很方便(毕竟钱能解决的问题都不是问题,但规模太大的时候补偿手段就不好使了。 实际上在一个系统的灰度策略执行期间,老的逻辑和新的逻辑的代码在线上系统都是存在的。这样说的话可能有些人会提出异议,我们在做代码发布的时候先发布一台机器,然后再发布十台,

beanstalkd 源码剖析

beanstalkd是一个使用还算广泛的开源消息队列,由c语言编写。因为本身功能简单,代码也不多,所以阅读可以帮助我快速复习一下网络编程,并且麻雀虽小,五脏俱全,一个c语言项目的方方面面它也都包含了。 ---入口 万事先从main函数开始: int main(int argc, char **argv) { //用来存储服务端生成的socket的fd int r; //job的链表 struct job list = {}; //程序名字 progname = argv[0]; //设置为行buffer模式,具体参见man手册,遇到换行即发送到目标 setlinebuf(stdout); //解析输入参数

中间件与责任链模式

前段时间前同事找我看了这么一段代码: (new Pipeline($this->container)) ->send($passable) ->through($middleware) ->then($destination); 是laravel框架里看起来很直观的一段调用逻辑,把container注入到Pipeline对象,然后将passable(其实一般是$request对象)发送通过一连串的中间件,最后到达目的地(最终的processHandler之类的函数)。 看起来很不错是不是,再看看laravel内部的实现,代码在Illuminate\Pipeline下: class Pipeline implements PipelineContract { protected $container; /** * The