作家
登录

如何做到单机毫秒完成上亿规模大数据常规统计

作者: 来源: 2017-12-22 11:09:50 阅读 我要评论

(4)求容量:int getSize()返回该CoolBitSet的容量大年夜小

(5)调试查看:String toString(int num)返回该CoolBitSet的二进制字符串,为了削减长度,参数num为须要查看的byte数,如num=5表示查看前5个byte的二进制串

和java的bitmap的实现差别:jdk自带的BitSet类是以long数组实现,并且只能初始化大年夜小,无法限制大年夜小,每个bitset要耗用几百m的内存,多个bitmap轻易造抽空间大年夜量浪费,BitSet类只是本地内存实现,没有分布式存储引擎持久化支撑。

StringBitMap实现了String类型的bitMap,经由过程对hash算法的改进,可以或许做到1亿字符串数据只有200多的碰撞率,5000万内数据几乎没有碰撞率,对于不跨越1亿的数据是很合适的,但1亿以上的字符串数量仍然不合适,碰撞率会大年夜幅上升。开源包指南附带CountDemo.java里的stringBitMapTest办法演示了模仿1000万随机生成的15位IMEI设备号,并返回碰撞个数。

2. 引擎端持久化实现,CoolHashClient供给了以下接口用来操作存储引擎:

(1)int putBitSet(String key, int index):

  • 单项操作,类似CoolBitSet的put,第一个参数为bitmap的key,第二个参数将该bitmap的index地位设为1。

(2)boolean getBitSet(String key, int index):

  • 单项操作,类似CoolBitSet的get,第一个参数为bitmap的key,第二个参数须要获取的index地位的值。

(3)int putBitSet(String key, CoolBitSet cbs):

  • 批量操作,类似CoolBitSet的批量set,将别的一个bitmap对象归并到指定key的bitmap,并返回新增的数量。获取CoolBitSet对象仍然应用get接口Object get(String key)

(4)Object putBitSet(String key, CoolBitSet cbs, String logical):

  • 聚合操作,参数logical可以设置为“and”,“or”,“xor”,“andnot”,”new”之一,对于“andnot”,参数cbs并不起感化,可以传入随便率性不为空的CoolBitSet对象。聚合操作会感化到该key指定的bitmap上,返回值为聚合后的CoolBitSet对象。

以上操作遵守CoolHash的k/v存储束缚,k为字符串,v不跨越2m(可修改默认设备大年夜小)。

留意CoolBitSet对象可以用三种方法进行k/v存储和紧缩:

  1. 存储为bitSet格局,归并数据:putBitSet(String key, CoolBitSet cbs)
  2. 存储为bitSet格局,直接覆盖:put(String key, CoolBitSet cbs)
  3. 通俗kv存储格局,非bitSet格局:put(String key, cbs.getBytes());

2. Object putNx(String key, T value)

因为是对象存储,三种put方法都邑对value数据进行紧缩,采取紧缩率和耗时比较均衡的gzip紧缩。

前两种bitSet格局存储方法,会验证CoolBitSet大年夜小不克不及跨越1亿,不然不克不及提交。

第三种通俗kv存储格局,没有1亿的限制,只要紧缩后大年夜小不跨越2m,可以正常提交,但因为不是CoolBitSet格局,存储引擎无法辨认做聚合等操作。

和redis的bitmap的实现差别:redis实现了bitmap的单项操作和聚合操作,然则没有批量操作,也没有紧缩,经由过程offset指定偏移量的方法分派空间轻易造成浪费。

1. 本地内存实现,CoolBitSet实现了以下bitmap功能:

开源包指南附带CountDemo.java里的演示:

bitSetTest办法:先演示了全量存储,写入10亿数据到1个bitmap,耗时不到1秒;再演示了分区存储,将1亿大年夜小的数据分成10个1000万大年夜小的bitmap存储。

realtimeStatistics办法:演示基于bitmap做用户去重、活泼用户、非活泼用户、重度用户、新增用户等及时F算。

retainLocal办法和retainServer办法:

分别演示了若何应用本地内存和存储引擎计算用户留存。

3. 增长String类型的bitmap支撑:

4. 17.10版本同时供给jdk1.8.0_151编译下”fourinone.jar”包和jdk1.7.0_80编译下”fourinone-jdk7.jar”包。4.17.10版本更新github code和gitee code,本版本所有开源内容已经进行了公司报备,感激对开源的支撑。

【编辑推荐】

  1. 除了数据照样数据?2018年5大年夜 AI (人工智能)猜测
  2. 大年夜咖说:2017年,我眼里的大年夜数据范畴惊喜
  3. 态牛-Tech Neo 11月刊:容器平台治理实践
  4. 史上最污技巧解读 看完妙懂
  5. 大年夜数据和AI怎么竽暌闺现代教导相结合?
【义务编辑:未丽燕 TEL:(010)68476606】

  推荐阅读

  2017互联网十大未解之谜,你能回答几个?

编者按:本文来自每日经济消息,编辑:卢祥勇,36氪经授权宣布。时光似箭,还有两周,2017年就要画上句号了。在这一年迈,互联网行业产生很多重大年夜事宜,比如微信小法度榜样上线、顺丰菜鸟互撕、共享>>>详细阅读


本文标题:如何做到单机毫秒完成上亿规模大数据常规统计

地址:http://www.17bianji.com/lsqh/40088.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)