1. 程式人生 > >白喬原創:solr cloud的sql查詢引擎solr-sql

白喬原創:solr cloud的sql查詢引擎solr-sql

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

  1. <dependency>  
  2.   <groupId>com.github.bluejoe2008</groupId>  
  3.   <artifactId>solr-sql</artifactId>  
  4.   <version>0.9</version>  
  5. </dependency>  


這裡只是演示了0.9版本的匯入,其他版本請參閱專案的首頁;

 

 

  • 建立一個model.json檔案,用以指定solrcloud的連線資訊,如:

[javascript] view plain copy

  1. {  
  2.     version: '1.0',  
  3.     defaultSchema: 'solr',  
  4.     schemas:  
  5.     [  
  6.         {  
  7.             name: 'solr',  
  8.             tables:  
  9.             [  
  10.                 {  
  11.                     name: 'docs',  
  12.                     type: 'custom',  
  13.                     factory: 'org.apache.calcite.adapter.solr.SolrTableFactory',  
  14.                     operand:  
  15.                     {  
  16.                         solrServerURL: 'http://bluejoe1:8983/solr/collection1',  
  17.                         solrCollection: 'collection1',    
  18.                         //solrZkHosts: 'bluejoe1:9983',  
  19.                         columns:'id integer, name char, age integer',  
  20.                         columnMapping: 'name->name_s, age->age_i'  
  21.                     }  
  22.                 }  
  23.             ]  
  24.         }  
  25.     ]  
  26. }  

 

  • 編寫JDBC客戶端程式碼,如:

 

 

 

[java] view plain copy

  1. Properties info = new Properties();  
  2. info.setProperty("lex""JAVA");  
  3. Connection connection = DriverManager.getConnection(  
  4.         "jdbc:calcite:model=src/java/test/model.json", info);  
  5.   
  6. Statement statement = connection.createStatement();  
  7. String sql = "select * from docs where not (age>35 and name='bluejoe')";  
  8. ResultSet resultSet = statement.executeQuery(sql);  
  9.