如果您只使用单个线程中的LMDB,并且根本不关心数据库持久性,是否有任何理由打开和关闭事务?
在单个事务中执行所有操作会导致性能问题吗?打开和关闭太多交易是否会影响性能?
我发现我的LMDB数据库一旦比可用内存量大,就会大幅减速,但我的SSD和CPU都不能接近它们的容量。
答案 0 :(得分:0)
如果未提交交易,则无法保证读者(在不同的流程中)可以读取该项目。写入事务应该在某个时刻提交,因此数据可供其他读者使用。
数据库减速可能仅仅是由于非顺序写入。从这篇文章(https://ayende.com/blog/163330/degenerate-performance-scenario-for-lmdb)开始,非顺序写入需要更长时间。
答案 1 :(得分:0)
如果你没有提交你的数据库只是在内存中增长,这将导致操作系统在内存不足时开始交换,这会占用磁盘,这很慢。
如果您根本不需要持久性,那么使用内存中的哈希映射,在这种情况下,lmdb实际上并没有为您提供任何内容。如果你确实想要持久性但不关心丢失数据,那么选择一个合理的提交(取决于值大小,所以实验)比率和提交,即每1000个值左右后。
如果你很少提交,你只需要在一个时间点承担整个磁盘访问的成本,所以我认为将这种负载分散一点更有意义。