SSDB FAQ - 常見問題



  • 問: 這裡沒有我想問的問題和答案, 我該怎麼辦?

答案: 我推薦所有人透過學習文件和使用自己大腦思考來回答自己的問題.

如果你經過學習文檔, 並且進行充分思考後, 仍然無法得到答案, 你可以到Github 上提issue.

注意, 作為一個技術產品的用戶, 一個互聯網工作者, 甚至是一個程序員, 你應該學會基本的提問技能. 如果你的提問沒有得到答, 那麼責任不在被問者, 而在於你自己, 你自己沒有像個正常的技術人那樣正確地提問.


  • 問: 為什麼我在本機可以存取SSDB 伺服器, 在其它機器卻不能呢?提示Connection refused.

答案: 預設的設定檔基於安全考量, 只開放給本機存取. 如果你想開放給網路上的其它IP 存取, 請按文件修改設定.

  • 問: 為什麼並發數上不去? 伺服器報錯Too many open files, 客戶端報錯Connection reset by peer.

#答案: 請參考文檔 進行設定.

  • #問: 我把一個, 兩個, 或所有的key 都刪除了, 為什麼SSDB 佔用的記憶體和磁碟空間並沒有釋放?

答案: SSDB 有自己策略來決定何時釋放或是否釋放記憶體和硬碟佔用, 你不能要求SSDB 立即或在未來某個時間, 或基於某個條件 釋放這些空間. 而且, 即使資料庫清空了, SSDB 仍然會保留一些資訊, 因此仍然佔用部分硬碟空間. 你不應該關心這個問題.

  • 問: 為什麼SSDB 偶爾會用100% CPU?

答案:  SSDB 偶爾使用100% CPU 是完全正常的, 請不要大驚小怪. 這是因為SSDB/LevelDB 在進行資料庫整理(Compaction)操作, 持續的時間一般隨著資料變大而變長, 一般只持續數秒.

  • 問: 為什麼SSDB 偶爾會使用較多磁碟IO?

## SSDB 

偶爾
使用較多磁碟IO 是完全

正常的, 請不要大驚小怪. 這是因為SSDB/LevelDB 在進行資料庫整理(Compaction)操作, 持續的時間一般隨著資料變大而變長, 一般只持續數秒.

  • 問: 為什麼SSDB 偶爾會使用較多記憶體空間, 然後又降下來?

答案: SSDB 使用的記憶體空間是變動的, 可能忽高忽低. 使用的記憶體空間的上限在文件 中有描述.

#### #####問: Compaction 時服務會有稍微變慢, 我可以設定Compaction 執行的時間嗎?##################答案:### 很遺憾, 你不能設定Compaction 在何時執行, SSDB/LevelDB 有自己策略和機制, 決定何時應該進行Compaction. 根據大多數用戶的使用反饋, Compaction 對服務沒有任何影響.###
  • 問: 我原來的設定檔中沒有開啟壓縮選項(compression: no), 我可以中途把compression 改為yes 嗎?

答案: 是的, 你可以在任何時候修改compression 選項, 只要你重啟ssdb-server, 新的修改就能生效. 更改後, 原來的數據依然兼容, 不會有任何問題.

  • 問: 我開啟了壓縮選項, 但SSDB 的硬碟佔用並沒有變小, 這是怎麼回事?

答案: 無論你開啟或關閉壓縮選項, 只要重啟後, 新的選項就已經生效了. 但是, 新的選項不一定立即影響原來的舊資料, SSDB 會在適當的時候將新選項套用到舊資料, 你無法控制這一點.


  • 問: 有指令可以知道SSDB 中儲存的key 總數嗎?

答案: 如果你想統計的是KV 的數量, 那麼, 在一開始時, 你就要把所有KV 都放在同一個HASH 中, 然後通過 hsize 命令就可以得到key 的數量了. 如果一開始你沒有這麼做, 或者你想統計KV 以外的數量, 那麼答案很簡單- 沒有這樣的單一命令(除非你自己寫腳本遍歷統計).

  • 問: SSDB 支援 key 尋找嗎?支援通配符 模糊尋找嗎?

答案: SSDB 支援, 且支援前綴查找, 也就是類似a這樣的查找, 而不支援 aa 或其它的模糊尋找. 具體用法請參考指令:scan#hlist keys#hkeys#, hscan###########################################################, zlistzkeys##zscanqlist  的文檔.

注意, 這些指令都要求你省略  號!

  • 問: SSDB 不支援sets 集合嗎? Redis 的sadd, sdiff 等求交集, 並集指令我都用不了了?

答案: SSDB 不支援sets, 以後也不太可能支援, 因為有替代方案. 你可以用hash 來替代sets, 因為一個hash 的key 是唯一的, 可以實現集合的特性. 至於交集, 並集等操作,你只能自己實現. 例如, 求交集, 你可以遍歷第一個hash 的key, 然後和第二個hash 對比, 把結果存入第三個hash.


  • 問: 我用Twemproxy 設定SSDB 做負載平衡和叢集, 但是當我用ssdb-cli 連接Twemproxy 時, 會報錯, 為什麼?

答案: 因為Twemproxy 不支援SSDB 網路協定, 所以, 你只能使用redis-cli 連接Twemproxy. 注意, 你可以用ssdb-cli 或redis-cli 連接SSDB, 那是因為SSDB 支援兩種協定, 而Twemproxy 只支援一種.

  • 問: 如何在一台機器上部署多個SSDB 實例?

答案: 每一個實例使用不同的設定檔進行啟動, 而且, 設定檔裡的 work_dir server.port 不能相同, 也就是每個實例的資料庫儲存路徑, 以及監聽埠. 如果pidfile logger.output 使用的是絕對路徑, 也要保證不能相同, 如果是相對路徑, 由不需要, 因為預設跟隨 work_dir 而不同了.