0
A
回答
2
直接I/O將是一個糟糕的選擇,原因如下:
對於AOF,我們需要從FSYNC操作去相關的寫操作,因爲他們可能不會在同一個線程發生。使用直接IO時不能這樣做。
對於AOF重寫和RDB,使用stdio(緩衝IO),因爲會寫入很多小對象。我不認爲你可以和stdio一起使用O_DIRECT(有附加到O_DIRECT的約束...)。要使用直接IO,我們必須在低級API的基礎上編寫自己的緩衝系統。
O_DIRECT不適用於所有文件系統,並且不可移植。
有時緩衝區緩存實際上是有用的。例如,當一個從機連接到主機時,它將請求一個RDB轉儲,然後讀取該轉儲。如果沒有緩衝區緩存,此操作將生成I/O的兩倍。
通常,轉儲文件比內存中的數據小得多。在很多情況下,你不會像你想象的那樣獲得更多收益。
雖然O_DIRECT可能是不適合的Redis一個很好的解決方案,使用帶有POSIX_FADV_DONTNEED選項posix_fadvise可能是在某些情況下是有用的。過去,我對RDB轉儲進行了簡單的實現。
相關問題
- 1. 爲什麼IO#不能用於TCPSocket?
- 2. virtio,emulated-IO,direct I/O,I/O passthrough,SR-IOV有什麼區別?
- 3. 爲什麼scrapy-redis不起作用?
- 4. IO操作 - 爲什麼不cd?
- 5. 爲什麼io未定義?
- 6. 爲什麼不能使用類IO的實例方法noecho?
- 7. 爲什麼在這裏不使用std :: io?
- 8. 爲什麼Redis SortedSet使用Skip List而不是平衡樹?
- 9. 爲什麼KEYS被建議不要在Redis中使用?
- 10. 爲什麼Redis不能使用requirepass指令?
- 11. 爲什麼redis關閉?
- 12. 當我啓用Wifi Direct時,爲什麼wifi會被禁用?
- 13. 爲什麼使用fromMaybe提取IO(也許布爾)執行兩個IO動作
- 14. 爲什麼嵌套IO monad,IO(IO())作爲函數的返回值?
- 15. 爲什麼Redis被認爲是CP?
- 16. 爲什麼MonadIO特定於IO,而不是更通用的MonadTrans?
- 17. Haskell - 爲什麼它不起作用? (列表中的IO動作)
- 18. 爲什麼這段代碼不起作用? (C基本IO)
- 19. 使用Node.js的中Redis的支持「KUE」庫 - 爲什麼我的Redis的內存使用量不斷增加?
- 20. Redis佔用了太多內存,爲什麼我們使用它?
- 21. 使用Redis作爲pub-sub的用途意味着什麼
- 22. 爲什麼redis SADD不能將數組作爲node.js中的輸入使用?
- 23. 爲什麼異步IO首選
- 24. 節點promise-io - 爲什麼會崩潰?
- 25. 爲什麼atom io編輯器太慢?
- 26. 爲什麼Redis與Sidekiq的命名空間不起作用?
- 27. 爲什麼桌面AES文件IO與Android AES文件IO不兼容?
- 28. AVR [爲什麼IO寄存器具有IO地址和SRAM不會忽略]
- 29. 爲什麼Redis使用整數數據庫編號?
- 30. 使用redis和node.js問題:爲什麼redis.get返回false?