c++ - 我应该使用哪个数据库来存储记录,我应该如何使用它?

标签 c++ python database persistence

我正在开发一个将存储大量记录的应用程序。这些记录类似于(URL、日期、标题、来源、{可选数据...})

由于这是一个客户端应用程序,我不想使用数据库服务器,我只想将信息存储到文件中。

我希望这些文件可以从各种语言(至少是 python 和 C++)读取,所以像 python 的 pickle 这样的特定语言是不可能的。

我看到了两种可能性:sqlite 和 BerkeleyDB。由于我的用例显然不是关系型的,我很想使用 BerkeleyDB,但我真的不知道我应该如何使用它来存储我的记录,因为它只存储键/值对。

我的推理正确吗?如果是这样,我应该如何使用 BDB 来存储我的记录?你能给我链接到相关信息吗?还是我缺少更好的解决方案?

最佳答案

I am seeing two possibilities: sqlite and BerkeleyDB. As my use case is clearly not relational, I am tempted to go with BerkeleyDB, however I don't really know how I should use it to store my records, as it only stores key/value pairs.

您所描述的正是关系的内容,即使您只需要一张表。 SQLite可能会使这很容易做到。

编辑:关系模型与表之间的关系没有任何关系。关系是其他集合的笛卡尔积的子集。例如,Real numbers、Real Numbers 和 Real numbers(是的,所有三个都相同)的笛卡尔积产生 3d 坐标空间,您可以使用公式定义该空间的关系,比如 x*y = z。每个可能的坐标集 (x0,y0,z0) 如果满足给定的公式则在关系中,否则不满足。

关系数据库使用此概念并具有一些附加要求。首先,也是最重要的,关系的大小必须是有限的。上面给出的乘积关系不满足那个要求,因为满足公式的三元组有无穷多个。还有许多其他考虑因素与在解决实际问题的实际计算机上实用或有用的内容有更多关系。

思考这个问题的更好方法是思考每种类型的持久性机制具体在哪些方面比另一种更好。您已经认识到,当您有许多必须支持它们之间的关系(外键约束)的独立数据集(表)时,关系解决方案是有意义的,这几乎不可能通过键值存储来强制执行。关系的另一个真正优势是它通过使用适当的索引使丰富的临时查询成为可能的方式。这是数据库层实际理解它所代表的数据的结果。

键值存储有其自身的一系列优势。其中一个更重要的是键值存储扩展的方式。 memcached 没有关系, couchdb , hadoop都使用键值存储,因为很容易跨多个服务器分布键值查找。键值存储适用的另一个领域是当键或值不透明时,例如当存储的项目被加密时,只有它的所有者才能读取。


为了说明这一点,即使您只需要一个表,关系数据库也能很好地工作,请考虑以下内容(非原创)

SELECT t1.actor1 
FROM workswith AS t1, 
     workswith AS t2, 
     workswith AS t3, 
     workswith AS t4, 
     workswith AS t5,
     workswith AS t6
WHERE t1.actor2 = t2.actor1 AND
      t2.actor2 = t3.actor1 AND
      t3.actor2 = t4.actor1 AND
      t4.actor2 = t5.actor1 AND
      t5.actor2 = t6.actor1 AND
      t6.actor2 = "Kevin Bacon";

这显然使用单个表:workswith 来计算培根数为 6 的每个 Actor

关于c++ - 我应该使用哪个数据库来存储记录,我应该如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697153/

相关文章:

c++ - 容器接口(interface)返回抽象类型迭代器

Python重载对象.__and__方法

sql - 是否可以在 sql 中使用字母数字序列生成器

php - 如何从 MD5 转换为任何其他哈希值?

c++ - WinRT __FUNCTION__ 未定义

c++ - 在 CGAL::Surface_mesh 中查找某个图元的所有邻居

c++ - 比较优化构建与 switch case 和多态性

python - "Browser Not Supported"使用BeautifulSoup进行网页抓取时出错

Python3.6要exe还是编译成其他选项?

java - JPA 查询 - 如何获得特定的结果集?