【Rust日报】2025-09-03 文章《SurrealDB 为提升基准测试表现而牺牲数据持久性》

💡 原文中文,约1500字,阅读约需4分钟。
📝

内容提要

SurrealDB 在使用 RocksDB 或 SurrealKV 时,为了提高基准测试性能,牺牲了数据持久性。用户需设置环境变量 SURREAL_SYNC_DATA=true,以防止崩溃时数据损坏。建议更改默认设置或在文档中提醒用户。

🎯

关键要点

  • SurrealDB 在使用 RocksDB 或 SurrealKV 时,默认牺牲数据持久性以提升基准测试表现。
  • 用户需设置环境变量 SURREAL_SYNC_DATA=true,以防止崩溃时数据损坏。
  • SurrealDB 的代码分析显示,数据写入时未默认启用 fsync 或 fdatasync,导致数据可能仅存储在操作系统缓存中。
  • 虽然这种默认设置提高了写入性能,但牺牲了数据安全性。
  • 建议 SurrealDB 团队更改默认设置或在文档中明确警告用户。
  • 用户在使用 SurrealDB 时务必设置 SURREAL_SYNC_DATA 以确保数据持久性。
  • 文章还探讨了 Rust 中将整数转换为枚举类型的几种方法及其性能。
  • 使用 #[derive] 方法在稳定版 Rust 中不能用于 const fn,且需返回 Result 类型。
  • std::mem::transmute 方法生成的汇编代码简单但存在安全风险。
  • match 方法安全但生成的汇编代码包含额外分支,可通过位掩码优化。
  • 性能测试显示,直接使用 match 方法在多数情况下表现最好。
  • Dysk 是一个文件系统列表工具,能够以更直观的方式展示磁盘信息,支持多种过滤和定制选项。

延伸问答

SurrealDB 在基准测试中是如何牺牲数据持久性的?

SurrealDB 在使用 RocksDB 或 SurrealKV 时,默认情况下牺牲数据持久性以提升基准测试表现,未启用 fsync 或 fdatasync,导致数据可能仅存储在操作系统缓存中。

用户如何确保 SurrealDB 的数据持久性?

用户需设置环境变量 SURREAL_SYNC_DATA=true,以防止崩溃时数据损坏。

SurrealDB 的默认设置对数据安全性有什么影响?

默认设置提高了写入性能,但牺牲了数据安全性,可能导致数据在崩溃时丢失。

SurrealDB 团队对当前设置有什么建议?

建议 SurrealDB 团队更改默认设置或在文档中明确警告用户,以提高数据安全性。

Rust 中将整数转换为枚举类型有哪些方法?

主要有 #[derive]、std::mem::transmute 和 match 方法,分别有不同的性能和安全性特点。

在 Rust 中,哪种方法转换整数为枚举的性能最好?

性能测试显示,直接使用 match 方法在多数情况下表现最好。

➡️

继续阅读