【发布时间】: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