我正在开展一个非常有利于使用.csv文件进行数据存储的项目。我发现使用.csv存在许多问题,尤其是存储关系数据。解析.csv通常是pain,特别是在使用临时列分配时。
我主张使用XML和最小数据库,例如SQLite,但我正在寻找“更快,更好,更便宜”的替代方案。
.csv文件的其他“主流”轻量级替代品是什么?
另外,CouchDB怎么样?它在轻量级方面与SQLite相比如何?
编辑:我错过了。这个问题已经被问到before。答案 0 :(得分:4)
我认为不能直接替代CSV文件。 CSV是面向索引的平面文件格式。如果用管道或其他东西替换逗号并不重要。规则略有不同也是一样。
话虽如此,当数据在我的控件中时,我经常选择SQLite。
使用SQLite始终如一地使用相同的工具,可以用作临时存储或关系模型,对“独立”RDBMS进行“升级”计划,提供“免费”DQL(其中对我来说是一个很大的优势)等等。除非空间是真正的问题或者不支持数据访问,为什么不呢? (现代Firefox也使用SQLite)。
(那里有很多对象数据库,比如DB4O - 甚至更简单的键/值分层存储等等。不试图说SQLite是获取微/嵌入式关系的唯一方法数据库)。
一方面说,XML是需要特殊工具(sqlite / adapter)。 XML虽然不是最人性化的格式,但可以在记事本中编辑得很好。此外,除了标记/数据本身之外,XML中没有额外的开销(碎片或结构),并且XML通常可以非常适合压缩。还有许多库将整个对象图映射到XML(从而维护关系),这可能是一个很好的功能。
其他格式如JSON也在那里 - 但如果格式不透明,那么它对XML没有什么影响(更多的是工具支持问题)。
所以......“这取决于”。
答案 1 :(得分:2)
这都是关于用例的。
我的经验法则:如果两个数据之间存在依赖关系或关系,请使用SQLite;如果它只是平面数据文件,请使用CSV(或其他“平面”格式)。最简单的方法通常也是最可靠的解决方案。
(注意:确保CSV格式正确。没有人喜欢破解不良的CSV实现。)
答案 2 :(得分:2)
与XML等格式相比,YAML看起来相对较小,但略胜于JSON(它是超集)。这是我要考虑的另一位候选人。
答案 3 :(得分:2)
HDF5是存储大型表格数据集的不错选择。
在Python中,Pandas + PyTables非常易于使用。 熊猫documentation中的示例:
void MainWindow::appendText(std::string const& str )
{
ui->listWidget->addItem(QString::fromStdString(str));
}
答案 4 :(得分:1)
XML旨在成为主流和相对“轻量级”。 JSON是另一种流行的选择,但更适合于对象建模而不是数据存储。
如果您需要关系查询功能,MySQL是一个不错的选择。