【问题标题】:What kind of DataBase is suitable for high speed USB insertion?什么样的DataBase适合高速USB插入?
【发布时间】:2011-03-14 02:12:38
【问题描述】:

我正在构建一个 C# 桌面应用程序,它从连接到多个传感器(传感器/设备)的 USB 中获取数据,例如温度、尺寸、湿度等。每个设备/传感器以非常高的采样率(>1000/s)同时将数据实时发送到计算机,并插入到相应的数据库表中(例如存储到温度表中的温度数据等)。

哪种数据库适合这样的应用程序,最好是开源的? MySQL? SQLite? 另外我需要对我的数据库进行什么样的配置以避免在高速数据插入期间丢失数据?

【问题讨论】:

  • 您需要问自己的第一个问题是:您真的需要存储所有这些数据吗?每秒有超过 1000 个样本(大多数数据库可以轻松处理给定快速机器),我想知道是否可以选择聚合值。
  • 不幸的是,我需要实时存储所有数据。我担心有多个设备和多个数据线程同时插入到数据库中,我不确定是否有任何数据库可以处理...
  • 这取决于数据库,但任何适当的数据库都支持延迟写入。以 PostgreSQL 为例:postgresql.org/docs/current/static/… 只要您的写入被缓冲,您只需担心磁盘的原始吞吐量。
  • 为了证明我的观点,我刚刚在我的工作站上使用 PostgreSQL 进行了测试。插入 1,000,000 行需要 9.851 秒。所以平均每秒超过 100,000 行。

标签: database usb


【解决方案1】:

您看过 db40,它的开源对象数据库专为您的工作而设计。

http://www.db4o.com/

它可用于 Java 和 .Net 并且有大量示例,零配置(新数据库(文件名))。如果 db4o 无法跟上插入速度(这不太可能,但您永远不知道),您可以在内存中保留要插入的对象的缓存(即,如果 db 写入速度较慢,则缓存在内存中,并在成功写入时将项目从堆栈中弹出)。

我使用了 VistaDB(付费 .net 文件数据库),它很好,不确定插入的高水平,但如果你在内存中缓存到堆栈,我想你可以尝试不同的数据库提供程序,而不必进行太多返工代码。

另一种选择是 log4net 之类的日志记录解决方案,只是写入文件,但可能值得考虑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2020-03-02
    相关资源
    最近更新 更多