2

我有一个实验,需要存储 1Mb/s 的数字数据以供以后处理。直接写入数据库就像写入 CSV 文件一样容易,然后我就可以轻松检索子集或范围。

我有 sqlite2 的经验(当它只有文本字段时),它似乎与原始磁盘访问一样快。对此应用程序的当前最佳进程内 DBMS 有何意见?

抱歉 - 最初应该在 Windows 上添加这是 C++,但跨平台很好。理想情况下,DB 二进制文件格式应该是跨平台的。

4

5 回答 5

3

如果您只需要读取/写入数据,而无需在数据库中进行任何检查或操作,那么两者都应该可以。Firebird 的数据库文件可以复制,只要系统具有相同的字节序(即不能在 Intel 和 PPC 处理器的系统之间复制文件,但 Intel-Intel 可以)。

但是,如果您需要对数据进行任何操作,而不仅仅是简单的读/写,那么请使用 Firebird,因为它是一个完整的 SQL 服务器,具有所有“企业”功能,如触发器、视图、存储过程、临时表、等等

顺便说一句,如果您决定尝试 Firebird,我强烈建议您使用 IBPP 库来访问它。它是围绕 Firebird 的 C API 的一个非常薄的 C++ 包装器。我有大约 10 个封装了所有内容的类,并且非常易于使用。

于 2008-09-18T22:49:15.283 回答
2

如果您想要做的只是存储数字并能够轻松地进行范围查询,您可以采用 STL 中可用的任何标准树数据结构并将其序列化到磁盘。这可能会在跨平台环境中对您不利,尤其是在您尝试跨架构时。

就更灵活/人性化的解决方案而言,sqlite3 被广泛使用,坚固,稳定,非常好。

BerkeleyDB 有许多可以使用它的好特性,但没有一个适用于这种情况,恕我直言。

如果您可以接受许可协议,我会说使用 sqlite3。

-D

于 2008-09-18T18:59:18.753 回答
0

取决于您使用的语言。如果是 C/C++、TCL 或 PHP,SQLite 在单写者场景中仍然名列前茅。如果您不需要 SQL 访问,则 berkeley DB 风格的库可能会稍微快一些,例如 Sleepycat 或 gdbm。对于多个编写者,您可以考虑单独的客户端/服务器解决方案,但听起来您并不需要它。如果您使用 Java,hdqldb 或 derby(Sun 的 JVM 附带“JavaDB”品牌)似乎是首选的解决方案。

于 2008-09-18T18:14:57.063 回答
0

我怀疑这两个数据库都不允许您以如此高的速度写入数据。您可以自己检查以确定。以我的经验 - 对于具有单个整数主键的非常简单的表,SQLite 无法每秒插入超过 1000 行。

如果出现性能问题 - 我会使用 CSV 格式来编写文件,然后我会将它们的数据加载到数据库(SQLite 或 Firebird)以进行进一步处理。

于 2009-07-29T13:02:18.460 回答
0

您可能还需要考虑专门用于存储这些类型的大型数据集的数字数据文件格式。例如:

  • HDF——在许多语言中最常见且支持良好的免费库。我强烈推荐这个。
  • CDF ——NASA 使用的类似格式(但任何人都可以使用)。
  • NetCDF——另一种类似的格式(最新版本实际上是精简的 HDF5)。

此链接包含有关上述数据集类型之间差异的一些信息:http: //nssdc.gsfc.nasa.gov/cdf/html/FAQ.html

于 2011-06-08T18:14:18.350 回答