- Cluster
由一群Node組成,並且由ZooKeeper管理。當有新的Core要加入,必須向ZooKeeper註冊。 - Node
要用來跑Solr的JVM instance,一般來說就是Server。如果有需要的話,一個Node上可以跑好幾個Core。 - Core
Server instance,也同時代表Solr index。每個Core擁有自己的Config文件與schema定義文件。 - Collection
由一群Core組成,而這些Core來自於同一個single logical index。而每個Collection也擁有自己專屬的Config文件與schema文件。 - Shard
單一Collection的邏輯區塊logical section
Solr基本定義釐清
Solr簡介
- 基於Lucene的企業及全文檢索搜尋平台
- 近實時的索引(查詢)能力
- Solr Core是跑在真實Solr伺服器中唯一要被具體命名、可被管理、config的索引,也就是說一台Solr Server可以託管多個Solr Core
- 承上,Core就是索引,那為何要有多個Core呢?因為不同文件有不同的組成方式,例如欄位不同,像商品資料就和氣象資料差異極大,需要不同的Core來索引與儲存
- schema是Solr Core中用來定義欄位的文件,包含欄位的名稱、data type...或是這個欄位是否能被索引或儲存
- schema可以事先定義,也可以透過API動態實現
- schema更新不用重啟Solr Core,但是舊文件不會因為新的schema而更新舊的索引,只有新文件才會套用新schema
- Collection是logical的,Core是physical的
- Solr不提供藉由程式撰寫來Reindex,它的Reindex其實就是index it again,讓整個index的過程重跑一次
- 需要Reindex的情況有"Schema Changes"與"Upgrade"二種,所以強烈建議將Reindex安排在升級的時候一起作,因為實施的過程中有部分時間無法適用,除非用SolrCloud才能index to another collection
- SolrCloud = Solr + ZooKeeper
- 承上,早期作擴展遇到failover都要手動處理,難度很高,後來引入Hadoop常用的ZooKeeper來作failover和load balance,就稱之為SolrCloud
Log Structure Merged Tree簡介
Log Structure Merged Tree簡稱LSM,閱讀筆記如下:
- key:value的儲存系統設計
- 因key:value特性寫入快速,但犧牲讀取速度
- 原理是一棵大樹,分成多棵小樹,每次寫入都由C0開始,資料量變大後,往上merge為C1,並取代舊的C1
- key:value的更新僅限於C0層才會即時操作,若是要更新的資料已經被推到上層了,會等到merge的時候才一併處理
- 需要密集寫入,少量查詢的場景很適合採用LSM
using iOS Dynamic Type on UICollectionViews
- Accessible UICollectionViews With Dynamic Type and Self-Sizing Cells
- UICollectionViewCell dynamic height (Swift)
- iOS UICollectionView estimatedItemSize 自定適應高度(一)
- align single UICollectionViewCell to the left of the collectionView
- Typography - Visual Design - iOS - Human Interface Guidelines - Apple Developer
- Typography - Visual Design - iOS Human Interface Guidelines
Dynamic Type參考官網做法即可,應用在UICollectionView要達到自動縮放cell大小,可參考文章1&2,如果在設定Constraint有問題可參考文章3,都設定成功後可能會遇到cell數量只有一個,cell置中很醜的問題,則是參考文章4。
SDWebImageDownloader cannot cache image
有在寫iOS專案的開發者絕對用過大名鼎鼎SDWebImage,絕大多數使用情境都是指定網路圖片url給某個UIImageView,以SDWebImage達到圖片快取的效果。
UIImageView載入網路圖片最簡單的方式透過sd_setImage方法直接取用,更進階的可以使用SDWebImageManager或SDWebImageDownloader,前者的用途兼具下載圖片與快取圖片,後者只能下載。
但有些圖片提供者要求必須在Http header指定安全性驗證用的value,這時候就只能使用無法圖片快取的SDWebImageDownloader。
為了解決這個問題,可以搭配SDImageCache使用,SDWebImageDownloader下載完後使用url作為key儲存至memory,下次再遇到相同url只要透過此key即可載入快取給UIImageView使用。
程式碼如下
if let imageCache = SDImageCache.shared.imageFromMemoryCache(forKey: myURLString) {
imageView.image = imageCache
} else {
SDWebImageDownloader.shared.setValue("myToken", forHTTPHeaderField: "headerName")
SDWebImageDownloader.shared.downloadImage(with: myURLString) { (image, data, error, finished) in
if image != nil && finished {
SDImageCache.shared.storeImage(toMemory: image, forKey: myURLString)
imageView.image = image
}
if error != nil {
print("[下載圖片失敗] url:\(myURLString), error:\(error!)")
}
}
}
Install Package in Sublime Text 2
成功安裝Package Control後,開始使用它安裝各種plugin套件。
- 點選選單Preference→Package Control
輸入Install Package按enter開啟搜尋package的視窗,在視窗內找到想要的plugin安裝
- 安裝失敗的解決辦法
請檢查網路是否使用有限制的公司網路,如果你是MAC環境網路通順卻還是不行下載,可參考此篇文章開啟Preference→Package Setting→Package Control→ Settings - User修改,在原始檔案中加入下列設定即可
Install Package Control in Sublime Text 2
官網安裝教學有自動跟手動二種,自動只適用目前最新版Sublime Text 3,不知道Sublime Text 3何時開始收錢,反正Sublime Text 2夠用,就記錄一下同樣適用2的手動安裝方式。
- 開啟Sublime Text 2
- 點選選單的Preference→Browse Package...
會開啟安裝路徑下的Packages資料夾,回到上一層Installed Packages資料夾 - 下載package
在官網下載Package Control.sublime-package,將檔案放到前一步驟的Installed Packages資料夾 - 重啟Sublime Text 2
成功的話選單會新增Package Settings與Package Control二個選項
Cmder安裝與使用
- 至Cmder下載所需安裝檔
目前只需能執行簡單shell script,不需要Git其他擴充功能,故選擇下載Mini版。 - 下載完成解壓至任一資料夾
- 設定以系統管理員身份執行(optional)
- 寫一個hello script命名為test1.sh
- 執行Cmder.exe執行test1.sh,如預期輸出Hello
Installing cURL in Windows
cURL不存在於Windows,自行安裝過程如下。
- 下載對應的壓縮包
至curl for Windows下載 - 解壓至想要的路徑
路徑隨意以個人需求為主,本文將解壓後的curl-7.72.0-win64-mingw資料夾放在C:\curl\ - 設定環境變數
承上,cURL執行檔實際位置在C:\curl\curl-7.72.0-win64-mingw\bin,設定環境變數對後續使用較方便 - 檢查是否安裝成功
cmd視窗輸入curl -V,透過檢查版本號確認環境變數有設定成功可以無痛使用