SQLite / Firebird嵌入式用于数字数据

时间:2020-03-06 14:22:41  来源:igfitidea点击:

我有一个实验,流式传输1Mb / s的数字数据,需要将其存储以供以后处理。
直接写入数据库和CSV文件一样容易,然后我便可以轻松地检索子集或者范围。

我有sqlite2的经验(当它只有文本字段时),它的访问速度几乎与原始磁盘访问一样快。
对于此应用程序当前最佳的进程中DBMS有什么意见?

抱歉,应该最初在Windows上添加了C ++,但是跨平台很好。理想情况下,DB二进制文件格式应跨平台。

解决方案

取决于我们使用的语言。如果是C / C ++,TCL或者PHP,SQLite仍然是单编写器方案中最好的。如果不需要SQL访问,则Berkeley DB风格的库可能会稍快一些,例如Sleepycat或者gdbm。如果有多位作者,我们可以考虑使用单独的客户端/服务器解决方案,但这听起来并不像我们所需要的那样。如果我们使用的是Java,hdqldb或者derby(以" JavaDB"商标在Sun的JVM中附带)似乎是首选的解决方案。

如果我们只想存储数字并能够轻松地进行范围查询,则可以采用STL中可用的任何标准树数据结构并将其序列化到磁盘。这可能会在跨平台环境中给我们带来痛苦,尤其是在我们尝试跨架构的情况下。

就更灵活/更友好的解决方案而言,sqlite3被广泛使用,坚固,稳定,非常好。

BerkeleyDB具有许多可以使用的出色功能,但是在这种情况下,imho都不适用。

我想说,如果我们可以接受许可协议,请使用sqlite3.

-D

如果我们只需要读/写数据,而无需在数据库中进行任何检查或者操作,则两者都可以。只要系统具有相同的耐久性,就可以复制Firebird的数据库文件(即,我们不能在具有Intel和PPC处理器的系统之间复制文件,但是Intel-Intel可以)。

但是,如果我们需要对数据做任何事情,而不仅仅是简单的读/写操作,那么可以使用Firebird,因为它是具有所有"企业"功能(如触发器,视图,存储过程,临时表,等等。

顺便说一句,如果我们决定尝试使用Firebird,我强烈建议我们使用IBPP库进行访问。它是Firebird的C API的非常薄的C ++包装器。我大约有10个类可以封装所有内容,并且非常易于使用。

我怀疑这两个数据库都不允许我们以如此高的速度写入数据。我们可以自己检查以确保。以我的经验,对于一个具有单个整数主键的非常简单的表,SQLite每秒无法插入超过1000行。

如果出现性能问题,我将使用CSV格式写入文件,然后再将其数据加载到数据库(SQLite或者Firebird)中以进行进一步处理。