Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用于非常频繁的gps数据采集的技术堆栈_Mysql_Ruby On Rails_Amazon Ec2 - Fatal编程技术网

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

Mysql 用于非常频繁的gps数据采集的技术堆栈,mysql,ruby-on-rails,amazon-ec2,Mysql,Ruby On Rails,Amazon Ec2,我正在做一个项目,涉及每秒(移动时)从许多用户(比如1000)收集gps数据。我计划在EC2上使用一个带有mysql持久块存储的专用数据库实例,并使用nginx前端运行RubyonRails应用程序。 我以前从未使用过这样的数据收集应用程序。我是不是遗漏了什么 我将有另一个实例作为应用服务器,并使用来自同一EBS的数据。 如果有人曾经处理过这样一个系统,请提供任何建议 对此,您应该使用PostgreSQL。Postgres更好地支持空间数据类型(点、线、平面等)。此外,它还具有处理和计算不同空间

我正在做一个项目,涉及每秒(移动时)从许多用户(比如1000)收集gps数据。我计划在EC2上使用一个带有mysql持久块存储的专用数据库实例,并使用nginx前端运行RubyonRails应用程序。 我以前从未使用过这样的数据收集应用程序。我是不是遗漏了什么

我将有另一个实例作为应用服务器,并使用来自同一EBS的数据。
如果有人曾经处理过这样一个系统,请提供任何建议

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


我同意webdestroya-每秒钟?

我最担心的是MySQL和磁盘成为您的瓶颈。我假设您已经熟悉Ruby/Rails的权衡,即始终需要在应用层投入更多的硬件,以换取更高的程序员生产率。然而,您需要扩展MySQL以进行写操作,如果您实际谈论的是1000多个QP(1000个用户,每秒写一次),那么这可能是一个棘手的问题。我建议您采用您计划使用的MySQL的任何配置,并向其投入大量的写流量。如果在3000 QPS以下(总是给自己喘息的空间),你需要修改你的计划(每秒数据?真的吗?),或者先写memcache之类的东西,然后使用计划任务一次性写入数据库(MySQL 3.22.5及更高版本支持在单个查询中进行多个插入,还有
加载数据填充
方法,可以与
/dev/shm
结合使用)。如果不使用InnoDB,还可以查看延迟插入

我当然有偏见(我为谷歌工作),但我会使用App Engine来实现这一点。我们在App Engine上运行的东西总是比这获得更多的写入流量,它工作得很好。它可以开箱即用地扩展,不需要启动新的映像,而且您不必处理扩展基于SQL的持久性的问题。此外,在bil之前,您还可以获得大量的免费配额ling开始了。如果你真的想要一个Ruby环境,你可以运行JRuby,或者你可以选择Python,这是一个更好的支持。对于这样的东西,部署也更容易,即使你在EC2中使用Vlad或Capistrano


编辑:16个字节只是存储一个lat/lon坐标对(两个双字节)所需的最小值。在现实世界中,索引和其他数据库开销会增加此数字。根据实际数据相应调整公式,以计算达到150GB限制的速度。

每秒钟一次?您是否考虑过这可能对用户造成的影响?(例如电池寿命大幅缩短)是的,电池寿命将是一个问题。但是用户只会在开车时使用它,而且很多人可能有车内移动充电器。相反,你应该每秒钟增加更新时间,比如5分钟。你打算保留这些数据多长时间?1000 QPS的持续lat/lon写入是每月至少40 GB的磁盘使用量增长,不包括任何数据一种索引。上次我检查EC2实例时,它们有大约150 GB的可用空间。您是否计划每3个月添加一个新的数据库实例?它不会持续下去。粗略估计将是每天<3小时。实际上,我在空间方面没有使用任何奇特的功能。我将使用此数据进行一些计算显示使用谷歌地图进行路由。此外,我们过去一直在使用mysql。因此legacy也在这里发挥作用。感谢Bob的回复。我们正在考虑的一件事是将数据本地保存在智能手机上,并分批发送(每2或5分钟一次)。这会改变您描述的任何场景吗?我以前使用过google app engine,如果我们在项目中做得不太深入,肯定会使用它。此外,我们比python django更擅长rails。事实上,我可能不会使用django来处理这种吞吐量。我只会编写一个请求处理程序和流程一切都是纯金属的。如果你打算使用Rails,你应该做同样的事情,用Rails金属机架中间件处理所有这些传入的请求。你的应用程序的其余部分应该可以用普通的Rails请求逻辑来处理。是的,分批发送数据将是一种更好的方法。即使每分钟发送一次也将是一个巨大的挑战改进。