database - 文件系统和数据库之间的写入性能

标签 database performance file-io

我有一个非常简单的数据采集程序。数据频繁出现(大约 5200 Hz)。一份数据大约有 24 kB,所以它大约是 122 MB/s。

什么仅用于存储这些数据会更有效?将其保存在原始二进制文件中,还是使用数据库?如果是数据库,那么是哪个? SQLite,或者其他的?

当然,数据库更诱人,因为在将其保存到文件时,我必须用分隔符将它们分开(数据可以有不同的大小),而且使用数据库处理数据会容易得多。不过,与文件相比,我不确定数据库的性能,我找不到任何关于它的具体信息。

[编辑] 我正在使用基于 Linux 的操作系统和支持写入高达 350 MB/s 的 SSD 磁盘。数据将一直以该频率获取(每天有一个小的服务中断将数据传输到另一台机器)

最佳答案

如果您要查找特定文件,文件系统 很有用,因为操作系统维护着一种索引。但是,txt 文件的内容不会被索引,这是数据库的主要优势之一。

另一点是了解关系模型,这意味着您如何设计数据库,这样数据就不需要一遍又一遍地重复。

此外,理解类型也很重要。如果你有一个 txt 文件,你将需要解析数字、日期等。

从性能的角度来看,我会说 DB 启动速度较慢(打开文件通常比打开与​​数据库的连接更快)。但是,一旦它们打开,我可以保证 DB 比 XML 或您想要使用的任何文件都快。顺便说一句,这是数据库的主要用途:管理大量数据,文件系统用于存储文件

DB 的最后一点是,它们通常可以处理多线程和并发 问题,而文件不能处理这些问题,但同样重要的是 在数据库中,您不能错误地删除文件 并丢失你的数据

所以我的选择是数据库,无论如何我希望为您提供一些信息,您可以决定什么是最适合您的

-- 更新--

由于您的需求现在更加具体,所以我尝试更深入地挖掘:我发现了一些您可能感兴趣的解决方案,但是我没有任何经验可以向您提供有关它们的个人建议:

  • SharedHashFile :SharedHashFile 是一个轻量级的 NoSQL 键值存储/哈希表,一个零拷贝 IPC 队列,以及一个用 C 语言为 Linux 编写的多路复用 IPC 日志库。没有服务器进程。数据直接从共享内存或SSD读取/写入; SharedHashFile 和应用程序之间没有使用套接字。 C、C++ 和 nodejs 的 API。但是请注意问题,因为这个项目似乎不再在 Github 上维护
  • WhiteDB另一个NoSql数据库,号称真的很快,去他们网站的速度部分查阅
  • Symas一个非常快速、内存高效的数据库

看看它们,如果您曾经使用过它们,请在这里为社区提供反馈

关于database - 文件系统和数据库之间的写入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883103/

相关文章:

java - 为什么这个查询不起作用?

mysql - 数据关系模式

database - READ_UNCOMMITTED 与无事务?

c# - 在 C# 中比较两个有序列表

css - CSS 的速度

c# - 为什么 Entity Framework 在 SELECT 上生成 JOIN

c - 从两个子进程写入同一个文件

java - 如何在JSP中保存XML文件?

java - 如何以 Java 方式直接从设备读取/写入文件(如 O_DIRECT 标志的效果)?

objective-c - 如何构建一个在离线输入数据时同步的应用程序?