SSDB FAQ - 常見問題

2019-02-18 14:52 更新

  • 問: 這里沒有我想問的問題和答案, 我應(yīng)該怎么辦?

答: 我推薦所有人通過學(xué)習(xí)文檔和使用自己大腦思考來回答自己的問題.

如果你經(jīng)過學(xué)習(xí)文檔, 并且進(jìn)行充分思考后, 仍然無法得到答案, 你可以到 Github 上提 issue.

注意, 作為一個(gè)技術(shù)產(chǎn)品的用戶, 一個(gè)互聯(lián)網(wǎng)工作者, 甚至是一個(gè)程序員, 你應(yīng)該學(xué)會(huì)基本的提問技能. 如果你的提問沒有得到回答, 那么責(zé)任不在被問者, 而在于你自己, 你自己沒有像個(gè)正常的技術(shù)人那樣正確地提問.


  • 問: 為什么我在本機(jī)可以訪問 SSDB 服務(wù)器, 在其它機(jī)器卻不能呢? 提示 Connection refused.

答: 默認(rèn)的配置文件基于安全考慮, 只開放給本機(jī)訪問. 如果你想開放給網(wǎng)絡(luò)上的其它 IP 訪問, 請按文檔修改配置.

  • 問: 為什么并發(fā)數(shù)上不去? 服務(wù)器報(bào)錯(cuò) Too many open files, 客戶端報(bào)錯(cuò) Connection reset by peer.

答: 請參考文檔 進(jìn)行配置.

  • 問: 我把一個(gè), 兩個(gè), 或者所有的 key 都刪除了, 為什么 SSDB 占用的內(nèi)存和磁盤空間并沒有釋放?

答: SSDB 有自己策略來決定何時(shí)釋放或者是否釋放內(nèi)存和硬盤占用, 你不能要求 SSDB 立即或者在未來某個(gè)時(shí)間, 或者基于某個(gè)條件 釋放這些空間. 而且, 即使數(shù)據(jù)庫清空了, SSDB 仍然會(huì)保留一些信息, 因此仍然占用部分硬盤空間. 你不應(yīng)該關(guān)心這個(gè)問題.

  • 問: 為什么 SSDB 偶爾會(huì)使用 100% CPU?

答: SSDB 偶爾使用 100% CPU 是完全正常的, 請不要大驚小怪. 這是因?yàn)?SSDB/LevelDB 在進(jìn)行數(shù)據(jù)庫整理(Compaction)操作, 持續(xù)的時(shí)間一般隨著數(shù)據(jù)變大而變長, 一般只持續(xù)數(shù)秒.

  • 問: 為什么 SSDB 偶爾會(huì)使用較多磁盤 IO?

答: SSDB 偶爾使用較多磁盤 IO 是完全正常的, 請不要大驚小怪. 這是因?yàn)?SSDB/LevelDB 在進(jìn)行數(shù)據(jù)庫整理(Compaction)操作, 持續(xù)的時(shí)間一般隨著數(shù)據(jù)變大而變長, 一般只持續(xù)數(shù)秒.

  • 問: 為什么 SSDB 偶爾會(huì)使用較多內(nèi)存空間, 然后又降下來?

答: SSDB 使用的內(nèi)存空間是變動(dòng)的, 可能忽高忽低. 使用的內(nèi)存空間的上限在文檔 中有描述.

  • 問: Compaction 時(shí)服務(wù)會(huì)有稍微變慢, 我能設(shè)定 Compaction 執(zhí)行的時(shí)間嗎?

答: 很遺憾, 你不能設(shè)定 Compaction 在何時(shí)執(zhí)行, SSDB/LevelDB 有自己策略和機(jī)制, 決定何時(shí)應(yīng)該進(jìn)行 Compaction. 根據(jù)大多數(shù)用戶的使用反饋, Compaction 對服務(wù)沒有任何影響.

  • 問: 我原來的配置文件中沒有打開壓縮選項(xiàng)(compression: no), 我能中途把 compression 改為 yes 嗎?

答: 是的, 你可以在任何時(shí)候修改 compression 選項(xiàng), 只要你重啟 ssdb-server, 新的修改就能生效. 更改后, 原來的數(shù)據(jù)依然兼容, 不會(huì)有任何問題.

  • 問: 我開啟了壓縮選項(xiàng), 但 SSDB 的硬盤占用并沒有變小, 這是怎么回事?

答: 無論你開啟或者關(guān)閉壓縮選項(xiàng), 只要重啟后, 新的選項(xiàng)就已經(jīng)生效了. 但是, 新的選項(xiàng)不一定立即影響原來的舊數(shù)據(jù), SSDB 會(huì)在合適的時(shí)候?qū)⑿逻x項(xiàng)應(yīng)用于舊數(shù)據(jù), 你無法控制這一點(diǎn).


  • 問: 有命令可以知道 SSDB 中存儲的 key 總數(shù)嗎?

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

  • 問: SSDB 支持 key 查找嗎? 支持通配符 模糊查找嗎?

答: SSDB 支持, 且支持前綴查找, 也就是類似a這樣的查找, 而不支持 aa 或者其它的模糊查找. 具體用法請參見命令:scanhlistkeyshkeyshscanzlistzkeyszscanqlist 的文檔.

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

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

答: SSDB 不支持 sets, 以后也不太可能支持, 因?yàn)橛刑娲桨? 你可以用 hash 來替代 sets, 因?yàn)橐粋€(gè) hash 的 key 是唯一的, 可以實(shí)現(xiàn)集合的特性. 至于交集, 并集等操作, 你只能自己實(shí)現(xiàn). 例如, 求交集, 你可以遍歷第一個(gè) hash 的 key, 然后和第二個(gè) hash 對比, 把結(jié)果存入第三個(gè) hash.


  • 問: 我用 Twemproxy 配置 SSDB 做負(fù)載均衡和集群, 但是當(dāng)我用 ssdb-cli 連接 Twemproxy 時(shí), 會(huì)報(bào)錯(cuò), 為什么?

答: 因?yàn)?Twemproxy 不支持 SSDB 網(wǎng)絡(luò)協(xié)議, 所以, 你只能使用 redis-cli 連接 Twemproxy. 注意, 你可以用 ssdb-cli 或者 redis-cli 連接 SSDB, 那是因?yàn)?SSDB 支持兩種協(xié)議, 而 Twemproxy 只支持一種.

  • 問: 如何在一臺機(jī)器上部署多個(gè) SSDB 實(shí)例?

答: 每一個(gè)實(shí)例使用不同的配置文件進(jìn)行啟動(dòng), 而且, 配置文件里的 work_dir server.port 不能相同, 也就是每個(gè)實(shí)例的數(shù)據(jù)庫存儲路徑, 以及監(jiān)聽端口. 如果 pidfile logger.output 使用的是絕對路徑, 也要保證不能相同, 如果是相對路徑, 由不需要, 因?yàn)槟J(rèn)跟隨 work_dir 而不同了.

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號