0

我有非常简单的结构化数据,目前以自制文件格式存储,但我想知道我们是否应该迁移到更现代的东西。数据只是一个 s 的表,由一列double索引。double我需要执行的事情是:

  • 遍历表。
  • 插入和删除任意记录。
  • 在给定键值之前和之后选择给定数量的行(其中键可能不在数据库中)。

要求是:

  • 存储必须是基于文件的,没有服务器。
  • 不必将整个文件读入内存。
  • 生成的文件应该可以在不同的体系结构之间移植(wrt endian-ness ...)
  • 必须是一个非常稳定的项目(数据非常关键)。
  • 必须在 Solaris/SPARC 上运行,最好还可以在 Linux/x64 上运行。
  • 访问时间应尽可能快。
  • 必须作为 C++ 库提供。Fortran 和 Python 绑定的奖励积分 :)
  • 可选的比双精度精度更高的数字表示将是一个奖励。
  • 相对紧凑的存储空间也将是一个好处。

根据我有限的经验,sqlite将是一个有趣的选择,或者如果 sqlite 不够快,则可能是非服务器模式下的mysql 。但也许一个成熟的 SQL 数据库是矫枉过正的?

你有什么建议?

4

1 回答 1

1

SQLite 几乎可以满足您的所有要求,而且使用起来并不难。试试看!

  • 它是基于文件的,整个数据库是一个文件。

  • 它不需要将整个文件读入内存。数据库大小可能会受到限制;如果限制在您的情况下会成为问题,您应该在此处检查。

  • 格式是跨平台的

    SQLite 数据库可跨 32 位和 64 位机器以及在大端和小端架构之间移植。

  • 它已经存在了很长时间,并且在很多地方都有使用,并且通常被认为是成熟和稳定的。

  • 它非常便携,可以在 Solaris/SPARC 和 Linux/x64 上运行。

  • 比 MySQL(尽管在该链接后面存在盐粒)或其他此类数据库服务器更快,因为只需要考虑一个客户端。

  • 有一个C++ API一个 Python 绑定一个 Fortran 包装器

  • 没有任意精度的列类型,但NUMERIC如果不能精确表示,则会默默地将其转换为文本:

    对于 TEXT 和 REAL 存储类之间的转换,如果保留数字的前 15 位有效十进制数字,则 SQLite 认为转换是无损和可逆的。如果无法将 TEXT 无损转换为 INTEGER 或 REAL,则使用 TEXT 存储类存储该值。

  • 数据库的紧凑存储,我不确定。但我从未听说过任何声称 SQLite 会特别浪费的说法。

于 2011-02-11T09:26:35.400 回答