Redis - это магазин в памяти. Все данные должны поместиться в памяти. Таким образом, за исключением случаев, когда у вас есть 3 ТБ ОЗУ в год данных, это не правильный вариант. Предел 2 ^ 32 на самом деле не является проблемой на практике, потому что вам, вероятно, придется в любом случае ограждать ваши данные (т. Е. Использовать несколько экземпляров), а также потому, что на самом деле ограничение составляет 2 ^ 32 ключей с 2 ^ 32. элементов на ключ.
Если у вас достаточно памяти и вы все еще хотите использовать (огороженный) Redis, вот как вы можете хранить временные ряды с эффективным использованием пространства: https://github.com/antirez/redis-timeseries
Возможно, вы также захотите исправить Redis, чтобы добавить правильную структуру данных временных рядов. См. Реализацию Луки Сбарделлы по адресу:
https://github.com/lsbardel/redis
http://lsbardel.github.com/python-stdnet/contrib/redis_timeseries.html
Redis отлично подходит для агрегирования статистики в режиме реального времени и сохранения результатов этих расчетов (т.е. приложений DIRT). Однако хранить исторические данные в Redis гораздо менее интересно, поскольку он не предлагает языка запросов для выполнения автономных вычислений с этими данными. Хранилища на базе Btree, поддерживающие шардинг (например, MongoDB), вероятно, более удобны, чем Redis, для хранения больших временных рядов.
Традиционные реляционные базы данных не так уж плохи для хранения временных рядов. Люди посвятили этой теме целые книги:
Разработка ориентированных на время приложений баз данных в SQL
Другой вариант, который вы можете рассмотреть, - использовать решение для больших данных:
хранение массивных данных упорядоченных временных рядов в больших производных
IMO главное (независимо от механизма хранения) - оценить шаблоны доступа к этим данным. Для чего вы хотите использовать эти данные? Как вы получите доступ к этим данным после их сохранения? Вам нужно получить все данные, связанные с данным символом? Вам нужно восстановить эволюцию нескольких символов в заданном временном диапазоне? Нужно ли коррелировать значения разных символов по времени? и т.д ...
Мой совет: попробуйте перечислить все эти шаблоны доступа. Выбор данного механизма хранения будет только следствием этого анализа.
Что касается использования MySQL, я бы определенно рассмотрел разбиение таблиц из-за объема данных. В зависимости от моделей доступа я бы также рассмотрел ARCHIVE engine . Этот механизм хранит данные в сжатых плоских файлах. Это пространство, эффективное. Его можно использовать с секционированием, поэтому, несмотря на то, что он не индексирует данные, он может быть эффективен при извлечении подмножества данных, если тщательно выбран гранулярность раздела.