如何在单个levelDB实例中创建多个逻辑表?

时间:2012-09-15 00:52:12

标签: key-value-store leveldb

我正在开发一个分布式键值系统(或数据存储),它在后端使用levelDB作为其嵌入式数据库库。

我希望一个节点/机器托管多个表(用于复制和负载平衡)。我理解levelDB没有表的概念,所以我无法以表的形式对数据进行逻辑分区(因此不能将这些表用作我的基本分发单元)。

我的问题是:是否提供多个逻辑表格'在levelDB的单个实例中?

据我所知,我可以在我的节点上运行多个levelDB实例,每个实例处理一个表。但我不想那样做,因为在这种情况下,当同时访问这些多个数据库实例时,会有严重的争用(我相信在磁盘上)。虽然在单个DB实例中具有多个逻辑表可以为我提供levelDB优化的优势,以最大限度地减少磁盘访问。

1 个答案:

答案 0 :(得分:6)

如果要在LevelDB中拥有多个“逻辑表”,则必须对密钥空间进行分区或为密钥添加前缀。为每个表创建一个不同的前缀,例如:

0x0001 is for table 1
0x0002 is for table 2
0x0003 is for table 3
and so on...

因此,密钥将包含表前缀和密钥本身:[0x0001,0xFF11]将解决表1中的密钥0xFF11。然后,您可以使用单个LevelDB实例并具有多个“密钥空间”,这对应于“表”。