2ms是Raspberry Pi 3上对LMDB的小写入的实际性能目标吗?

时间:2017-08-07 17:35:48

标签: database performance rust raspberry-pi3 lmdb

我即将开始研究Raspberry Pi 3上的新项目。它将通过复杂的GUI进行控制,因此交互式性能非常重要。

我决定将LMDB用于持久性,因为 - 外部性能 - 它的特殊特性使我的系统更加简单,对我来说没有任何缺点。 该应用程序将使用lmdb包装箱以Rust编写。

关键路径将是一个单线程部分,我将获得当前时间戳并在我已经拥有的密钥下向数据库写入总共16或20个字节(尚不确定,16个字节真的更好吗?)计算。 为此(从提交写入事务开始,以时间戳开始并结束),我的性能预算为2毫秒。

据我所知,写入是LMDB的最差标准,而且这些是非常小的随机写入,所以这可能是最糟糕的应用程序。这个想法让我问这个问题。

更多信息: 因为这是一个GUI应用程序,这条路径每秒最多被调用100次,每小时也不会超过1000次(这是从头开始重写的,这是当前系统中测量数字的10倍)。 / p>

我不太了解LMDB如何工作,但AFAIU正在使用内存映射文件。我希望这意味着操作系统内部将回写聚合的页面。

2ms是否是这种应用的现实目标?我需要考虑什么才能让自己进入这个窗口?我需要手动缓存这些写入吗?

1 个答案:

答案 0 :(得分:0)

这取决于您在LMDB中拥有多少数据。

小型数据库绝对可以实现2ms。我有每秒超过100K写入SSD和小数据库大小(<1GB)。但是如果DB大于你的内存,如果你担心写性能,你可能不应该使用LMDB。

总而言之,如果你的数据库小于内存,你可以继续使用LMDB,2ms绝对足以进行写操作。如果您的数据库大于内存,那么最好使用基于LSM的kv-store,如LevelDB或RocksDB。