Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 可以实现您自己的专用数据存储,并且对于您的特定应用程序来说可能会更有效,因为您可以为该专门化设计它。关系数据库更具通用性,但使用数据库可以避免数周或数月的开发时间_Database_Database Design_Binary Data - Fatal编程技术网

Database 可以实现您自己的专用数据存储,并且对于您的特定应用程序来说可能会更有效,因为您可以为该专门化设计它。关系数据库更具通用性,但使用数据库可以避免数周或数月的开发时间

Database 可以实现您自己的专用数据存储,并且对于您的特定应用程序来说可能会更有效,因为您可以为该专门化设计它。关系数据库更具通用性,但使用数据库可以避免数周或数月的开发时间,database,database-design,binary-data,Database,Database Design,Binary Data,今天早些时候,我回答了另一个关于如何处理可扩展类型的问题,其中每个新的子类型都有自己独特的属性集 “” 对于你的应用,我会选择这种设计 问题2:现在假设用户 他自己可以指定他的文件的格式 数据包,即在配置文件中: 每个字段的长度及其类型, 其值的含义(在 枚举)等。我该怎么办 扩展数据库支持的实现 这个 我假设数据包类型的数量相对较少,然后许多数据包以几乎相同的结构插入。因此,您应该使用数据库的能力来管理元数据。我将为每个新的数据包类型定义一个额外的表 我还将存储“分解”的数据包,这样数据包的每

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

“”

对于你的应用,我会选择这种设计

问题2:现在假设用户 他自己可以指定他的文件的格式 数据包,即在配置文件中: 每个字段的长度及其类型, 其值的含义(在 枚举)等。我该怎么办 扩展数据库支持的实现 这个

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

我还将存储“分解”的数据包,这样数据包的每个字段都存储在单独的数据库列中。通过这种方式,您可以单独索引每一列,以支持高效搜索

您还可以定义约束,以便某些字段是必需的(
非NULL
),或者它们的值受查找表的约束。同样,利用数据库的功能使用元数据在需要的地方实施一致的结构

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

问题3:更高级的。。。现在 假设数据包可以是 长度和内容不同


在给定的包类型中可选的字段应该允许在相应的列中出现<代码> null >代码>

您可能要考虑的另一个选项是它的克隆之一。BDB的级别非常低,没有SQL。它实际上是一个非常小、非常快的文件备份哈希表。它已经存在了很久,并且在许多以速度和简单为重的地方被使用。不过,您需要在顶部添加一些功能,以完成您试图完成的任务。

尽管您声明不存在1对多关系,但有:)

我建议为数据包存储创建两个表。一个用来存储“头”或“标量”信息的方法,这是数据包的公共信息,虽然它可以定义存在什么数据,但它不是数据包中存储的实际数据

第二个表将存储每个数据包的数据,每个字段值组合表示该表中的一行。例如,以下两个表:

create table packet
(
    packet_id int identity(1, 1) primary key,
    destination varchar(50),
    sender varchar(50),
    packet_type_id int not null
)

create table packet_field
(
    packet_field_id int identity(1, 1) primary key,
    packet_id int not null references packet (packet_id),
    field_id int not null,
    data varbinary(500)
)
显然,这两个表对所存储的数据的类型和大小做出了假设,并且没有详尽地说明它们需要存储什么。然而,这种基本结构允许动态定义数据包格式,并且是一种易于索引的模式(例如,在
packet\u id+field\u id
packet\u field
中添加一个索引将是一件轻而易举的事)

然后,您的应用程序所要负责的就是解包并将其存储在此模式中的数据库中,然后重新打包(如有必要)

当然,从这一点开始,您将需要存储数据包实际格式的表。类似于

create table packet_type
(
    packet_type_id int identity(1, 1) primary key,
    name varchar(200) not null
)

create table packet_type_field
(
    field_id int identity(1, 1) primary key,
    packet_type_id int not null references packet_type (packet_type_id)
    field_offset int not null,
    name varchar(200) not null
)

同样,显然是简化了,但它显示了基本思想。对于每个数据包格式,在
数据包类型
表中有一条记录,对于给定数据包中的每个字段,在
数据包类型
字段中有一行记录。这将为您提供将任意二进制数据块处理到上述数据包存储模式所需的大部分信息。

想到三种方法

sFlow和IPFlow可以传输一组有限的数据包内容。这可以直接登录到几个不同的数据库

另一个更有针对性的方法是编写非常简单的snort规则,如源地址或目标地址。然后让snort捕获数据包的有效负载。这样,您只能获得所需的实际数据。例如,您可以只获取数据包中的数据字段。e、 g.密码等

ngrep还可以直接从网络上获取选择性数据


当然,如果您不是在服务器/工作站本身上进行捕获,则每个端口都可能需要一个tap或monitor会话。

在执行类似的简单操作时,您会发现哪些问题?您是否在问,是否已经有了这样一种从配置文件生成模式的实现?使用类似SQLAlchemy的ORM可以更好地解决这个问题,还是与我的需求无关?另外,您能否澄清一下“管理元数据的能力”是什么意思?在这里,什么样的元数据最适合我?元数据指的是一个表,由列和约束组成。RDBMS使用元数据强制数据类型、非空、引用完整性等。是的,使用ORM可能会有所帮助。您可以在table类中编写代码,将完整的数据包存储在数据库中时转换为其组件列,然后将从数据库获取的数据重新组装为数据包。这支持封装。