SolrCloud介绍
在我们应用还很渺小的时候,一台Solr服务器能完全胜任这份工作,随着我们应用慢慢长大,访问也越来越多,一台Solr服务器的弊病也逐渐显现如查询变慢了,机器宕机就无法继续提供服务,于是乎我们引入了Solr集群,通过前端负载均衡和索引Replication来分担一台机器的压力,这样既能提高查询速度,也能避免单机故障问题而且是可伸缩的解决方案,一切看起来很OK,问题也暂时解决了,但是好景不长,随着应用的发展,数据也在与日俱增,需要索引的数据也越来越多,索引文件变得越来越庞大,Replication索引变得越来越低效高成本,每个Solr实例都保存全量大索引数据的方式显然又成了系统性能和可伸缩性的瓶颈,如果能将大索引文件切分,分布在集群中不同机器中且查询的准确性和可用性又不会受到影响该是件多么美好的事情啊,于是SolrCloud出现了...
SolrCloud是基于ZooKeeper和Solr的分布式解决方案,为Solr添加分布式功能,用于建立高可用,高伸缩,自动容错,分布式索引,分布式查询的Solr服务器集群;SolrCloud并非一个新的软件发布包,而是Solr4.0版本新增组件用于跟ZooKeeper配合提供分布式功能,部署时只是修改启动配置;
solr-sql介绍
solr-sql是针对solr cloud开发的一款SQL查询引擎,开源地址:https://github.com/bluejoe2008/solr-sql
使用solr-sql的步骤如下:
- 导入相关的lib,可以采用maven导入中央仓库里的项目:
[html] view plain copy
- <dependency>
- <groupId>com.github.bluejoe2008</groupId>
- <artifactId>solr-sql</artifactId>
- <version>0.9</version>
- </dependency>
这里只是演示了0.9版本的导入,其他版本请参阅项目的首页;
- 创建一个model.json文件,用以指定solrcloud的连接信息,如:
[javascript] view plain copy
- {
- version: '1.0',
- defaultSchema: 'solr',
- schemas:
- [
- {
- name: 'solr',
- tables:
- [
- {
- name: 'docs',
- type: 'custom',
- factory: 'org.apache.calcite.adapter.solr.SolrTableFactory',
- operand:
- {
- solrServerURL: 'http://bluejoe1:8983/solr/collection1',
- solrCollection: 'collection1',
- //solrZkHosts: 'bluejoe1:9983',
- columns:'id integer, name char, age integer',
- columnMapping: 'name->name_s, age->age_i'
- }
- }
- ]
- }
- ]
- }
[java] view plain copy
- Properties info = new Properties();
- info.setProperty("lex", "JAVA");
- Connection connection = DriverManager.getConnection(
- "jdbc:calcite:model=src/java/test/model.json", info);
-
- Statement statement = connection.createStatement();
- String sql = "select * from docs where not (age>35 and name='bluejoe')";
- ResultSet resultSet = statement.executeQuery(sql);
-