我正在处理实时跟踪系统,其中一台设备每年可以推送大约 200 万个 GPS 点(即每 5 秒 1 个点,在 365 天内运行 8 小时)。如果这在全球范围内使用数千台设备运行,则每年会产生数十亿条记录。
我知道 SQL Server 可以处理它。但我需要能够对数千台执行并发写入的设备进行实时跟踪。它适用于一些设备,但是当我打开许多跟踪站点时,我可以看到这是 CPU 密集型的。
我打算尝试:
- 蒙哥数据库
- 带有 kazzing 的套接字方法。
有什么替代建议吗?
我正在处理实时跟踪系统,其中一台设备每年可以推送大约 200 万个 GPS 点(即每 5 秒 1 个点,在 365 天内运行 8 小时)。如果这在全球范围内使用数千台设备运行,则每年会产生数十亿条记录。
我知道 SQL Server 可以处理它。但我需要能够对数千台执行并发写入的设备进行实时跟踪。它适用于一些设备,但是当我打开许多跟踪站点时,我可以看到这是 CPU 密集型的。
我打算尝试:
有什么替代建议吗?
鉴于您发布的信息,您的架构没有任何问题。魔鬼在细节中。一方面,很大程度上取决于您的数据库设计得有多好。这取决于查询的编写程度、数据库索引、触发器等...
此外,如果这是任何类型的移动设备,则不应使用传统的基于套接字的连接器。您不能依赖与远程服务器的稳定 tcp 连接。您应该使用像 REST 这样的无状态架构来为您公开/写入数据。REST 在 .NET 中很容易实现 btw 这应该将规模难度从 db 转移到 Web 服务器。
最后,为了尽量减少在服务器上完成的工作,我将实施某种缓存或缓冲池系统来维护每个设备上的数据以供读取,并创建一个写入缓存以将数据发送到中央服务器。写缓存将至关重要,因为您不能依赖稳定的 tcp 连接和来自服务器的事务管理。您需要维护要写入的数据的缓存,即(队列)并在您从服务器确认它已收到您写入的数据时弹出队列。只要有数据和数据连接,就应该弹出队列。但是,在我可以肯定地说或提供更多详细信息之前,我需要更多地了解您的要求。