Single Threaded LMDB



如果您只从单个线程使用 LMDB,并且根本不关心数据库持久性,那么有什么理由打开和关闭事务吗?

在单个事务中执行所有操作是否会导致性能问题? 打开和关闭过多交易是否会对性能造成影响?

我发现我的 LMDB 数据库一旦变得大于可用 RAM,就会急剧减慢,但我的 SSD 和 CPU 都没有接近它们的容量。

如果未提交事务,则无法保证读取器(在不同的进程中)可以读取该项目。写入事务应在某个时间点提交,以便数据可供其他读取器使用。

数据库速度变慢可能只是由于非顺序写入。从这篇文章(https://ayende.com/blog/163330/degenerate-performance-scenario-for-lmdb)来看,非顺序写入需要更长的时间。

如果你不提交你的数据库只会在内存中增长,这将导致操作系统在内存不足后开始交换,这会击中磁盘,这很慢。

如果您根本不需要持久性,请使用内存中的哈希映射,在这种情况下,lmdb 实际上不会为您提供任何东西。如果您确实想要持久性但不关心丢失数据,请选择合理的提交(取决于值大小,因此进行实验)比率并提交,即每 1000 个值左右之后。

如果您提交的频率太低,您只会在单个时间点产生磁盘访问的全部成本,因此我认为稍微分散该负载更有意义。

最新更新