c++ - 关于我的数据存储问题的意见(数据库/自制解决方案)

标签 c++ database data-storage

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

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

要求是:

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

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

你有什么建议?

最佳答案

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

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

  • 不需要将整个文件读入内存。数据库大小可能有限;你应该check here如果限制在您的情况下会成为问题。

  • 格式为cross-platform :

    SQLite databases are portable across 32-bit and 64-bit machines and between big-endian and little-endian architectures.

  • 已经存在很长时间,在很多地方都有使用,一般认为是成熟稳定的。

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

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

  • 有一个 C++ APIa Python bindinga Fortran wrapper .

  • 没有任意精度的列类型,但是如果 NUMERIC 不能准确表示,它将被静默转换为文本:

    For conversions between TEXT and REAL storage classes, SQLite considers the conversion to be lossless and reversible if the first 15 significant decimal digits of the number are preserved. If the lossless conversion of TEXT to INTEGER or REAL is not possible then the value is stored using the TEXT storage class.

  • 数据库的紧凑存储,我不确定。但我从未听说过 SQLite 会特别浪费资源。

关于c++ - 关于我的数据存储问题的意见(数据库/自制解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4967158/

相关文章:

c++ - 使用初始化列表的优点?

c++ - 如何使用 QStringList 显示 QMap 中的所有键?

java - 在Android的应用程序启动时创建静态数据结构

Emacs 云存储选项?

cobol - COBOL如何存储和检索数据?

c++ - 使用线程递归传递数据

c++ - 为什么 fread 提前到达 EOF?

database - 在 pgadmin 中重构更多功能的最佳方法

mysql - 服务器之间的数据库传输

sql-server - 这是 "correct"数据库设计吗?