[TOC]數據庫
(1) 緣由:vim
Solr服務中默認使用的是UTC時間, 而中國本地時間爲東八時區, 即比UTC標準時間多8小時.bash
(2) 示例:服務器
① 中國內地服務器時間爲
2018-10-10 20:00:00
, 系統將當前時間添加到Solr索引中時, Solr底層發現此時間的格式爲UTC + 8
, 它將對該時間減去8小時處理, 而後創建相關索引. ② 在查詢上述添加的時間時, Solr直接將索引信息返回, 變爲:2018-10-10T12:00:00Z
==> 時間少了8小時.app
(3) 不一樣的時間格式:spa
- UT, Universal Time, 世界時: 是基於天體觀察計算出來的時間, 是指英國格林尼治所在地的標準時間. 因爲天體運行的一些不肯定性(好比地球的自轉並非勻速的, 並且正在緩慢減速), 因此UT時間並不均勻.
- UTC, Universal Time Coordinate: 協調世界時, 是基於原子時鐘的時間, 是均勻的時間. 爲了與UT時間保持較小的差距, UTC體系中增長了閏秒, 即某些年份的最後1分鐘有61秒.
- GMT, Greenwish Mean Time, 格林尼治標準時間: 是人們對UTC的另外一種稱法. 本初子午線被定義爲英國倫敦郊區的皇家格林尼治天文臺所在的經線, 此前人們將此地的時間當作標準時間, 但後來發現基於地球的時間並不許確, 在提出UTC概念後, 人們仍然天然地使用GMT來表達時間, 而此時的GMT == UTC.
經過Solr Admin (Solr Web界面)查看:.net
(1) 進入Solr Admin, 點擊左側的Java Properties
菜單, 進入Java屬性設置頁面;code
(2) 下拉右側的滾動條至底部, 能夠看到時區屬性, 以下圖所示:orm
<img src="https://img2018.cnblogs.com/blog/1438655/201903/1438655-20190328233102998-1808924987.jpg" width="80%" alt="Solr用戶本地系統的時區">xml
說明: 默認的時區爲UTC, 上圖是已經修改後的東八區(GMT+8).
① 咱們知道, Solr中的數據源有不少是相似於MySQL的關係型數據庫, 也就是Solr經過其DIH(Data Import Handler)處理;
② Solr在更新數據時, 會記錄這些數據的最後更新時間戳, 保存在Collection/conf
目錄下, 與db-data-config.xml
文件同級, 文件內容相似於:
#Thu Jan 24 15:03:58 CST 2019 _delta.last_index_time=2019-01-08T05\:48\:21Z _full.last_index_time=2019-01-24T07\:03\:37Z last_index_time=2019-01-24T07\:03\:37Z
③ 在向MySQL、MongoDB等數據庫中寫入數據時, 添加相似於CreateTime
的字段, 用於記錄數據的入庫時間戳;
④ 經過比較Solr和數據庫的更新時間戳, 完成對數據是否須要增量同步的判斷, 從而實現數據更新. 對比方式相似於:
<!-- MySQL中增量同步數據的配置相似於 --> <entity name="BookShop_delta" query="SELECT ID, Name, CreateTime FROM BookShop WHERE CreateTime >= '${dataimporter.last_index_time}'" pk="ID"> <field column="ID" name="ID" /> <!-- ... --> </entity> <!-- MongoDB中增量導入數據的配置相似於 --> <entity name="_delta" processor="MongoEntityProcessor" query="{'CreateTime': {'$gte': ISODate('${dih.last_index_time}')}}" collection="BookShop" project="{_id:0, ID:1, Name:1, CreateTime:1}" datasource="ShopMongo" transformer="MongoMapperTransformer" > <field column="ID" name="ID" /> <!-- ... --> </entity>
由上述分析可知, 修改時區的緣由主要是: 方便與數據庫中數據的自動同步.
通常狀況下, MySQL等數據庫服務器的時區都與實際時區一致, 也就是東八區(GMT+8), 而Solr默認的時區是UTC, 與東八區(GMT+8)相差8個小時.
這種差距致使咱們沒法直接根據Solr的更新時間戳和MySQL等數據庫的更新時間戳進行比較, 從而使得數據的導入出現問題.
==> 因此須要修改Solr的時區.
Solr的時區屬性所在配置文件, 在${SOLR_HOME}/bin
下:
solr.in.sh
是Linux系統下的啓動腳本,solr.in.cmd
是Windows系統下的啓動腳本.
以Linux系統爲例, 編輯solr.in.sh
文件:
vim /data/solr-cloud/solr-4.10.4/bin/solr.in.sh
找到SOLR_TIMEZONE
的相關配置: SOLR_TIMEZONE="UTC"
, 能夠看出默認的時區是UTC, 並且被註釋掉了. 可將其修改成:
SOLR_TIMEZONE="UTC+8"
保存退出後, 重啓Solr服務, 而後再次進入Solr Admin管理界面, 查看Java Properties
菜單, 便可發現時區已經修改爲功.
參考資料
版權聲明
做者: 馬瘦風
出處: 博客園 馬瘦風的博客
您的支持是對博主的極大鼓勵, 感謝您的閱讀.
本文版權歸博主全部, 歡迎轉載, 但請保留此段聲明, 並在文章頁面明顯位置給出原文連接, 不然博主保留追究相關人員法律責任的權利.