用于非常频繁的gps数据收集的技术堆栈

时间:2010-06-01 03:42:00

标签: mysql ruby-on-rails amazon-ec2

我正在研究一个项目,该项目每秒都会涉及来自许多用户(比如1000)的gps数据收集(当他们移动时)。我计划在EC2上使用一个专用的数据库实例和mysql持久块存储,并使用nginx前端在rails应用程序上运行ruby。 我之前没有参与过这样的数据收集应用程序。我在这里错过了什么吗?

我将有另一个实例,它将充当应用程序服务器并使用来自同一EBS的数据。 如果有人之前已经处理过这样的系统,那么任何建议都会受到高度赞赏吗?

2 个答案:

答案 0 :(得分:1)

我最担心的是MySQL和磁盘是你的瓶颈。我将假设您已经熟悉Ruby / Rails的权衡,总是需要在应用程序层投入更多硬件,以换取更高的程序员生产力。但是,你需要扩展MySQL以进行写入,如果你真的在谈论1000多个QPS(1000个用户,每秒写一次),这可能是一个棘手的主张。我建议你采用你计划使用的任何MySQL配置,并在其上投入大量的写入流量。如果它落在任何低于3000 QPS(总是让自己为尖峰呼吸的空间)的任何地方,你将需要修改你的计划(数据每秒?真的吗?)或者首先写一些类似memcache的东西并使用计划任务一次写入数据库(MySQL 3.22.5及更高版本支持单个查询中的多个插入,还有LOAD DATA INFILE方法,可与/dev/shm一起使用)。如果您不使用InnoDB,也可以查看延迟插入。

我当然有偏见(我在谷歌工作),但我会使用App Engine。我们运行的东西比App Engine上的写入流量更多,而且效果很好。它开箱即用,无需启动新映像,也无需处理扩展基于SQL的持久性问题。此外,您还可以在结算开始前获得大量免费配额。如果你真的想要一个Ruby环境,你可以运行JRuby,或者你可以选择支持更好的Python。即使你将Vlad或Capistrano与EC2一起使用,部署也会更加容易。

编辑: Here's a very conservative estimate of your data growth. 16个字节只是存储纬度/经度坐标对(两个双精度)所需的最小值。在现实世界中,您有索引和其他数据库开销,这将增加此数量。根据实际数据相应调整公式,以确定您达到150GB限制的速度。

答案 1 :(得分:0)

你应该使用PostgreSQL。 Postgres对空间数据类型(点,线,平面等)有更好的支持。它还具有处理和计算不同空间数据类型以及索引此类数据的功能。您可能希望将GeoKit gem用于rails上的ruby,以便在ActiveRecord级别进行各种操作。

我同意webdestroya - 每一秒?