将C++键/值结构转换为数据库(sqlite3)
convert C++ key/value structure to database (sqlite3)
我有一个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存储自己的完整路径,也可以做到这一点:您需要一个从bucket
到bucket
的自对自多关系映射。您需要两个表,一个用于存储桶,另一个仅用于映射。在映射表中有两列,parent_bucket
和child_bucket
。在bucket
表中,有三个,bucket_id
、key
和value
。
相关文章:
- 打印从SQLite3数据库检索的数据C++与命令行中相同的方式
- Sqlite3:将数据库表名存储在向量中
- 如何使用 c++ 在 sqlite3 中打开受密码保护的数据库?
- Sqlite3 C++数据库被锁定
- 尝试打开 SQLite3 数据库时出错
- 如何使用C++在sqlite3数据库中执行写文件功能
- 可以删除SQLite3数据库文件,并且仍然可以访问
- 是否可以在 sqlite3 中READ_ONLY数据库切换到 WAL 日记模式
- 将指针存储到SQLITE3数据库中的类别抛出segfault
- 需要为SQLite3数据库创建索引(索引)
- 在Objective-C中调用sqlite3数据库时,如何调用和转换int/NSNumber
- sqlite3数据库加载到内存c++并选择perfomance
- 可视化如何使用C++在 SQLite3 数据库上实现回滚事务
- DLL使用sqlite3从不同的进程写入同一个数据库文件
- 将 SQLite3 临时数据库与 QT4 QSQLDatabase 一起使用
- 将.csv文件导入 QT GUI 上的 sqlite3 数据库表
- 无法使用sqlite3数据库表的所有行中的数据填充列表,错误:跟踪/断点陷阱(核心转储)
- Sqlite3/C++在不更改数据库大小的情况下执行DELETE语句
- 通过在Sqlite3数据库C++中获取表来创建对象
- 将C++键/值结构转换为数据库(sqlite3)