存储和管理外汇交易计价数据

时间:2016-03-03 08:36:05

标签: postgresql elasticsearch trading

我正在为外汇交易构建数据可视化系统,并且我正在探索存储我所拥有的历史外汇交易价格数据的方法。

数据的形式为货币对(例如美元/加元)按询价和买价的时间顺序排列。在一天结束时,我需要在Elasticsearch中索引我的数据,我搜索的内容是将它们放到那里的最佳方式。

我在网上找到了几种方法;他们从简单开始,然后变得复杂。我想知道是否增加额外的复杂性是值得的。我的一些选择是:

  1. 在PostgreSQL上存储tick数据,然后通过插件将它们同步到Elasticsearch(here
  2. 在PostgreSQL上存储tick数据,将它们推送到Logstash然后再推送到Elasticsearch
  3. 最后,在PostgreSQL上存储刻度数据,将它们推送到Redis,然后推送到Logstash,再推送到Elasticsearch
  4. 我的直觉说解决方案No 2将是理想的解决方案,但是什么被认为是最佳实践?

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),但是您为有限的用例支付了大量的操作惩罚。

另一方面,如果您的询问/出价数据附带了大量相关元数据,并且:

  1. 你需要PG才能成为真理的来源,
  2. 您需要对该元数据进行文本搜索(有或没有聚合支持)和
  3. 您不想学习ES并为您的应用程序引入另一个数据库系统,然后......
  4. ...... ZomboDB可能适合你。

    我怀疑Stack Overflow不是进入此地点的地方,所以请随时通过ZDB的github页面建议的方式与我联系。