Как непрерывно сохранять локально большие данные из пошаговой потоковой передачи, не перегружая оперативную память?Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Как непрерывно сохранять локально большие данные из пошаговой потоковой передачи, не перегружая оперативную память?

Сообщение Гость »


Я хочу сохранить локально все тиковые данные от брокера, не перегружая оперативную память. Трансляция начинается в воскресенье и заканчивается в первые часы субботы. В любое время в течение недели я хочу иметь возможность загрузить файл с жесткого диска и проанализировать «пока что» обновления.

Иногда количество тиков может превышать 1000 или даже 10 000 в секунду. Я хочу подписаться на 40 инструментов (например, EURUSD).

Итак, как лучше всего это сделать в Python?

Вот что я пробовал:

Любой фрейм данных pandas:

df = pd.DataFrame(columns=['Time_sent', 'Time_received', 'Instrument', 'Bid', 'Ofr']) И затем при любом обновлении я объединяю новую строку:

df = pd.concat([df, pd.DataFrame([[datetime.fromtimestamp(int(update.get_time())/1000), дата-время.сейчас(), update.get_instrument(), update.get_bid_value(), update.get_ofr_value()]], columns=df.columns)], ignore_index=True) И наконец, обновляю галочки:

df.to_pickle('ticks.pkl') Но у него есть два недостатка: он излишне перегружает оперативную память и при любом обновлении перезаписывает файл Tickets.pkl, поэтому, если он большой, требуется много времени, и я не могу так легко получить к нему доступ в любое время.
>
Либо json:

Я определяю функцию:

defappend_record(запись): с open('ticks.json', 'a') как f: json.dump(запись, е) f.write(os.linesep) И потом, каждый раз, когда я устанавливаю обновление локально:

append_record({'Time_sent': update.get_time(), «Time_received»: datetime.now().timestamp() * 1000, «Инструмент»: update.get_instrument(), «Ставка»: get_bid_value(), 'Ofr': get_ofr_value()}) Но у него есть два недостатка: файл (ticks.json) намного больше, чем Tickets.pkl, и я не думаю, что это лучший и самый современный метод Python.

Какой совет? Может быть, мне стоит использовать базу данных SQL (SQLite) или h5? Как лучше всего сделать то, что я хочу? В любом случае мне не следует перезагружать/перечитывать сохраненный файл, дописывать его и потом снова сохранять. Это должно быть что-то поумнее.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»