elasticsearch的准实时(near real-time)查询

elasticsearch是基于lucene的,lucene是可以做到实时的,就是创建索引之后,立即能查询到。 但是这样,要么是牺牲索引的效率,每次都索引之后都刷新,要么就是牺牲查询的效率每次查询之前都进行刷新。 索引之后进行刷新是通过: elasticClient.prepareIndex("indexName", "Person") .setSource( XContentFactory.jsonBuilder() .startObject() .field("name", "zhangsan") .field("desc", "you are good chaoji good") .field("age", 18) .field("height", 256789l) .field("sex", "M") .field("bool", true) .field("double", 33.6f) .field("date", new Date(16554755464l)) .endObject()) .setRefresh(true) .execute().actionGet(); 进行搜索前进行刷新 elasticClient.admin().indices().refresh(new RefreshRequest("indexName")); 无论哪一种,都会让你的性能下降10倍以上,所以只能采取一种折中的方案,每隔n秒自动刷新,这样你创建索引之后,最多在ns之内肯定能查到。 这就是所谓的准实时(near real-time)查询。 构建客户端的时候设置 Settings settings = ImmutableSettings.settingsBuilder() .put("client.transport.sniff", true) .put("index.refresh_interval", "1s") .put("cluster.name","elasticsearch") .build(); TransportClient client = new TransportClient(settings);

2014年6月21日 · 1 分钟

实在不能忍-只等荣耀6

@华为荣耀 官方微博持续多天发布“实在不能忍”系列微博,不能忍的,肯定不会在荣耀6上出现,这样我们从华为荣耀不能忍的方面,可以推断荣耀6的优势所在。 倒数第八天: #实在不能忍# 美,有设计,才是最好的设计;手机又厚又丑,实在不能忍!荣耀6,比比谁更美!一起告别那些不能忍! 倒数第七天 #实在不能忍#天天明星打广告,真机上手卡到爆;价格太高,内存太小,实在不能忍!荣耀6,看谁肚量大!一起告别那些不能忍 倒数第六天 #实在不能忍#瞎跑个啥?真把自己当天王?跑得不快就算了,还跑得发了烧!实在不能忍! 荣耀6,不服跑个分!一起告别那些不能忍! 倒数第五天 #实在不能忍#喂?喂?喂?神马?神马?我听不…嘟嘟嘟…信号不好,实在不能忍!荣耀6,通信老专家告诉你3dB的意义,一起告别那些不能忍! 倒数第四天 #实在不能忍#想拍飞翔的荷兰人,却拍到了背后的裁判。对焦失误,目标全无,实在不能忍!荣耀6,给照片再次对焦,一起告别那些不能忍! 倒数第三天 #实在不能忍#省吃俭用买肾机,到手还得省电玩,续航太差,实在不能忍!荣耀6,想玩就玩,一起告别那些不能忍! 倒数第二天 #实在不能忍#用手机的一修再修,修手机的准备IPO,重启,断网,黑屏……质量忒差,实在不能忍,荣耀6,真心靠谱的好手机,一起告别那些不能忍! 倒数第一天 #实在不能忍#我看足球在转,你看loading在转,没有最快4G就算了,连4G都没有,实在不能忍!荣耀6,看谁上网快!一起告别那些不能忍!

2014年6月21日 · 1 分钟

[新闻]荣耀又有新玩意--荣耀耳机即将上市

通过华为荣耀首席聆听官-张晓云透露,华为荣耀又有一款新产品加入,那就是荣耀耳机,据悉荣耀耳机将随荣耀6一起发布,那荣耀耳机会不会成为荣耀6的标配呢?一起都是未知数,不过荣耀不断有新产品推出,都是让人欣喜的。 据张晓云公布的照片看,耳机头包括振膜全为金属制作,耳机外套为天蓝色硅胶,外包装极像太空舱,又似太空杯,极具科技感。具体细节可能需要等到2014年6月24日发布会那一天知晓了。

2014年6月19日 · 1 分钟

不服跑个分,荣耀6要成跑分天王

小米一向以跑分天王自居,雷军也一向把“不服跑个分”作为口头禅。雷军热衷于跑分不仅如此,还收购了安兔兔,当我发现北京安兔兔科技有限公司的法人是雷军的时候,我不禁要对小米手机以往的跑分成绩说句呵呵了。 尽管如此,@华为荣耀 官方微博今日再次自信满满的调侃安兔兔: 跑分排行榜记得要改下哦亲~ 据早前@安兔兔 官方微博报道,在安兔兔海量数据库中,出现了一款代号为hi3630的海思八核处理器,在低频情况下,跑分已经挤进世界前四,总体得分37000分左右,待荣耀6携带优化后的海思八核处理器横空出世,问鼎跑分天王无疑。 期待荣耀6,华为荣耀,勇敢做自己 make it possible!

2014年6月18日 · 1 分钟

[喜讯]荣耀官方网站正式上线

根据whois显示honor.cn注册信息,早在早在2013年12月16日荣耀正式宣布独立之前,2013年5月17日就已经被华为收购。但是迟迟未启用。 今日@华为荣耀 官方微博 宣布荣耀官网honor.cn正式上线 目前华为荣耀官网华为荣耀在售所有荣耀手机的详细介绍,以后小伙伴们了解华为荣耀手机,可以直接访问荣耀官网了 http://www.honor.cn 华为荣耀官方网站的推出为用户提供了更立体的沟通平台,也是构建自身品牌生态体系的重要举措,一方面让更多的用户了解荣耀手机,认同荣耀品牌,然后荣耀再不断的为用户推出更多的精品, 借此荣耀6发布,华为荣耀可能会正式提出自己的口号:

2014年6月17日 · 1 分钟

[传闻]荣耀6各种曝光谍照

谍照一 谍照二 谍照三 今日@华为荣耀 官方微博直言:#实在不能忍# 美,有设计,才是最好的设计;手机又厚又丑,实在不能忍!荣耀6,比比谁更美!一起告别那些不能忍!貌似在打破各种传闻。华为荣耀对荣耀6的外观设计如此有信心,肯定到时候会给用户十足的惊艳,让我们继续拭目以待:

2014年6月16日 · 1 分钟

关于华为荣耀6的猜测

自2014年6月9号华为荣耀公布2014年6月24日将发布新品荣耀6以来,各大手机数码媒体纷纷进行报道,对荣耀6从各个方面进行猜测,我也对荣耀6进行一个猜测。 1、价格 价格是消费者和媒体普遍关心的问题,因为价格从一方面显示了一款手机的市场定位。媒体报道荣耀6的价格或为2998元,依据是@华为荣耀官方微博公布的信息:华为荣耀发布会门票是2998元。但是华为刚刚发布了P7手机,定价在2888元,华为P系列走的是高端路线,荣耀走的高性价比路线。所以我觉得荣耀6应该不会定价高于P7的价格,而且荣耀6是荣耀1 荣耀2 荣耀3的延续,荣耀1到荣耀3初始售价都在2000元左右或者以下,荣耀6也应该在2000元左右,而且最新的荣耀3X增强版本 3X pro定价也在1698。 所以我觉得荣耀6,最有可能是一贯的1888元, 不过荣耀从3一下过度到6 连升3级,如果定价是2998肯定是有底气的,更有媒体认为荣耀3x Pro已经有抗击小米的能力,荣耀6很有可能作为定位为高端市场的突破之作。 2、外观 在荣耀6要发布之前,就有关于荣耀新机的谍照曝光,包括工信部的注册照片,一个带保护套的“真机”等等。我对荣耀6的外形是有很大期待的,因为荣耀系列一直走的是朴素中规中矩的外观设计,荣耀3c之前都是比较商务化的世界,荣耀3c 3x都是走的年轻、青春的路线。都是给人一种朴素大方的感觉。华为拥有世界顶级的设计师,你可以通过华为P系列的从P1到P7的外观演进中看出,华为在外观设计上一直在努力,一直在突破。我相信这次荣耀6在沿袭荣耀系列的朴素大方的同时,一定会有让人惊喜的外观设计。 3、配置 性价比拼的是就是最低的价格,和最优的配置。荣耀6的配置肯定要比以往的机型,上一个档次才能配的上3到6 型号的飞跃。配置方面,用户一般关心的是CPU 内存 摄像头 屏幕和电池。 CPU: 荣耀1是双核 荣耀2是四核 荣耀3是四核 荣耀3X都用上八核了, 荣耀6肯定是八核无疑,至于品牌,华为自有品牌 海思芯片已经日渐成熟,应用于多款机型包括P7这种高端手机,如果海思8核CPU问世,很有可能在荣耀6上试水。 内存: 2G是主流配置,但是3G内存的手机已经陆续面世,荣耀6不可能落后与此,3G内存极有可能。 摄像头: 3X pro的摄像头配置是前置500万 后置1300万。在像素方面实在没有提升的必要,毕竟是手机,如果像诺基亚傻逼似的搞了4300万像素的手机,那真是本末倒置了。荣耀6最有可能保留这样的像素配置,在性能和成像上可能有所优化。 屏幕: 摄像头1300万像素拍出来的照片,再用720p的屏幕来显示,就说不过去了,至少应该是主流的1080p=1920*1080的分辨率,更高的分辨率对照片显示的更细致。 电池: 2200mA的电池显得略有不足,但是电池容量越大,体积越大,这是目前所有手机厂商都无法避免的问题。虽然荣耀6的电池不会特别大,但是荣耀系列也不是走的超薄路线,常规3000mA左右的电池应该是标配。 4、特性 每一款荣耀手机都会有自己的一些特性,像荣耀2的爱享,荣耀3的三防和红外遥控,荣耀3x的双3G。荣耀6肯定也会加入一些独有的特性.媒体有猜: 全球最快的4G手机?双面玻璃?超高分辨率? 还是那句话,华为荣耀永远不断给你惊喜,让我们拭目以待…..

2014年6月15日 · 1 分钟

坚持一个博客真不容易

建站伊始,感觉自己有好多东西要写,好多东西要总结,当每天都坚持写一篇的时候,发现坚持每天一篇原创博客真的好难。 我的博客的定位是: 1、关于软件开发自己总结的经验 2、关于华为荣耀的最新动态和点评 3、关于博客建站过程中的总结 当博客的整体框架都完整了之后,我给自己要求的,每一篇文章都尽量的原创,即便是通过搜索引擎搜索来的知识,都要经过自己的实践,加上自己的理解,希望工作中每天都有一个技术难题让我突破,好让我总结发表成博文。 一开始还好,可能是建立博客之前攒的,可以坚持一两天写一篇,越到后来,短短的一个月,发现我的工作很大部分也是在重复,在使用司空见惯的基础知识,没有更多的欣喜让我总结。即便想总结某一方面的知识,却发现网上比我总结的透彻的多了去了。如果写出来都像在抄袭别人,就像我前面关于 java多线程的总结。现在感觉长期坚持一个博客是多么的不容易。 我很羡慕我建站开始认识的那些网友,他们的站点已经被百度收录了上千条,上万条,而我仅仅收录了近百条。我也有过转载的念头,但是我知道只要我转载第一篇文章,博客对我来说就会失去这份原有的意义。虽然百度的收录条数可能让我产生小小的成就感,但是建这个博客的初衷是我的个人爱好,展现我个人的知识和经验,如果一旦转载第一篇文章,就会有第二篇,第三篇… 这样就逐渐偏离了我建站的初衷,决不能把我的网站做成一个转载他人文章的网络收藏夹。 所以除了强迫自己不断的学习新知识,总结新经验之外,我现在期望的就是华为荣耀每天都能给我惊喜,让我有东西写,嘿嘿~ 。

2014年6月15日 · 1 分钟

[惊喜]荣耀首款电信版手机有望面世

纵观荣耀家族所有机型,很遗憾的是华为荣耀至今没有一款支持电信3G CDMA2000制式的手机。不过这回使用电信手机的小伙伴们有福了。据@华为荣耀手机 微博透露。第一款正在研制当中,并表示“首款荣耀电信版手机,配置当然不能坑”,并透露了一张手机龙骨照片,从照片上看,很有可能首款电信版手机仍然是款双卡双待的手机,配置肯定也不在话下。 另外@华为荣耀手机 在2014年6月12日的微博中表示:关注“华为荣耀吧” 贴吧,进行抢楼、关注、签到等活动即可抽奖赢取荣耀首款电信版手机和一个月贴吧高级会员哦!这是不是预示着华为荣耀首款电信版手机很快就会发布呢?或者在2014年6月24日 荣耀6发布的时候一起发布呢?一切都有可能,总之华为荣耀会不断带给你惊喜,让我们一起期待。

2014年6月13日 · 1 分钟

java多线程学习(八) 之 线程池

线程池的目的是为了使用有限的线程处理大并发的任务。jdk自带丰富的线程池适应不同的应用场景。一般线程池需要考虑这样四个问题: 问题一:Core and maximum pool sizes: 线程池的大小,线程池的目的就是使用为了节省资源,使用有限的线程处理大并发的任务。你要为的线程设置最大的线程数maximumPoolSize,表示该线程数最大创建这么多线程,当要处理的任务多于线程数的时候,就放到队列里去等待,当有线程完成运行任务的时候,再从队列里取出来执行。 maximumPoolSize是最大的线程数,是最坏的打算,如果你认为n个线程就可以处理得了你的任务,你可以设置corePoolSize。表示线程池只创建corePoolSize个线程在处理任务,当任务已经把缓存队列占满,corePoolSize个线程处理不过来的时候,才会去创建新的线程。 问题二:keep-live 如果任务少,线程长时间闲置,就会浪费资源,但是一旦关闭了这个线程,等任务来了再创建线程又浪费时间。你可以根据你的任务的并发数,为线程池设置keep-live时间,当多长时间没有任务处理的线程自动关闭。这样当任务数少的时候,池子里的线程数就会相应减少,当任务多的时候,线程数也会随之增加。 问题三:queue 线程池一般都要指定一个缓存队列,因为你不能保证线程池里的线程足够处理你的任务,当并发任务数超过这个线程的核心线程数的时候,就会把任务暂且存放在这个缓存队列里。 问题四:Reject Policy 当线程池里的maximumPoolSize的线程都在处理任务,queue里的任务也占满了。也就是系统达到了满负荷,再有新任务进来,这时候应该怎么处理,这需要一个Policy 处理策略,对这个新任务应该怎么处理 需要指定一个策略RejectedExecutionHandler java.util.concurrent.ThreadPoolExecutor.AbortPolicy 任务填不进去,直接报错 java.util.concurrent.ThreadPoolExecutor.DiscardPolicy 直接丢弃 java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy 丢一个队列中最老的任务,把新任务加进去 如果你没有其他方面的要求,一个线程池基本只要考虑上面四个方面。 具体线程池的创建和使用可以简单参考: http://zhaoyanblog.com/archives/203.html

2014年6月12日 · 1 分钟

[重磅消息]荣耀6将横空出世

2014年6月8日,华为荣耀官方微博下午3点,发布一条:‘6月9日 宜嫁娶 宜公布消息 我要上头条’ 的图片微博。华为荣耀掌门人刘江峰转发微博,表示:该来的总会来…… 2014年6月9日,华为荣耀官方微博果真发出重磅消息:#荣耀6#创世而生,华为荣耀致敬极致科技之作,诚邀您共同见证荣耀的全新里程碑! 华为荣耀新品发布会将于2014年6月24日在国家奥林匹克体育中心体育馆隆重召开。 从荣耀6的型号推断,其跨越荣耀4,荣耀5,应该是继荣耀1代 荣耀2 荣耀3之后的旗舰机型。 至此网上已经流传了荣耀6的各种谍照和配置,无论何如,荣耀家族又要添加一位重要成员了。让我们一起期待6月24日那一天

2014年6月11日 · 1 分钟

cassandra集群要求严格的时间同步

cassandra的集群对时间的要求是很严格的,在集群中的任何一台机器时间都必须保持同步,即便有一秒的延迟,也会带来莫名其妙的问题。因为cassandra是根据时间戳分辨出最后到达的响应,假设对同一个记录进行不同的操作,如果时间不同步,可能会导致前面的操作在后面的操作之后生效。当在高速操作的时候,可能会发生记录删除不掉,表drop了仍然存在等等奇怪的现象。 同时如果发生这些形形色色的奇怪问题,你应该首先查一下你的集群是否时间同步,假设真是时间不同步导致的,而你又没发现,这会浪费你好多时间去调查原因。 做时间同步可以是集群里的所有机器和同一个时钟同步服务器同步,也可以集群中的某一个机器作为时钟同步服务器,其它机器都和它做同步。 同步方式一般都有两种,一种是定时同步,就是linux下面用crontabl做个定时任务,定时同步。每隔多少时间去同步一次这种同步是粗劣的,不可取的。如果你想保证你的cassandra集群长期稳定的同步,你需要精准的时间同步,就是使用ntp同步,ntp也是一种时钟同步协议。它有自己的一套算法,当前相差多少,下次什么时候同步等等,它的这一套算法,可以保证时钟时时刻刻的同步。 ntp是linux的一个服务,配置文件是/etc/ntp.conf 配置和启动ntp服务的方法不用赘述了,百度下两个linux服务器如何同步,怎么配置ntp同步,文章一大片。

2014年6月10日 · 1 分钟

华为荣耀和小米的死磕市场分布

中端机市场: 小米1/小米1s 荣耀1 荣耀+ 小米2 小米2s 荣耀2 四核爱享版 小米3 荣耀3 荣耀3x 荣耀3x Pro 华为荣耀1到荣耀3x Pro,基于用户体验,沿袭荣耀风格,不断的被用户所接受,所喜欢。相反,小米1到小米3,风格迥然不同,从小米1的丑陋后盖,到小米3的超宽的边框,越发让人讨厌。我一直觉得小米2是小米手机里面唯一说得过去的外观设计。 低端机市场: 红米 荣耀3c/荣耀3c 4G版 红米note 荣耀3x 畅玩版 低端机红米,让小米成功摧毁了大批山寨厂商,极低的价格是其最大的优势,同样低价格换来的是低品质,塑料感十足,山寨感十足的外观设计和材质,让我对其一点兴趣没有,但是低廉的价格,还是让人们趋之若鹜,直到荣耀3c出现,才对其进行了致命的打击。荣耀3c同样的低廉价格,但是高端大气上档次的设计,完胜红米。 平板市场: 小米平板 荣耀X1 小米磨蹭了两年终于出了自己的小米平板,然而改不了中国人的陋习,在小米3模仿lumia之后,这次竟然完全模仿ipad mini。简直和ipad mini一模一样。若是你你会选中小米平板,还是ipad mini呢?难道雷军想的是,我做的东西和苹果一样,价格却比苹果低,就算成功了吗?这里的荣耀X1完全和小米平板不能在一个级别上相提并论的,荣耀X1是一个支持4G的平板手机。我希望买平板的朋友,还是考虑下ipad吧,或者一部手机+平板的荣耀X1也不错啊~ 跨界产品: 小米路由器 荣耀立方 小米盒子 华为秘盒 小米电视 荣耀手环 ——我是花粉,我爱荣耀

2014年6月8日 · 1 分钟

java多线程学习(七) 之 atomic操作

有些时候,我们希望对一个数值类型的操作是一个原子操作,比如一个计数器,我们希望对一个计数器++i 之后,可以拿到的i是++之后的值。 你如果是这样写 m=++i; 当前i可能是2,再执行++i之后是3,此时如果另外的线程也进行了++操作,那当赋值给m的时候,可能有一定的几率就不是3了。 要保证这样的原子操作,可以使用线程同步的方式来实现,但是使用AtomicInteger,会更方便一些。 例: AtomicInteger atomic = new AtomicInteger(0); int num = atomic.incrementAndGet(); incrementAndGet方法保证返回的结果是+1之后的结果。 此外它还有一系列的原子性操作: atomic.getAndDecrement(); //num = i--; atomic.getAndIncrement(); //num = i++; atomic.getAndAdd(3); //num = i; i+=3; atomic.getAndSet(3); //num = i; i=3; atomic.decrementAndGet(); //num = --i; atomic.incrementAndGet(); //num = ++i; atomic.addAndGet(3); //i+=3; num = i; //atomic.set(3); //i=3; atomic.compareAndSet(2, 3); //if(i==2) i=3; 这些操作,保证了对一个数值对象,进行基本操作的原子性。保证了一个线程在对一个数值进行操作之后,拿到得是自己操作后的结果,而不是别的线程操作后的结果。 在实际中使用到的场景主要是多线程下的计数器,版本号等,虽然和Lock实现(ReentrantLock)的原理都一样,都是使用了UnSafe类native的compareAndSwapInt等方法实现的,但是至少在用法上更简洁,更方便。 除了AtomicInteger之外,还有AtomicBoolean,AtomicLong。都是保证对数值类型的操作的原子性。 AtomicReference 是对一个对象引用的原子操作。 举例: MyObject p1 = new MyObject(1); AtomicReference<MyObject> pR = new AtomicReference<MyObject>(p1); pR.compareAndSet(p1, new MyObject(2)); 相当于: MyObject p1 = new MyObject(1); MyObject pR = p1; if(pR == p1) { pR = new MyObject(2); } 保证对一个对象引用的原子操作。 此外还有他们的衍生类型 AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray 保证对数组类型里的元素的操作的原子性。 AtomicIntegerFieldUpdater/AtomicLongFieldUpdater/AtomicReferenceFieldUpdater 保证对一个对象的成员的操作的原子性

2014年6月7日 · 1 分钟

cassandra支持的查询表达式

本文介绍cassandra支持的,目前我所知道的所有查询表达式类型。如果你需要更复杂的查询,单单依靠cassandra是很难做到的,你需要借助其它手段或者工具。 cassandra目前支持的表达式目前有三种: 我们先假设我们的表结构是这样的: create table test( a int, b int, c int, d int, e int, primary key(a,b,c,d) ); create index on test(e); 1、前缀表达式 就是查询条件必须是主键,且前面的主键是=号,只有最后一个主键是> >= < <=。 举例: select * from test where a=1 and b>2; select * from test where a=1 and b=1 and c>2; select * from test where a=1 and b=1 and c=1 and d>2; select * from test where a=1 and b=1 and c>2 and c<2; 以上都是可行的。 ...

2014年6月6日 · 2 分钟