通常数据库主要被视为相当简单的数据存储系统,但它们能够实现更多功能。以PostgreSQL数据库及其基于Ada的PL/pgSQL编程语言为例,它允许执行比原始SQL更复杂的操作。Traconiq团队实现的卡尔曼滤波器就是一个很好的例子,从而消除了对外部过滤管道的需求。
当您同时使用航位推算和GPS坐标进行车辆跟踪时,使用卡尔曼滤波器非常理想,因为它可以过滤掉可能由GPS接收问题等引起的噪声。正如文章中指出的,将状态从一行传递到下一行需要一些横向思维,但通过创造性地使用SQL是可以实现的。由于PL/pgSQL与Oracle的PL/SQL非常相似,相同的代码在那里也应该可以运行,无需太多移植工作。
不同实现的代码和相关基准测试可以在GitHub上找到,尽管基准测试结果清楚地表明,最有效的方法是运行离线聚合处理例程。这与数据库服务器通常执行的其他批处理任务(例如优化存储)相吻合,因此这并不完全出乎意料。