前面介紹了solr在建立索引庫的時候可以指定多個shard來同時索引資料,那麼問題來了,文件是通過何種規則講資料負載均衡到每個分片之上的呢,solr提供了兩種路由方式:雜湊路由(composite),指定路由(implict)。其中雜湊路由,建立collection的時候需要明確指定shard數量,後期shard可以進行**(split)操作,但是不能增加或者刪除shard。solr預設的就是採用這種路由模式,利用計算文件id的雜湊值,來判斷將此文件索引到哪個分片之上,這樣做的好處是可以使得每個shard上資料負載均衡,但在追求極限速度之下,會浪費掉不少時間。第一,計算hash值需要耗時;第二,資料在各個分片之間遷徙分發需要消耗網路以及記憶體資源。所以我們選擇了直接路由模式。工作模式如下圖,透過collection,直接指定分片載入資料:
直接路由模式顧名思義,指定索引具體落在路由到哪個shard,該模式同樣在建立collection時需要具體指定shard數量,後期可以動態追加分片以及刪除分片,但是如果乙個分片過大時不能進行**的。需要注意的是:
1)索引要特殊方式通過以下url新建
2)在solr4.x版本中通過更改schemal.xml在5.0以上更改managed-schema檔案新增以下字段定義:
3)利用solrj新增文件的時候需要加入以下字段:
doc.addfield("_route_","shard_x")
通過直接路由的模式,我們可以每個執行緒操作乙個shard,如果物理機上有多塊硬碟,就可以每個硬碟上部署乙個solr節點,這樣多塊硬碟之間的索引效能是互不影響的,我們就可以隨著節點數的增加而線性增長。帶來的問題就是可能會導致資料分布不均,而使某個分片過載,不過我們系統中資料中介軟體使用的是apache kafka,乙個topic設定了多個partiton,在這一層報文已經做了一次均衡路由,每個partiton消費出來的資料負責寫乙個solr的shard,所以不用擔心這個問題,後面有機會介紹下kafka訊息中介軟體。 solr文件索引最佳實踐
others solr solr的文件生成後,需要將其提交到solr集群,提交的方法有以下三種 每生成乙個文件就直接提交至solr cloudsolrclient client new cloudsolrclient solr zk solrinputdocument doc2 new solrin...
MySql索引優化實踐
mysql 查詢官方預設底層索引這一頁大小 show global status like innodb page size variable name value innodb page size 16384 位元組0 1024 16k 如果乙個節點設定為 bigint 的話mysql 預設是8個...
mysql索引實用優化實踐
最近在寫一些資料統計的面板,裡面有sql對錶資料的聚合統計,我的主表現在有100來萬的資料,其間看了很多資料。記錄一下sql索引的優化過程.sql 如下,只有乙個連表查詢,再加上函式聚合出結果 select count if b.severity 1,true null severityallnum...