Tsearch笔记
1 clientNode
clientNode代表一个查询的节点,也就是部署在客户端的实例。他除了查询的作用外,还具有定时触发全量和增量dump、构建索引的工作。
对于一个搜索引擎来说,每次的增量、全量只需要一次执行。但是clientNode却可能会有多个,所以需要通过zk来实现分布式协调。多个clientNode会去抢锁,抢到锁的node,具备了触发增量和全量的资格。
至于定时触发的功能是通过TriggerNode来触发的,通过克隆表达式来配置。
?个人觉得clientNode根本没有必要担负触发全量的任务,完全可以由另外一个单独的Node来负责所有应用的全量任务触发。增量倒是需要,让应用的增量逻辑跑在自己的服务器上,负责增量数据的导入hdfs的工作。
2 全量与增量
数据源来自于hdfs,全量的数据一般是通过数据仓库那边每天定时同步一份完整的数据到hdfs;增量数据,一般是由clientNode定时导入数据到hdfs里。引擎会消费这些数据进行全量和增量索引的构建,索引文件会写到hdfs里面,然后CoreNode再把hdfs的索引文件拷贝到本地,提供搜索服务。
采用HDFS作为存储是因为它的可靠性,多份数据备份,天然对大文件读写有良好的支持。
3 dump
Dump通俗说就是将数据导入到指定存储,服务端将对这些数据进行索引构建,之后索引文件推送到检索服务器提供查询服务。
4 分区,行列
当数据量很大的时候,为了避免单个CoreNode的内存消耗过大,需要按照数据的某个字段来分区,把完整的数据分成几份放到不同的CoreNode里面,请求根据那个字段路由到对应的CoreNode;当访问量很大的时候,所有的访问如果都到一个CoreNode,CoreNode会负载过重,所以CoreNode需要有多个副本,把请求随机的分配到其他副本上。
5 增量补偿
由于数据源来自于hdfs,hdfs的数据是DB的一个快照,非实时。例如1点之前完成了0点之前的DB快照hdfs的索引构建,需要补偿消费0点到1点的增量hdfs数据