我最近尝试过leveldb,我发现一些单独的操作会很长(最长的是10s),尽管它的百分比非常低(约0.01%)。我设置了写入缓冲区256m,我的值约为64k。 有人可以帮我吗?非常感谢你!leveldb很长的单人操作!一个leveldb_put操作只需9s
0
A
回答
0
从我对LevelDB的理解来看,64K的值比LevelDB的优化值要大得多。由于LevelDB以已排序的方式存储密钥,因此一个具有大值的密钥可能需要更新许多内部数据块。如果64K是您需要的固定大小的平均大小,那么您可能需要调整头文件中的某些参数。
但是10s似乎太长了。你确定没有其他来源可能会影响正在运行的进程吗?你能分享一些更多的细节,比如总密钥数量,访问/更新模式吗?
0
如果你在谈论插入(PUT)。您可能会看到几个长延迟请求。 LevelDB当缓冲写入超过阈值(默认为2MB)时,将SSTables(日志结构,不可变,数据单元)写入磁盘。这些新的SSTables被写入Level-0。
SSTables累积在磁盘上,LevelDB将合并这些SSTable与较旧的SSTables。有几个级别的SSTables,合并(称为压缩)在每两个连续级别上运行。 (L0,L1),(L2,L3)等。 关键是,当(L2,L3)或(L4,L5) )压缩正在执行,写入将在其他级别停止。 LevelDB以大单位进行数据重组,通常涉及数十兆字节的一次压缩。所以当它发生时,你会看到你的PUT操作已经排队,并且它必须等到压缩完成。
相关问题
- 1. SOAP WSDL工作只需一人操作
- 2. php下一个/当前操作需要很长时间
- 3. 只需点击一下操作图像
- 4. Doctrine2 ORM - 需要很长时间的持久性操作
- 5. NSOperation cancelAllOperations需要很长的时间来取消操作
- 6. 锁定和操作需要很长时间
- 7. SQL Server“审计注销”操作需要很长时间。
- 8. NHibernate.ISession.Flush()在删除()后需要很长时间 - 操作
- 9. 简单的JavaScript只有“下一个”和“前一个”操作?
- 10. 存储在单折叠操作的每一个操作
- 11. 单元操作 - 加操作的每一个细胞
- 12. 在JavaScript中运行一个长操作?
- 13. S3只能操作一次?
- 14. 瘦长操作DOM
- 15. 管理很长一段时间的操作与Java
- 16. Activity的onCreate()的长操作
- 17. asp.net'如果'操作员需要两个或三个操作数
- 18. 很长一段时间运行DB操作
- 19. 列长度上的操作
- 20. 一个DIV超过两个人,但只有其中的一个操作
- 21. 在单个NSOperationQueue中管理多个操作像暂停/恢复单一操作
- 22. MBProgressHud - 只需在一个标签中操作?
- 23. 一个非常简单的操作
- 24. 一个简单的PHP数组操作
- 25. OpenERP主页操作和菜单操作
- 26. “长度”操作符不允许将参数作为操作数
- 27. 在Chrome扩展浏览器操作中需要两个操作
- 28. 批量操作一个接一个v.s批量操作
- 29. 只有在后台操作很长的情况下才显示进度
- 30. 单个表单的多个操作