问题描述:
在我的应用程序中,我必须以某种格式呈现数据包的内容。一个例子:

示例
任何打包的二进制数据,例如:4字节头,4字节类型(类型代码具有预定义含义),然后是源地址,目的地址等。

以前,我制作了将数据存储在二进制文件中的自制实现(固定记录长度允许快速查找),但随着时间的推移,我意识到我正在发明某种数据库。例如,我正在为非常大的数据文件实现我自己的高效二进制存储格式。我也在实现我自己的索引以在某些字段上快速运行搜索。我认为一个真正的数据库(甚至是简单的 SQLite)可以使这些东西变得透明简单。

问题#1: 是用于存储此类数据的 DB,应该如何做?请注意,这里没有一对多,多对多映射和其他高级事物,它只是具有特定内部结构的简单数据包序列,我想向用户显示并让他与之交互(即搜索按某个领域)。

问题#2: 现在假设用户自己可以指定他的数据包的格式,即在配置文件中:每个字段的长度、它的类型、它的值的含义(在枚举的情况下)等等。如何为此扩展数据库支持的实现?用户应该定义数据库模式吗?配置文件是否应该自动翻译成这个模式? ORM?

问题#3: 甚至更高级... 现在假设数据包的长度和内容可能不同。即,对于类型 #2 的包,有一些字段,对于类型 #3,还有一些其他字段,依此类推。但我仍然希望我的应用程序能够处理它,很好地显示所有内容,并允许用户在配置文件中指定格式。它是如何完成的?

提前致谢。

最佳答案



当然,数据库对于此应用程序很有用。您可以实现您自己的专用数据存储,而且对于您的特定应用程序,它可能会更有效,因为您可以针对该特化进行设计。关系数据库更通用,但您可以通过使用数据库来避免数周或数月的开发时间。

我今天早些时候回答了另一个关于如何处理可扩展类型的问题,其中每个新的子类型都有自己独特的属性集。

product table, many kind of product, each product have many parameters 。”

对于您的应用,我会选择 Concrete Table Inheritance 设计。



我假设数据包类型的数量相对较少,然后插入了许多具有几乎相同结构的数据包。所以你应该使用数据库的能力来管理元数据。我将为每个新的数据包类型定义一个附加表。

我还将存储“爆炸”的数据包,因此数据包的每个字段都存储在单独的数据库列中。这样您就可以单独索引每一列,以支持高效搜索。

您还可以定义约束,以便某些字段是强制性的 ( NOT NULL ) 或其值受查找表约束。同样,利用数据库的功能使用元数据在需要的地方强制实现一致的结构。

SQL 已经支持一种标准的声明性语言,用于指定具有数据类型、约束等的字段。为什么要开发一种不同的语言,然后必须将其转换为 SQL?



给定数据包类型中可选的字段应允许相应列中的 NULL

关于database - 将数据包存储在数据库中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/692509/

10-13 07:54
查看更多