我有一个实验流式传输1Mb / s的数字数据,需要将其存储起来供以后处理。 直接写入数据库和CSV文件似乎很容易,然后我就可以轻松检索子集或范围。
我有sqlite2的经验(当它只有文本字段时),它看起来和原始磁盘访问一样快。 关于此应用程序中当前最佳进程内DBMS的任何意见?
抱歉 - 应该在Windows上添加这是C ++,但跨平台很不错。理想情况下,数据库二进制文件格式应该是跨平台的。
答案 0 :(得分:3)
如果您只需要读取/写入数据,而无需在数据库中进行任何检查或操作,那么两者都应该做得很好。可以复制Firebird的数据库文件,只要系统具有相同的字节顺序(即,您无法在具有Intel和PPC处理器的系统之间复制文件,但Intel-Intel就可以了。)
但是,如果您需要对数据进行任何操作,这不仅仅是简单的读/写,那么请使用Firebird,因为它是一个完整的SQL服务器,具有触发器,视图,存储过程等所有“企业”功能,临时表等。
顺便说一句,如果您决定尝试使用Firebird,我强烈建议您使用IBPP库来访问它。它是围绕Firebird的C API的非常薄的C ++包装器。我有大约10个类,它们封装了所有内容,并且它很容易使用。答案 1 :(得分:2)
如果您只想存储数字并且能够轻松查看范围查询,则可以采用STL中可用的任何标准树数据结构并将其序列化为磁盘。这可能会让您陷入跨平台环境,特别是如果您尝试跨架构的话。
对于更灵活/人性化的解决方案,sqlite3被广泛使用,稳固,稳定,非常好用。
BerkeleyDB有很多很好的功能供人们使用,但在这种情况下都不适用,imho。
如果你能接受许可协议,我会说使用sqlite3。
-D
答案 2 :(得分:0)
取决于您使用的语言。如果它是C / C ++,TCL或PHP,SQLite仍然是单作者场景中最好的。如果您不需要SQL访问,那么berkeley DB风格的库可能会稍微快一些,比如Sleepycat或gdbm。使用多个编写器,您可以考虑单独的客户端/服务器解决方案,但听起来并不像您需要它。如果你正在使用Java,hdqldb或derby(在“JavaDB”品牌下随Sun的JVM一起提供)似乎是首选的解决方案。
答案 3 :(得分:0)
我怀疑这两个数据库都不允许你以如此高的速度写入数据。您可以自己检查以确定。根据我的经验 - 对于一个带有单个整数主键的非常简单的表,SQLite无法每秒插入超过1000行。
如果出现性能问题 - 我会使用CSV格式编写文件,稍后我会将数据加载到数据库(SQLite或Firebird)进行进一步处理。
答案 4 :(得分:0)
您可能还需要考虑专门用于存储这些类型的大型数据集的数字数据文件格式。例如:
此链接包含有关上述数据集类型之间差异的一些信息: http://nssdc.gsfc.nasa.gov/cdf/html/FAQ.html