ID和Phone高压缩比存储和查询
ID和Phone高压缩比存储和查询的简单例子, 无多线程处理
运行环境JDK8+maven
0. 模块分割

1. 基本思路
源文件BCP每一行都转为一个全局的RowID,可以直接映射到FileName+文件偏移+行字节数。
身份证,手机号都按照文件映射到 IDtoRowIds, PhonetoRowIds。
所有数据都写入磁盘的索引,通过LRU的堆缓存+操作系统的PageCache来进行快速读取使用。
查询的思路就是通过ID or Phone,通过Bloom过来处理那些索引是需要加载的;获取到对应的RowID列表后,
进行了Merge后,直接拉取源文件的偏移量快速定位的行上。
PS. 为什么不重新把原数据写成新的数据文件,主要是针对业务特点,可以按文件名淘汰旧文件,加入新的数据文件。而不需要全量更新索引和数据。
2. 基于数据的压缩
18身份证: 可以表达为 city + year + 序列号
其中city 可以用3000+的char来表示;year跟进业务特点根据人类不超过128岁的,可以压缩为1个char;后面的seq最多为999X,也可以压缩为一个char。最多三个char
手机号:直接转为Long略位浪费,由于运营商的可枚举,直接将其前三位转为char来表示。最多两个char
3. 巨人的奖杯
索引序列化采用Kryo,具有有高性能序列化,高压缩比。
大量未知数据最好选择bloom算法,但是Java的Bitset存储太浪费,故采用了RoaringBitmap
4. 未来优化方向
B+树来缓存, 或者采用倒排索引的引擎
通过生产消费模式,快速构建索引
ID和Phone高压缩比存储和查询的更多相关文章
- 编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果
建议26:使用匿名类型存储LINQ查询结果 从.NET3.0开始,C#开始支持一个新特性:匿名类型.匿名类型有var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性 ...
- kafka系列四、kafka架构原理、高可靠性存储分析及配置优化
一.概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cl ...
- Redis 存储、查询
[TOC] 数据存储 假设我们在MySQL数据库中有这样一张表: mysql> desc user_info; Field Type Null Key Default Extra id int( ...
- Elasticsearch集群搭建及使用Java客户端对数据存储和查询
本次博文发两块,前部分是怎样搭建一个Elastic集群,后半部分是基于Java对数据进行写入和聚合统计. 一.Elastic集群搭建 1. 环境准备. 该集群环境基于VMware虚拟机.CentOS ...
- Kylin存储和查询的分片问题
本文来自网易云社区 作者:汪胜 相关概念介绍 为了了解Kylin存储和查询的分片问题,需要先介绍两个重要概念:segment和cuboid.相信大数据行业的相关同学都不陌生.Kylin每次提交一个新的 ...
- kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里)
阿里太注重原理了:阿里问kafka如何实现高并发存储-如何找到一条需要消费的数据,kafka用了稀疏索引的方式,使用了二分查找法,其实很多索引都是二分查找法 二分查找法的时间复杂度:O(logn) ...
- springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany
springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...
- 最新IP数据库 存储优化 查询性能优化 每秒解析上千万
高性能IP数据库格式详解 每秒解析1000多万ip qqzeng-ip-ultimate.dat 3.0版 编码:UTF8 字节序:Little-Endian 返回规范字段(如:亚洲|中国| ...
- 「SQL归纳」树形结构表的存储与查询功能的实现——通过路径方法(非递归)
一.树形结构例子分析: 以360问答页面为例:http://wenda.so.com/c/ 我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为: ①根节点 ②根节点的第一层子节 ...
随机推荐
- Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)
Codeforces Round #521 (Div. 3) E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...
- 几种激活Profile的方式
方法一: 选择spring.profiles.active spring.profiles.active=prodspring.profiles.active=dev 方法二: 选择spring.pr ...
- 基于TI 多核DSP 的大数据智能计算处理解决方案
北京太速科技有限公司 大数据智能计算,是未来的一个发展趋势,大数据计算系统主要完成数据的存储和管理:数据的检索与智能计算. 特别是在智能城市领域,由于人口聚集给城市带来了交通.医疗.建筑等各方面的压力 ...
- 【LeetCode】深搜DFS(共85题)
[98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...
- MySQL Authentication plugin 'caching_sha2_password' cannot be loaded
很多用户在使用Navicat Premium 12连接MySQL数据库时会出现Authentication plugin 'caching_sha2_password' cannot be loade ...
- MySQLdb-python安装
安装很简单,步骤如下: 前期:yum -y install python-setuptools,或者自己网上找源码包安装 1. 下载安装包: #wget https://pypi.python.or ...
- 为什么单个binlog会大于max_binlog_size设置
查看参数设置mysql> show global variables like '%max_binlog_size%';+-----------------+------------+| Var ...
- elasticsearch failed to load elasticsearch nodes
转载:https://blog.csdn.net/weixin_44714808/article/details/90049315 elasticsearch 安装在linux时使用springboo ...
- Java programming language does not use call by reference for objects!
Instead, object references are passed by value! A method cannot modify a parameter of a primitive ty ...
- pycharm html 注释
修改方式:如图修改成值None以后,command+/快捷键,html注释的符号就是<!-- 注释内容 -->:为Jinja2的时候,注释符号就是{# 注释内容 #} 修改成None时,H ...