【问题标题】:In this case would it be better to store data in a database such as SQLite, or in a flat text file?在这种情况下,将数据存储在 SQLite 等数据库中还是在纯文本文件中会更好吗?
【发布时间】:2018-04-20 20:22:05
【问题描述】:

我正在构建一个使用静态数据的小型 C++ 项目(它不会在用户端更改,仅在需要更改时更新)。数据本身将包含五种不同类别的items,并带有不同的字段。这些项目的一个例子是:

item1 {a=3, b=2, d=4}
item2 {c=4, d=2, m=3}
...

每个项目都可以包含任意数量的字段(本示例中为 a-z)以及关联的值。每个类别都有一个项目列表(想想五个不同的文件,其中包含上面的文本行)。

该程序的目标是从这些类别中的每一个中找到一项,其中它们包含的不同字段将求和以满足所需的输入(即 sum(d) == 10, sum(x) == 20 )。由此产生的五个项目将至少满足这些要求。我的目标是通过找到五个不同类别的笛卡尔积来实现这一点(在通过仅从输入中找到包含至少一个字段的项目来缩小范围之后),然后循环遍历结果以找到五个项目的集合这是正确的。

现在我的问题是:我很好奇是将数据存储在文本文件中(并在每次启动时加载)还是使用 SQLite 更好。至少对我来说,使用文本文件肯定会更好地实现。但我确信每次启动程序时加载所有内容并将其存储到适当的数据对象中不会那么有效。

使用 SQLite,我可以立即使用所有东西,并且可以直接使用查询执行大部分任务。我对如何在找到笛卡尔积之前缩小表格范围,然后进一步循环结果以寻找答案有点不确定。不过,我相信我可以通过时间和研究来解决这个问题。

那么,StackOverflow 的专家们,您对此有何看法?如果不是因为我计划对数据进行的特定操作,我会选择 SQLite。但是有了这个,我有点不确定,并希望确保长期保持这种简单性。

【问题讨论】:

  • 我倾向于使用具有标准序列化格式的文本文件,例如 XML 或 JSON。如果您需要并发读取和写入,请使用数据库,而您似乎不需要。
  • 如果数据量合理(可以毫无风险地放入您的内存中),我会选择文本和 JSON(正如 Batsheba 建议的那样),现在您有大量预定义的数据结构和集合来操作数据。
  • 也许是 NoSQL 解决方案?你的数据模型让我想到了 MongoDB ...

标签: c++ database sqlite text-files cartesian-product


【解决方案1】:

这部分取决于您计划存储多少记录 - 在一定大小时,RDBMS 的好处开始显示出超过让巨大的平面文件阻塞您的 RAM。

您所说的规则对于查询来说非常简单,并且您将受益于 RDBMS 带来的可靠性、数据完整性检查和其他优势。如果是我,我会整天使用 SQLite。

【讨论】:

  • 这肯定会让我更难做出决定。不过,我真的不认为每个类别有超过 500 个条目。这算不算小?
【解决方案2】:

使用 SQLite 将使数据库具有可扩展性,基于查询,如果需要实施任何新操作,特别是执行操作会更快。 基于分隔符的文件系统管理将更容易实现,因为它不需要了解查询语言。 SQLite 是其他人的代码,而 FMS 是“您的”代码,因此所面临的任何错误或问题都很容易诊断和修复。

PS:我目前正在开发 EMV 支付系统 (SDK) 并且必须维护交易记录,我最初为此使用 SQLite3,但后来将我的实现转移到 FMS,因为 db 存在间歇性问题,它是很难调试它们,最常见的是 SQLite3 中的错误代码 21 可用的帮助最少,其次很难找到内存泄漏,这是新手很容易创建的。 简而言之,如果您的数据库不是很大,易于管理并且您可以设计基于分隔符的结构,我建议您使用 FMS,但要确保将其设置为“结构良好”。

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2011-08-12
    • 2011-12-03
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多