【发布时间】:2009-06-23 15:28:59
【问题描述】:
我有一个相当大的数据集,并希望将其存储在文件而不是 RDBMS 中。
数据集中的主表是刚刚超过 1M 行、30 列和大约 600Mb 大小的 CSV。
我正在考虑使用 SQLite。对于这种规模的数据集,SQLite 值得研究吗?
【问题讨论】:
标签: sqlite
我有一个相当大的数据集,并希望将其存储在文件而不是 RDBMS 中。
数据集中的主表是刚刚超过 1M 行、30 列和大约 600Mb 大小的 CSV。
我正在考虑使用 SQLite。对于这种规模的数据集,SQLite 值得研究吗?
【问题讨论】:
标签: sqlite
SQLite 可以很好地处理该文件;确保在事务中导入记录,以便在导入所有内容之前不会花费大量时间创建索引。
【讨论】:
您已经有了答案,但我想分享一下我目前的实验:我已将价值 793 GiB 数据的数十亿条记录转储到单个 SQLite 数据库中,并且读取查询仍然非常快(不到 1m)。
创建时间仅用了 22 小时多一点,而后索引创建每列大约需要 4 小时。
【讨论】:
我最近调查了 SQLite 以寻找类似的应用程序。 SQLite 文档指出 SQLite 数据库的大小可以达到 TB,并且 SQLite 的主要限制是并发性(同时有许多用户)。虽然我们没有朝这个方向发展(我们有自己的二进制存储格式),但我非常有信心 SQLite 可以处理这种大小的文件。
【讨论】:
当您使用事务并且不经常提交时,sqlite 速度很快。使用带参数的准备好的语句也可以加快速度。使用参数化查询时,Sqlite 不必重新解析每个 sql 语句。一个例子:How do I get around the "'" problem in sqlite and c#?
我在一个 sqlite 数据库中存储了 2 GB,它工作得很好。 sqlite 在平面文件之上的一大优势是可以索引您的数据。
【讨论】:
sqlite 应该适合你。即使在嵌入式设备中,我也运行过这样大小的数据集,并且 sqlite 性能相当合理。
如上所述,主要瓶颈是并发性。旨在设计您的系统,以便每个数据库文件最多打开一个数据库句柄。
【讨论】: