我想知道在速度方面Mongodb findAndmodify vs redis increment命令有多好。我知道Mongodb findAndModify會對文檔做一個r/w鎖定,但是如果我有100個線程試圖同時寫入,那麼是否想知道redis是一個更可取的選項。Mongodb findAndModify vs redis incr
2
A
回答
2
有許多參數可以改變這種比較的結果。
Mongodb將在數據庫級別(而不是文檔)執行r/w鎖定。 Redis是一個單線程服務器,並將序列化所有內容。就併發性的粒度而言,它將大部分是等同的。儘管Redis實現更高效,因爲在Mongodb中,最終會有數百個線程在同一個鎖上競爭。
您還需要考慮在協議級別發生了什麼:Mongodb協議是不對稱的,因此您可以在不檢查最後一次操作是否成功(即沒有強制確認)的情況下推送數據。 Redis協議純粹是客戶端/服務器,因此每個命令都會返回客戶端應用程序必須讀取的結果。你可以通過管道命令。在協議級別,Mongodb可以允許您比Redis更快地推送數據(考慮純粹的性能,不需要任何命令確認)。
它也取決於持久性選項:Mongodb日記是可選的,所以Redis附加文件配置也是如此。根據每個商店的配置情況,您將會得到完全不同的結果。 MongoDB或Redis集羣中的主/從複製也會改變結果...
它可能取決於其他環境因素,例如用於編譯MongoDB或Redis的編譯器,內核版本等...
這就是爲什麼你應該在自己的環境中運行自己的基準。
運行快速和骯髒的基準很容易(但沒有太多的代表性,所以結果必須採取一粒鹽)。
隨着MongoDB中,從蒙戈外殼:
> db.toto.save({_id:1, val:0 })
> ops = [ { op: "update", ns:db.toto, query:{_id:1}, update:{ $inc : { val:1 } } } ] ;
> res = benchRun({ parallel: number_of_connections, seconds: 20, ops:ops, host:"localhost:7380" });
隨着Redis的:
$ redis-benchmark -q -n 100000 -t incr -c number_of_connections -P pipelining_factor
這裏是我剛剛收集了我的箱子一些數字:
MongoDB 1 connection 64613 updates/s
MongoDB 50 connections 53825 updates/s
Redis 1 connection no pipelining 29437 updates/s
Redis 50 connections no pipelining 101626 updates/s
Redis 50 connections pipelining=50 442477 updates/s
我們可以由於不對稱協議,看到MongoDB對於一個連接是非常有效的,但是這種效率隨着由於r/w鎖定導致的連接數量。 Redis沒有流水線和一個連接,因其客戶端/服務器協議嚴重減慢。但是,如果工作負載分散在更多連接上,或者使用流水線操作,等待確認的成本將攤銷,並且Redis可以獲得比MongoDB更高的吞吐量(在此特定的0.02美元基準上)。
相關問題
- 1. Redis INCR和多進程?
- 2. MongoDB FindAndModify排序
- 3. MongoDB-findAndModify with WriteConcern
- 4. MongoDB findAndModify優化
- 5. MongoDB的FindAndModify -
- 6. MongoDB的findAndModify原子
- 7. MongoDB的findAndModify陣列
- 8. MongoDB的分片findAndModify
- 9. mongoDB findAndModify錯誤 - nodejs
- 10. Redis - 在交易中使用Incr值
- 11. MongoDB的PHP findAndModify多性能
- 12. mongodb FindAndModify - 更新數據
- 13. 是mongoDB的findAndModify「transaction-save」
- 14. MongoDB的findAndModify不是和尚
- 15. 使用「findAndModify」有關MongoDB
- 16. php mongodb findandmodify不工作
- 17. findAndModify的MongoDB在陣列
- 18. FindAndUpdate VS更新MongoDB中
- 19. 如何在PHP中使用findAndModify和MongoDB
- 20. 來自多個客戶端的MongoDB findAndModify
- 21. Node JS - MongoDB - findAndModify錯誤對象錯誤
- 22. 不能轉換MongoDb中FindAndModify的ModifiedDocument CSharp
- 23. findAndModify在node.js/MongoDb中的用法
- 24. MongoDB findAndModify()添加查詢更新子句
- 25. MongoDB的FindAndModify問題多進程應用
- 26. Mongoose是否支持Mongodb findAndModify方法?
- 27. MongoDB的findAndModify更新所需的錯誤
- 28. MongoDB findAndModify,有沒有PHP的實現呢?
- 29. MongoDB的錯誤,當我嘗試findandmodify
- 30. NodeJS上的緩存 - Redis vs CouchDB vs ..?
我沒有集結使用redis,但是......爲什麼不使用MongoDBs $ inc命令呢? – Sammaye
測試它(然後在某個地方博客:))。這裏需要考慮StackOverflow的方面太多。硬件,開發人員,管理,維護,需求/需求。 – WiredPrairie
感謝您的回覆...想知道是否有人已經做到了...我會試一試:) –