1. Collection別名
簡單理解,Collection 的別名是在solrColud云上的Collection做的又一層包裝,可以用一個別名的Collection對應后臺多個實際的Collection。
優(yōu)點:
1、可以將實際的Collection和客戶端程序分離開來,如果實際的collection改名了,只需要更改別名即可,不需要更改客戶端程序。
2、可以簡化跨越多個collection查詢操作,一個別名Collection可以對應一個或多個后臺實際的Collection。
用處:
舉個例子:
假設我們需要保存一年的一個叫solr應用程序的日志,我們前臺需要完成,除當月外前幾個月日志搜索和當月日志搜索。
可以這樣設計,一個月數據保存在一個Collection上,建立一個別名假設叫CollectionOld指向除當月外其他的月的Collection,
每當新建一個Collection的時候,我們就默默的更改別名多指向一個月的Collection;
新建另外一個叫CollectionNow的Collection指向當月的Collection,每次新建一個的時候就調整這兩個匿名的Collection即可。
1、先用如下命令創(chuàng)建一個CollectionOld
/admin/collections?action=CREATEALIAS&name=CollectionOld&collections=solrCollection_201601,solrCollection_201602,solrCollection_201603
到了四月份新建一個solrCollection_201604
2、 新建一個Collection后執(zhí)行命令:
1) ?/admin/collections?action=DELETEALIAS&name=CollectionOld ?刪除原來別名。
2)/admin/collections?action=CREATEALIAS&name=CollectionOld&collections=solrCollection_201601,solrCollection_201602,solrCollection_201603,solrCollection_201604 創(chuàng)建新的匿名。
通過以上方式設計好處:
1、可以將非當月的大量的不變的數據和當月小量的實時變動的數據分離開來,如果再配合前臺的選項,一定程度上實現了
讀寫分離,在不變數據上做優(yōu)化,將不會影響建索引的速度,而建索引同樣不會影響到不變數據部分的查詢性能。
2. 定制文檔hash
我們知道,solr在添加文檔建索引的時候,通過文檔id來進行hash到具體哪一個shard上去,從而實現一個Collection上的數據平衡性。
但是這也有個弊端就是我們在做查詢的時候,需要到每個shard并行查詢,然后再將總結果返回,這一定程度上降低了性能。
solr支持一個特性就是我們可以通過特殊標記文檔id,將這類文檔都建立在特定的shard上,然后查詢的時候只需要設置下一個參數
就可以支持直接到這個shard查詢,從而提高了建索引的速度和查詢速度。(帶來的弊端就是一個Collection上的幾個shard上的文檔數量可能不均衡)
注意:這里的路由到特定的shard,但是沒辦法路由的具體的shard的,這個和直接路由的區(qū)別在此。
方法:就是文檔id以 !分隔,前面可以為指定一個標示,后面為原來的文檔id即可,如solr!doc123.
solr利用了!前面的16個bit做hash,又用了后面的16個bit做hash最終文檔ID的hash是將兩者組合起來。
查詢:
由于你指定了文檔的hash,那么在查詢的時候如果需要快速查詢則也需要特殊設置,方法就是查詢時候添加參數:_route_=solr! 即可以直接查詢到原來特定的shard上。
如果需要設置多個,可以用,號分隔。比如:_route_=solr!,squid!
用處:
1、對于一些速率要求高的,日志量又不大的,又必須和其他日志混在一個collection中存儲的文檔,可以通過這種方式來指定。