将C++键/值结构转换为数据库(sqlite3)

convert C++ key/value structure to database (sqlite3)

本文关键字:数据库 sqlite3 转换 结构 C++      更新时间:2023-10-16

我有一个C++键/值表,如下所示:

class kvBucket {
   ...
   map<string, kvBucket*> buckets;
   map<string, string> keyPairs;
   ...
}
class kvTree {
   ...
   kvBucket base;
   ...
}

我想将其从内存中的结构转换为在数据库中实现的结构(sqlite3)。由于bucket是嵌套的,我不知道如何表示模式。以下是示例数据:

bucket | key | value
------   ---   -----
   a      v      1
  a/b     w      2
  a/b     x      3
 a/b/c    y      4
   d      z      5

在C++结构中,我有一些成员函数可以做一些事情,比如检索另一个bucket下的bucket列表,或者检索bucket路径下的键/值对列表,等等。我需要对数据库做同样的事情。有没有一种有效的方法来设计模式来做到这一点?

没有有效的方法来表示关系存储中的层次关系。键值存储(你可能听说过,它们现在很流行)在这方面做得更好,但通常不提供SQL层。如果你想移动存储桶,那么在某个路径下获取所有存储桶将需要不止一个查询(如果你不想移动这些存储桶,你可以使用现有的方案,在存储桶名称上搜索"a/*"之类的子字符串)。

也就是说,即使不让每个bucket存储自己的完整路径,也可以做到这一点:您需要一个从bucketbucket的自对自多关系映射。您需要两个表,一个用于存储桶,另一个仅用于映射。在映射表中有两列,parent_bucketchild_bucket。在bucket表中,有三个,bucket_idkeyvalue