Как осуществить сбор и хранение данных из апи бирж?
Надо снимать данные с апи десятка бирж, которые обновляются с регулярностью в 1 секунду, пытаюсь придумать, как это правильно сделать. Пока только такой вариант:
1) php класс мультикурл с вызовом каждую 1 минуту и получением данных со всех бирж за последнюю минуту
2) сохранение полученного в mysql одна строка - одна секунда - с данными об одной бирже
Проблема:
- Обновления слишком редкие (1 мин), но планировщик CRON не позволяет сделать 1 или 5 сек, только минуту..
- Хранение в mysql настораживает.. через месяц база будет гигов 10 и как с ней потом работать... может надо в файлах хранить?
Подскажите, как вообще решают такие вопросы? Опыта ноль в организации подобной структуры, а сделать сервис, который всё время падает или люто тупит, не хотелось бы..
Если вам обязательно нужны костыли на РНР, то (люто приложено всяко будет) можно сделать так:
0) Вы можете использовать в РНР форк, но это будет адская пляска ;)
1.1) Ставите RabbitMQ, в него закидываете таски
1.2) В кроне запускаете Х скриптов, работающих в цикле, проверяющих наличие незавершенных для себя тасков. Выполняете эти таски.
Насчет базы.. Можно сделать отдельные базы под каждую площадку, можно выгружать устаревшие данные из базы в архив, можно использовать Riak или Hadoop. Вариантов применения и выбора СУБД очень много. Опеределиться нужно с данными: что это за биржи, зачем хранить данные трехмесячной давности и т.д.
Сохранять ли в БД или еще куда зависит от того, как вы эти данные собираетесь использовать. Например, можно сохранять в MySQL, но делить таблицы по месяцам (новый месяц - новая таблица), если нужны старые данные - добавляете в запрос нужное количество UNION'ов.