c++ - 有哪些具有快速附加和随机访问功能的可移植数据后端?

标签 c++ database qt storage

我正在开发一个 Qt GUI,用于可视化通过 TCP/IP 连接接收的“实时”数据。问题是数据到达的速度相当快(每秒几十 MB)——它的速度比我想象的要快,即使我没有做任何花哨的可视化——我只是在 QTableView 中显示数据对象。

似乎这还不够,GUI 还允许按下“卡住”按钮,这将暂停更新 GUI(但它会继续在后台接收数据)。一旦卡住选项被禁用,已经在后台累积的数据应该被可视化。

我想知道的是:由于数据输入如此之快,我不可能将所有数据都保存在内存中。客户甚至可能让 GUI 运行一整夜,因此将累积千兆字节的数据。将此数据写入磁盘的良好数据存储系统是什么?它应该具有以下属性:

  • 在桌面系统上使用它应该不会有太多工作
  • 在末尾附加新数据应该很快。我再也不需要触及以前写入的数据,因此不需要写入除末尾以外的任何地方。
  • 应该可以随机访问数据中的记录。这是因为在我的 GUI 中滚动需要快速显示数据流中的 N 到 N+20(或我的表格的高度)条目。

传入的数据可以分成记录,但遗憾的是记录没有固定大小。我宁愿不对它们施加最大尺寸(至少如果不这样做也可以获得良好的性能,则不会)。

也许是一些 SQL 数据库,或者类似 CouchDB 的东西?如果有人可以分享他在这种情况下的经验,那就太好了。

最佳答案

我认为 sqlite可能会成功。好像很快。不幸的是,我没有像你这样的数据流,但它作为日志记录器的后端工作得很好。我有一个 GUI,您可以在其中查看 n、n+k 日志。

你也可以试试SOCI作为 C++ 数据库访问 API,它似乎可以与 sqlite 一起正常工作(我暂时没有使用它,但计划使用)。

我的2c

关于c++ - 有哪些具有快速附加和随机访问功能的可移植数据后端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211691/

相关文章:

c++ - 在 Qtcp readyRead() 中读取可变长度消息

c++ - 迭代器和引用计数字符串

c - 开发数据库服务器 : How to send results to a client?

database - 断言 django pytest 期间没有数据库更新尝试

MYSQL查找第二行给定值的所有行

c++ - 在 Ubuntu 14.04 LTS 上安装 Qt Creator 3.1.2

c++ - 在 Mac 上无法将 Pylon(Basler) SDK 与 Qt 链接

c++ - arm 裸机系统上的 CPU 使用率测量

c++ - Win32 C API : Alternative to broken execl*() family of functions?

c++ - 使用 Qt GUI 打包线程程序