如果您只从单个线程使用LMDB,并且根本不关心数据库持久性,那么打开和关闭事务还有什么理由吗?
在单个事务中执行所有操作会导致性能问题吗?打开和关闭太多事务是否会影响性能?
我发现我的LMDB数据库在增长到超过可用RAM时会显著减慢,但是我的SSD和CPU都没有达到它们的容量。
发布于 2016-06-06 04:02:12
如果事务未提交,则不能保证读取器(在不同的进程中)可以读取该项。写事务应该在某个时刻提交,以便数据可供其他读取器使用。
数据库速度减慢可能只是由于非顺序写入造成的。从这篇文章(https://ayende.com/blog/163330/degenerate-performance-scenario-for-lmdb)开始,非顺序写入需要更长的时间。
发布于 2017-02-27 21:33:25
如果你不提交,你的数据库只会在内存中增长,这将导致操作系统在你耗尽内存时开始交换,这会命中磁盘,这是很慢的。
如果您根本不需要持久性,那么使用内存中的散列映射,在这种情况下,lmdb实际上不能为您提供任何东西。如果你确实想要持久化,但不关心数据丢失,那么选择一个合理的提交(这取决于值的大小,所以实验)比率和提交,即在每1000个值之后。
如果提交的次数太少,那么只会在单个时间点产生整个磁盘访问成本,所以我认为将负载分散一点会更有意义。
https://stackoverflow.com/questions/37339457
复制相似问题