1 , phoenix配置文档+demo-crud程序
2 , solr索引原理(一次性建立还是每次都建立,对值)
将HBase表中涉及条件过滤的字段和rowkey在Solr中建立索引,通过Solr的多条件查询快速获得符合过滤条件的rowkey值,拿到这些rowkey之后在HBASE中通过指定rowkey进行查询
phoenix VS solr
第一种方案是通过HBase的普通API获取数据建立索引:
phoenix是HBASE的sql层,本质还是调用HBASE API,数据存放在HBASE
solr是一种独立的服务,存在自己的服务器,建立索引的数据存放在solr服务器,用户访问时,根据solr提供的接口访问到
优点:HBase与Solr彼此没有任何耦合,通过外部java程序来控制索引的创建修改,整个系统的高可用性和容错性有保证。
缺点:效率较低。每秒处理125条数据(加大线程可以提高效率)
第二种方案是用到HBase的Mapreduce框架
优点:分布式并行执行效率特别高,处理1000万条数据仅需5分钟
缺点:但是这种高并发需要对Solr服务器进行配置调优,不然会抛出服务器无法响应的异常。适合批量处理,数据量较小时不适合。
第三种方案是在往HBase写数据的过程中,触发HBase的coprocessor的observer功能调用solr服务,建立solr索引。是在Base的中实现。
优点:外部调用端不需要考虑solr索引的建立问题,只需要调用HBase操作数据,索引的建立交给HBase调用Solr实现。
缺点:协处理器运行在和RegionServer相同的进程空间里,出错的协处理器有潜在可能使进程崩溃,导致HBase的数据出错。
综上所述,考虑到HBase集群的高可用性、容错性、扩展性等,建议主要使用第一种方案建立索引,第二种方案为辅助。
ElasticSearch