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

aks*_*ngh 3 key-value-store leveldb

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

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

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

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

Kir*_*ril 8

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

0x0001 is for table 1
0x0002 is for table 2
0x0003 is for table 3
and so on...
Run Code Online (Sandbox Code Playgroud)

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