我正在为外汇交易构建数据可视化系统,并且我正在探索存储我所拥有的历史外汇交易价格数据的方法。
数据的形式为货币对(例如美元/加元)按询价和买价的时间顺序排列。在一天结束时,我需要在Elasticsearch中索引我的数据,我搜索的内容是将它们放到那里的最佳方式。
我在网上找到了几种方法;他们从简单开始,然后变得复杂。我想知道是否增加额外的复杂性是值得的。我的一些选择是:
我的直觉说解决方案No 2将是理想的解决方案,但是什么被认为是最佳实践?
答案 0 :(得分:1)
将数据存储在长期存储数据库(如PostgreSQL或类似数据库)中是一个好主意。通过这种方式,您可以随时决定是否需要更改映射,添加字段,删除字段,更改其类型或拥有的内容,然后您可以轻松地重建ES索引/索引,而不会在主要来源中造成太多麻烦事实上(即PostgreSQL)你总是在ES中拥有干净的数据。
我不知道ZomboDB(解决方案1)因此我无法真正代言,我所知道的是,我通常不太喜欢将两种不同的技术捆绑在一起,它使得如果您需要/必须/想要应用补丁或从其中任何一个中获得新功能,很难升级它们中的任何一个。
除非您对源数据进行大规模且昂贵的转换,否则我认为解决方案3不会带来太大的影响,即在中间Redis中存储数据的额外步骤,并没有带来太多我的意见(你的里程可能会有所不同)。当可能在管道中丢失数据时,它会good idea使用临时存储,例如Redis或Kafka,但在这种情况下,因为您在PostgreSQL中拥有数据,你真的没有失去任何东西的风险。如果有的话,您可以重新启动管道并重建几天的数据。
留下解决方案2,根据手头的信息,这将是很好的。使用Logstash JDBC input,您可以轻松检索最新的更改,并每x分钟将其转发到ES。
答案 1 :(得分:1)
来自ZomboDB的Eric。我想尝试回答你的问题,因为它与ZDB有关。
ZomboDB真的是为Postgres中的全文搜索而设计的。请注意,它不是将PG数据同步到Elasticsearch的工具,这一点非常重要。它是一个功能齐全的Postgres索引类型(类似于内置类型,如btree,gin和gist),恰好由Elasticsearch支持。 ZomboDB使用Elasticsearch的事实实际上是一个实现细节。
虽然ZDB确实提供了许多公开访问ES'总的来说,它设计用于文本搜索。
因此,如果您的数据实际上只是数字对,那么您最好直接使用ES - 特别是如果您每天都在一批中加载数据。毫无疑问,与标准的Postgres" GROUP BY"相比,ZDB可以提供更好的聚合性能。查询(因为它将其传递给Elasticsearch),但是您为有限的用例支付了大量的操作惩罚。
另一方面,如果您的询问/出价数据附带了大量相关元数据,并且:
...... ZomboDB可能适合你。
我怀疑Stack Overflow不是进入此地点的地方,所以请随时通过ZDB的github页面建议的方式与我联系。