什么是以“.csv”格式存储文件的“主流”轻量级替代品?

时间:2011-04-19 19:36:12

标签: csv storage local-storage data-storage

我正在开展一个非常有利于使用.csv文件进行数据存储的项目。我发现使用.csv存在许多问题,尤其是存储关系数据。解析.csv通常是pain,特别是在使用临时列分配时。

我主张使用XML和最小数据库,例如SQLite,但我正在寻找“更快,更好,更便宜”的替代方案。

.csv文件的其他“主流”轻量级替代品是什么?

另外,CouchDB怎么样?它在轻量级方面与SQLite相比如何?

编辑:我错过了。这个问题已经被问到before

5 个答案:

答案 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是一个不错的选择。