不论对于什么数据库,druid es mysql hbase,凡是能实现秒级查询的数据库,无一不是借助将索引全部存入内存来加快索引。
所以入库的过程本质上就是建索引的过程,这个建索引过程就是有master节点发起的一个mapred任务。
索引只有两种:位图索引(druid hbase),倒排索引(es)
当开始调用java scala版本的插入数据,或者flink sink中的插入数据,本质上就是为单条数据生成索引,并写入数据的过程。
所以生成索引和写入数据的过程是最重要的,涉及到整个分布式存储的架构,实际上写入数据过程就是一个mapred过程。
至于查询很简单,就是根据过滤条件到位图索引中检索。
查索引只是高性能的表现,本质上是因为建索引机制的高效完善。
凡所有的数据库或者分布式存储,学习过程中问自己四个问题
1.数据是如何写的,包括api函数和写数据过程。写数据本质上是由master发起一个mapred任务。
2.数据是如何读的,包括api函数和读数据过程。读的原理简单,但api一般较多。
3.为啥读快,索引原理
4.为啥写快,日志结构合并树(druid hbase)