2作者: hashmak_jsn大约 18 小时前原帖
我们最近在树莓派上对AnuDB(一个基于RocksDB构建的轻量级嵌入式数据库)与SQLite进行了基准测试。尤其是在并行操作方面,性能差异非常显著。 <p>GitHub链接:</p> AnuDB基准测试:<a href="https://github.com/hash-anu/AnuDBBenchmark">https://github.com/hash-anu/AnuDBBenchmark</a> <p>AnuDB(核心):<a href="https://github.com/hash-anu/AnuDB">https://github.com/hash-anu/AnuDB</a></p> <p>为什么要比较AnuDB和SQLite?</p> SQLite在许多嵌入式用例中表现出色——它简单、经过实战检验且极其可靠。但在需要并行性或并发写入时,它的扩展性较差。 <p>AnuDB基于RocksDB构建,开箱即用地提供了更好的并发性能。我们希望通过在树莓派上进行实际基准测试来测量它们之间的实际差异。</p> <p>基准测试设置</p> 平台:树莓派2(ARMv7)<p>基准操作:插入、查询、更新、删除、并行</p> AnuDB使用RocksDB和MsgPack序列化<p>SQLite使用原始数据,并启用WAL模式以确保公平性</p> <p>关键结果</p> 插入:<p>AnuDB:448 ops/sec</p> SQLite:838 ops/sec<p>查询:<p>AnuDB:54 ops/sec</p> SQLite:30 ops/sec<p>更新:<p>AnuDB:408 ops/sec</p> SQLite:600 ops/sec<p>删除:<p>AnuDB:555 ops/sec</p> SQLite:1942 ops/sec<p>并行(10线程):<p>AnuDB:412 ops/sec</p> SQLite:1.4 ops/sec(!)</p> 在并行情况下,AnuDB的速度比SQLite快了279倍以上。 <p>为什么并行性能差异如此巨大?</p> 即使在WAL模式下,SQLite也使用全局数据库级锁。它并不是为高并发场景设计的。 <p>RocksDB(在AnuDB中使用)支持:</p> 细粒度锁定<p>并发读写<p>使用LSM树架构实现更好的并行性<p>这解释了为什么在多线程工作负载下,AnuDB的性能显著优于SQLite。 <p>自己试试</p> 克隆代码库:<p>git clone <a href="https://github.com/hash-anu/AnuDBBenchmark">https://github.com/hash-anu/AnuDBBenchmark</a></p> cd AnuDBBenchmark ./build.sh /path/to/AnuDB /path/to/sqlite ./benchmark<p>结果将保存到benchmark_results.csv中。</p> <p>何时使用AnuDB</p> 如果您需要高并发的嵌入式存储,处理遥测、传感器数据或并行工作负载,或者希望在负载下比SQLite更轻量和更快,请使用AnuDB。 <p>如果您需要SQL兼容性,重视成熟的生态系统和工具,请继续使用SQLite。</p> <p>欢迎反馈</p> 这是一个早期实验。我们正在积极开发AnuDB,并希望获得反馈:<p>我们的基准测试公平吗?<p>我们还可以在哪里进一步优化?<p>这对您的嵌入式项目有用吗?