首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使我的架构可伸缩以处理线性过程

如何使我的架构可伸缩以处理线性过程
EN

Database Administration用户
提问于 2017-01-24 19:58:34
回答 1查看 58关注 0票数 0

我有一个实时交通计算系统,使用自动车辆定位(AVL)。

我可以知道车在哪里,现在在哪里,计算距离和时间可以估计这些道路上的交通速度。我有两个商店程序:

  • near_link使用avl (x,y)找到近路段
  • create_route采用压浆加长、电流环和前一环,可以计算出车辆行驶的路线。

这两个进程都是线性的,计算1行的near_link需要10 ms,计算100行需要1000 ms或1秒。计算一条路线的费用要高出一升,一条路线是50毫秒,100条路线是5秒。

问题是avl车队的增长,所以现在我收到的不是400 avl/min,而是2000 avl/min。现在我需要的不是400*60ms = 24 sec,而是2000*60 = 120 sec,所以每分钟我只能处理一半的数据。

我现在能想到的唯一解决方案是有两个分开的服务器,一个处理偶数car_id,另一个处理奇怪的car_id,因此在两个服务器之间分配负载。

目前,我只使用一个生产桌面,Windows i3核心3Ghz 8gb内存正常磁盘。我可以为生产服务器要求一个更好的硬件。例如,我知道查询非常需要HDD,因为需要经常检查map_rto表,但是我可以看到在资源监控CPU和内存中的使用率很低。所以我可以升级到SDD磁盘。希望我的时间减少到一半。

但是当舰队增加到4000 avl/min或8000 avl/min时会发生什么呢?这些线性计算的规模有哪些策略?

现行设计的一般描述:

我喜欢使用pgAgent和触发器将数据从一个阶段移动到另一个阶段的想法。但也许有更好的方法。

  • avl_sources (表):我可以让多家公司提供数据,每个公司都有一个分开的表,每个表上都有触发器将新行插入到avl_pool表中
    • 每一行都有:car_idxyazimuthdatetime
    • 我每分钟检查一次外部源,接收大约2000条记录,用5秒钟完成所有处理。

  • map_rto (表):包含我的国家道路信息。有大约三百万的链接。用于计算near_linkroute
  • near_link (sp):使用avl x, y, azimuth试图找到与该位置最接近的链接。我每分钟从一个pg_agent作业中调用这个sp。
  • 导出( sp ):也可以从pgAgent调用这个sp。将带有near_link的avl移动到traffic_avl
  • traffic_avl (表)::该表具有触发器来使用当前位置和先前位置计算路由。
EN

回答 1

Database Administration用户

发布于 2017-01-29 20:39:35

由于您怀疑磁盘是限制因素,如果您专注于硬件,升级到SSD听起来是您最好的选择。如果允许缓存大多数慢速表/索引,更多的RAM也可能工作。( map_rto及其最常用的索引有多大?)

如果您希望尝试调优已经拥有的硬件,或者在购买硬件之前确保这确实是问题所在,那么您应该从存储过程中识别出缓慢的查询,并为它们遵循这个建议

特别有用的是打开track_io_timing并为缓慢的查询发布EXPLAIN (ANALYZE, BUFFERS)

最后,调用这两个函数的代码是单线程的吗?如果是这样的话,您可以尝试将其并行化,为每个线程提供不同的数据库连接。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/162120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档