用于什么数据结构

时间:2011-02-05 05:11:57

标签: data-structures

我们有一个消息系统,其中一个模块以高速率向另一个远程模块发送一些消息。接收模块以特定格式对此消息进行解码,并将其转发到两个线程。一个称为记录器线程,另一个称为转发器线程。

在我们将这条消息发送给这些线程之前,我们需要对这些消息进行某种分组。

请注意,这些消息的速度很快,大约为每秒800。

警报结构如下:

  1. INT type
  2. INT发送系统ID
  3. INT Recpt System ID
  4. INT时间戳
  5. INT代码
  6. INT源端口
  7. INT目的地港口
  8. 源IP地址(ipv4或ipv6)
  9. 目标IP地址(ipv4或ipv6)
  10. 在比赛结束时,我们需要维护一个具有以下细节的结构

    struct{
      INT COUNT
      INT First Alert Timestamp
      INT Last Alert Timestamp
      INT First Alert ID
      INT Last Alert ID
    }
    

    对于与8个标准相匹配的每个警报,将创建/挑选一个组,并且计数将与其他详细信息一起递增。

    IP地址字段可以是5个字段的结构(INT地址类型,INT地址1,INT地址2,INT地址3和INT地址4),也可以转换为字符串然后存储在结构中。

    我们一直在喋喋不休,但却无法找到结构或算法,因此可以解决内存和速度问题。

    因此想到找专家寻求帮助。

2 个答案:

答案 0 :(得分:0)

用于存储匹配的警报的双链表。使检索第一个和最后一个AlertID变得容易。您可能需要扩展双链表以获得计数字段。

根据您的性能要求,您可以从列表中对警报进行分组,并在标识符上添加哈希值。如果这还不够快,可以实现一个更复杂的树结构,按照标识字段进行分组。

我能提出的最好的建议是以最简单的方式让它工作,每秒800就是一无所获。如果您遇到性能问题,请进行优化。使用测试驱动开发编写类似的东西非常有趣,打败了你的普通crud代码!

答案 1 :(得分:0)

你打算怎么写这个?任何建议都将严重依赖于语言。

最好的方法是从Dictionary<string, ContainerObject>开始,其中密钥由连接所需的参数组成,以便快速查找。继续使用此字典在内存中,同时您有另一个进程正确记录值来表示数据库或平面文件。

保持简单,800秒不应该是一个问题。然而,沟通手段将成为一个主要因素。这是本地还是远程?如果它是远程的并且来自单一来源,那么如果在个别请求中完成,那么你的复仇将会延迟。