写重型应用的建筑设计

时间:2012-12-17 03:15:59

标签: c# asp.net sql-server database-design architecture

我正在处理实时跟踪系统,其中一台设备每年可以推动200万个GPS点(即每5秒1点,365天运行8小时)。如果这在全球范围内运行,有数千台设备,那么每年会产生数十亿条记录。

我知道SQL Server可以处理它。但我需要能够使用数千个执行并发写入的设备执行实时跟踪。它可以与一些设备一起使用,但是当我打开许多跟踪站点时,我可以看到这是CPU密集型的。

我打算尝试:

  • Mongo DB
  • 带有嗡嗡声的套接字方法。

任何其他建议?

1 个答案:

答案 0 :(得分:3)

根据您发布的信息,您的架构没有任何问题。然而,魔鬼在细节中。首先,很大程度上取决于您的数据库设计的好坏程度。这取决于您的查询编写得有多好,数据库索引,触发器等......

此外,如果这是任何类型的移动设备,则不应使用传统的基于套接字的连接器。您不能依赖与远程服务器的稳定tcp连接。您应该使用像REST这样的无状态架构来为您公开/写入数据。 REST很容易在.NET b.t.w中实现。这应该将比例难度从数据库移动到Web服务器。

最后,为了最大限度地减少在服务器上完成的工作,我将实现某种缓存或缓冲池系统来维护每个设备上的数据以供读取,并创建用于将数据发送到中央服务器的写缓存。写缓存将是至关重要的,因为您不能依赖与服务器的事务管理的稳定tcp连接。您需要维护要写入的数据缓存,即(队列),并在服务器确认已收到您已写入的数据时弹出队列。只要有数据和数据连接,就应该弹出队列。但是,在我可以肯定地说出来或提供更多细节之前,我需要了解更多关于您的要求。