我意识到这个问题已得到很好的讨论,但我想在我的具体需求的背景下得到你的意见.
我正在开发一个实时金融数据库,每分钟从网上抓取股票报价并将其存储在数据库中.我目前正在使用SQLAlchemy而不是MySQL,但我遇到了Redis,它看起来很有趣.它看起来很好,特别是因为它的性能,这在我的应用中至关重要.我知道MySQL也可以很快,我只是觉得实现大量缓存会很痛苦.
我保存的数据主要是十进制值.我也使用这些十进制值进行了大量的除法和乘法(在不同的应用程序中).
就数据大小而言,我每分钟多次抓取大约10,000个符号.这相当于每年约3 TB的数据.
我也担心Redis的关键数量限制(2 ^ 32).Redis是一个很好的解决方案吗?还有哪些其他因素可以帮助我做出对MySQL或Redis的决定?
谢谢!
Did*_*zia 20
Redis是一家内存商店.所有数据必须适合内存.因此,除非您每年有3 TB的RAM数据,否则它不是正确的选择.2 ^ 32限制在实践中并不是真正的问题,因为您可能不得不对数据进行分片(即使用多个实例),并且因为限制实际上是2 ^ 32个密钥,每个密钥有 2 ^ 32个项目.
如果你有足够的内存但仍想使用(分片)Redis,这里是你如何存储节省空间的时间序列:https://github.com/antirez/redis-timeseries
您可能还想修补Redis以添加适当的时间序列数据结构.请参阅Luca Sbardella的实施:
https://github.com/lsbardel/redis
http://lsbardel.github.com/python-stdnet/contrib/redis_timeseries.html
Redis非常适合实时汇总统计数据并存储这些计算结果(即DIRT应用程序).但是,在Redis中存储历史数据要小得多,因为它不提供查询语言来对这些数据执行离线计算.支持分片的基于Btree的商店(例如MongoDB)可能比Redis更方便存储大型时间序列.
传统的关系数据库对于存储时间序列并不是那么糟糕.人们为这个主题专门写了整本书:
您可能要考虑的另一个选择是使用bigdata解决方案:
IMO的主要观点(无论存储引擎如何)都是评估这些数据的访问模式.你想用这些数据做什么?存储后如何访问这些数据?您是否需要检索与给定符号相关的所有数据?您是否需要检索给定时间范围内几个符号的演变?您是否需要按时间关联不同符号的值?等......
我的建议是尝试列出所有这些访问模式.给定存储机制的选择只是这种分析的结果.
关于MySQL的使用,我肯定会考虑表分区,因为数据量很大.根据访问模式,我还会考虑ARCHIVE引擎.该引擎将数据存储在压缩的平面文件中.它节省空间.它可以与分区一起使用,因此,尽管它不对数据编制索引,但如果仔细选择分区粒度,则可以有效地检索数据子集.
归档时间: |
|
查看次数: |
8449 次 |
最近记录: |