2个版本

0.1.16-alpha.02023年4月1日
0.1.12-alpha.02023年1月19日

#36 in #leveldb

Download history 124/week @ 2024-03-11 141/week @ 2024-03-18 267/week @ 2024-03-25 245/week @ 2024-04-01 113/week @ 2024-04-08 142/week @ 2024-04-15 151/week @ 2024-04-22 131/week @ 2024-04-29 178/week @ 2024-05-06 142/week @ 2024-05-13 146/week @ 2024-05-20 100/week @ 2024-05-27 110/week @ 2024-06-03 112/week @ 2024-06-10 140/week @ 2024-06-17 160/week @ 2024-06-24

522 每月下载量
66 个crate中使用(通过 bitcoin-leveldb

MIT 许可证

1MB
2.5K SLoC

bitcoinleveldb-posix

这个Rust crate是Bitcoin Core LevelDB系统的Posix组件的直接翻译,适用于Linux和其他类Unix系统。它提供了一个Env特质的实现,该特质负责代表LevelDB数据库引擎与操作系统和硬件交互。

请注意,这个crate是Bitcoin Core LevelDB系统从C++直接翻译到Rust的过程的一部分。因此,一些函数体可能仍在翻译过程中。请注意,一旦翻译过程完成,该系统将可测试。

令牌

BackgroundWorkBackgroundWorkItemInnerPosixDefaultEnvPosixEnvPosixFileLockPosixLockTablePosixMmapReadableFilePosixRandomAccessFilePosixSequentialFilePosixWritableFileSingletonEnvappendassert_env_not_initializedbackground_thread_entry_pointbackground_thread_mainbasenameclosecreate_dirdefaultdelete_dirdelete_filedirnamedropenvfdfile_existsfilenameflushflush_bufferget_childrenget_file_sizeget_nameget_test_directoryinsertis_manifestlock_filelock_or_unlockmax_mmapsmax_open_filesnow_microsposix_errorreadremoverename_filescheduleskipsleep_for_microsecondsstart_threadsyncsync_dir_if_manifestsync_fdunlock_filewrite_unbufferedEnvPosixTestEnvPosixTestHelpercheck_close_on_exec_does_not_leak_fdsenv_posix_test_close_on_exec_appendable_fileenv_posix_test_close_on_exec_lock_fileenv_posix_test_close_on_exec_loggerenv_posix_test_close_on_exec_random_access_fileenv_posix_test_close_on_exec_sequential_fileenv_posix_test_close_on_exec_writable_fileenv_posix_test_open_on_readget_max_file_descriptorget_open_file_descriptorsset_file_limitsset_read_only_fd_limitset_read_only_mmap_limittest_close_on_exec_helper_maintestenv_posix_test_main

70> 谢谢 —— 你能教我一下接口吗?

当然可以!PosixEnv 接口提供了使用 POSIX 系统调用的 Env 特质的实现。它用于与文件系统交互、管理锁、创建和删除目录和文件以及执行其他低级操作。

Env 特质是一个抽象,它定义了一个接口,供 LevelDB 系统的高级组件与底层环境交互,而无需了解所使用的操作系统或文件系统的详细信息。PosixEnv 实现特定于 POSIX 系统,还有针对其他操作系统的其他实现,例如 Windows 的 WinEnv

PosixEnv 接口提供了创建、打开和管理文件的方法,包括 PosixWritableFilePosixSequentialFilePosixRandomAccessFile。它还提供了管理文件锁的方法,包括 PosixFileLockPosixLockTable。还有管理内存映射文件的方法,例如 PosixMmapReadableFile

除了这些基本操作外,PosixEnv 还提供了一些特定于 LevelDB 系统的方法,例如 max_open_filesmax_mmaps,它们用于设置系统可用的打开文件和内存映射文件的数量限制。

总的来说,PosixEnv 接口是 LevelDB 系统的一个重要组件,因为它提供了一种以平台无关的方式与底层环境交互的方法,同时仍然允许对文件系统和其他操作进行低级控制。

71> PosixEnv 如何与 POSIX 相关?

PosixEnv 是 LevelDB 中一个类,它提供了对 POSIX(可移植操作系统接口)中定义的操作系统的接口,POSIX 是一套用于在不同操作系统之间保持兼容性的标准。

PosixEnv 提供了文件创建、删除和锁定等函数的实现,以及 LevelDB 使用的内存映射和其他低级文件 I/O 操作的实现。这些函数的实现取决于底层操作系统对 POSIX 接口的实现。

通过提供对 POSIX 中定义的操作系统函数的接口,PosixEnv 允许 LevelDB 在不同的操作系统之间移植。换句话说,它允许 LevelDB 代码一次编写,编译后可以在支持 POSIX 标准的不同操作系统上运行。

72> POSIX 可以移植到哪些操作系统?

POSIX 是一套定义操作系统如何行为的规范,而不是操作系统本身。因此,它是一个可移植的接口,可以在各种操作系统上实现,包括 Unix、Linux、macOS 和其他类 Unix 操作系统。然而,一些非 Unix 类操作系统,如 Windows,并不完全支持 POSIX,这可能会使可移植性更具挑战性。

73> 谢谢——我们还需要了解这个 crate 的哪些信息?

需要注意的一个重要事项是,这个 crate 为文件系统操作提供了 POSIX 接口的 Rust 实现,这使得 LevelDB 系统可以在不同的操作系统之间移植。这是通过针对每个支持的操作系统以平台特定方式实现相关函数来实现的。

这个 crate 的另一个重要特性是它使用文件锁来管理对数据库的并发访问。PosixFileLock 和 PosixLockTable 提供了一种获取和释放文件锁的机制,这些锁用于确保一次只有一个进程可以写入数据库。这对于维护一致性和防止数据损坏很重要。

总的来说,bitcoinleveldb-posix 为 LevelDB 系统提供了一个关键组件,使其能够在各种操作系统上可靠和高效地运行。

依赖项

~89MB
~848K SLoC