将字符串或枚举放入 LMDB
Putting strings or enums into LMDB
我想使用 the lmdb crate 将一些数据写入我的数据库。我正在写一个枚举:
enum MyEnum {
A { astr: String, bstr: String },
B { i: u32 },
C,
}
lmdb::RwTransaction
的 put
函数定义如下:
fn put<K, D>(
&mut self,
database: Database,
key: &K,
data: &D,
flags: WriteFlags,
) -> Result<()>
where
K: AsRef<[u8]>,
D: AsRef<[u8]>,
如何将 MyEnum::A
放入数据库,因为它没有实现 AsRef<[u8]>
?
我可以将数据转换为 JSON 并将 JSON 写入数据库,但这会降低性能。
你将不得不使用一些序列化格式,因为你不能直接将内存中代表MyEnum
的位放入数据库(因为枚举和String
在 Rust 版本中可能不稳定,String
至少在内部使用指针)。
您不必专门使用 JSON。 (JSON 确实效率很低。)你可以选择 serde 支持的其他东西(这似乎是 Rust 事实上的类型导向序列化库)。
我想使用 the lmdb crate 将一些数据写入我的数据库。我正在写一个枚举:
enum MyEnum {
A { astr: String, bstr: String },
B { i: u32 },
C,
}
lmdb::RwTransaction
的 put
函数定义如下:
fn put<K, D>(
&mut self,
database: Database,
key: &K,
data: &D,
flags: WriteFlags,
) -> Result<()>
where
K: AsRef<[u8]>,
D: AsRef<[u8]>,
如何将 MyEnum::A
放入数据库,因为它没有实现 AsRef<[u8]>
?
我可以将数据转换为 JSON 并将 JSON 写入数据库,但这会降低性能。
你将不得不使用一些序列化格式,因为你不能直接将内存中代表MyEnum
的位放入数据库(因为枚举和String
在 Rust 版本中可能不稳定,String
至少在内部使用指针)。
您不必专门使用 JSON。 (JSON 确实效率很低。)你可以选择 serde 支持的其他东西(这似乎是 Rust 事实上的类型导向序列化库)。