Технологический стек для очень частого сбора данных GPS - PullRequest
0 голосов
/ 01 июня 2010

Я работаю над проектом, который включает сбор данных GPS от многих пользователей (скажем, 1000) каждую секунду (пока они перемещаются). Я планирую использовать выделенный экземпляр базы данных на EC2 с постоянным блочным хранилищем mysql и запустить приложение ruby ​​on rails с внешним интерфейсом nginx. Я не работал над таким приложением для сбора данных раньше. Я что-то здесь упускаю?

У меня будет другой экземпляр, который будет выполнять роль сервера приложений и использовать данные из того же EBS. Если бы кто-нибудь имел дело с такой системой раньше, какой-либо совет был бы высоко оценен?

Ответы [ 2 ]

1 голос
/ 01 июня 2010

Я бы больше всего беспокоился о MySQL и о том, что диск является твоим узким местом. Я собираюсь предположить, что вы уже знакомы с компромиссом Ruby / Rails: всегда нужно выделять больше оборудования на уровне приложений в обмен на повышение производительности труда программиста. Однако вам понадобится масштабировать MySQL для записи, и это может быть сложным предложением, если вы говорите о более чем 1000 QPS (1000 пользователей, пишущих один раз в секунду). Я бы порекомендовал взять любую конфигурацию MySQL, которую вы планируете использовать, и использовать для этого значительный объем трафика записи. Если он упадет, скажем, до 3000 QPS (всегда оставляйте себе передышку для всплесков), вам нужно будет либо пересмотреть свой план (данные каждую секунду, правда?), Либо сначала написать что-то вроде memcache и использовать запланированные задачи для записи в базу данных за один раз (MySQL 3.22.5 и более поздние версии поддерживают несколько вставок в одном запросе, а также есть метод LOAD DATA INFILE, который можно использовать вместе с /dev/shm). Вы также можете посмотреть отложенную вставку, если не используете InnoDB.

Я, конечно, пристрастен (я работаю в Google), но я бы использовал для этого App Engine. Мы запускаем вещи, которые получают все больше трафика записи, чем этот, все время на App Engine, и это прекрасно работает. Он масштабируется из коробки, нет необходимости запускать новые образы, и вам не нужно решать вопросы масштабирования на основе SQL. Также вы получаете тонну бесплатной квоты для работы до начала выставления счетов. Вы можете запустить JRuby, если вам действительно нужна среда Ruby, или вы можете выбрать Python, который немного лучше поддерживается. Для такого развертывания развертывание также намного проще, даже если вы используете Влада или Capistrano с EC2.

Редактировать: Вот очень консервативная оценка роста ваших данных. 16 байт - это минимум, необходимый для хранения пары координат широта / долгота (два двойных). В реальном мире у вас есть индексы и другие издержки базы данных, которые увеличат это число. Измените формулу в соответствии с реальными данными, чтобы определить, насколько быстро вы достигнете пределов в 150 ГБ.

0 голосов
/ 01 июня 2010

Вы должны использовать PostgreSQL для этого. Postgres лучше поддерживает пространственные типы данных (точка, линия, плоскость и т. Д.). Также он имеет функции для обработки и вычисления различных типов пространственных данных, а также индексации таких данных. Вы можете использовать GeoKit gem для ruby ​​на рельсах для различных операций на уровне ActiveRecord.

И я согласен с webdestroya - каждую секунду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...