用于从各种第三方API获取和转换数据的后端解决方案

时间:2015-06-20 17:17:56

标签: api database-design architecture aggregation-framework middleware

我们正在为我们的某个财务应用程序构建新的功能集。我们有自己的SQL服务器数据库,我们将调用多个返回JSON响应的RESTful API。对于例如一些返回新闻数据,一些返回股票信息,一些返回财务数据,我们自己的sql server数据库有员工数据。因此,它们都有自己不同的数据格式。我们正在构建的这个新应用程序将聚合所有这些数据,将其转换为有意义的显示在网络上,如mint.com。

  • Web应用程序将根据这些数据显示分析报告
  • 可以选择通过各种模板下载报告

我们在后端和中间层的技术堆栈方面完全开放。首先想到的是像mongodb这样的NoSQL以及用于搜索和报告的弹性搜索。将在这些数据之上构建一个Web应用程序(从API存储或检索),很可能是在Asp.net MVC中。

我们需要您的意见,特别是如果您有建立类似企业解决方案的经验。

请与您分享您的意见,

  1. 你会为这个应用程序挑选哪些好的技术堆栈?
  2. 当API数据格式发生变化时,现在和未来的规模如何。
  3. 性能也很重要,因为数据将显示在网络用户界面上。

3 个答案:

答案 0 :(得分:3)

根据我的经验,mongodb是报告的最佳选择,尤其是聚合。它缺乏良好的聚合功能,有一些数据类型冲突(例如小数字存储为字符串,你不能在其中使用它内置聚合框架api),你可能必须维护映射 - 在大多数情况下减少javascript中的函数。

如果您的应用程序的真实性质只是报告,并且不必实时更新,我会放弃对外部API的按需RPC调用。我会考虑尽可能多地复制数据并将其存储在最方便您使用的模式下,然后在预定的预测时间间隔内同步。

我不会急于假设这些数据一直可用,也不总是采用您期望的格式。您还可以在运行自己的副本时获得优化优势,以您希望的方式编制索引,而不是试图确定哪个RPC是您的瓶颈。

关于你的问题:

1)如果你不介意使用Python,我会选择Django在PostgresSQL数据库之上。 Django是一个功能齐全的强大的ORM + Web框架,非常适合这种工作。如果没有,只需坚持关系SQL数据库。我听说过卡桑德拉的奇迹,但尚未尝试过。

2 + 3)正如我之前提到的,为了你自己的利益尽可能多地复制数据。一切都在"内部"你可以对它进行聚类并自由调整它。对重度客户端请求使用分布式缓存也是一个好主意(例如REDIS),而不是每次按需生成这些报告。

答案 1 :(得分:3)

我们有类似于你提到的设置,使用ASP.Net MVC和ElasticSearch(用于关系数据的SQL服务器,定期更新ES),从多个来源聚合数据(XML / JSON),尽管目的是改进搜索和过滤结果而不是报告。但是,我希望您正在查看的场景也适合ElasticSearch,具体取决于您的具体要求。

1)由于您已经在使用SQL Server(我希望对此很熟悉),我建议将其与ElasticSearch结合使用 - 在维护其他技术和开发以适应该集成方面,额外的mongodb层似乎是不必要的。有一个非常好的C#库(实际上有两个,ElasticSearch.NetNEST,一起使用),它们公开了大部分ES功能。

2)我们选择ElasticSearch的可扩展性与灵活性和易用性相结合。您可能面临的挑战可能是将文档从C#类映射到ElasticSearch文档。从本质上讲,它的设置非常简单,但是您需要做一些计划来按照您想要搜索和检索的方式索引数据。因此,如果选择ES作为平台,请花一些时间处理文档结构 - 默认情况下,dynamic mapping已启用,因此您几乎可以将任何JSON抛出到文档中。但是,对于生产环境,最好将其关闭并设置一个或多个映射,以便以标准化方式查询它们。

3)性能对我们来说也是一个关键因素,这就是为什么我们在研究时使用Solr和ElasticSearch等基于Lucene的引擎以及NoSQL数据库。在大多数情况下,ElasticSearch的性能优于 10比1或更好的SQL Server。 Solr与ElasticSearch的性能取决于场景,基准和comparisons,如果你谷歌他们。例外情况可能是,如果在一个查询中检索到许多文档 - 不为该用例制作ES(或Lucene),则最好每页快速检索较少的结果(类似于Google的每页结果计数)。如果每页/结果需要1000个文档,NoSQL数据库可能是更好的选择。

ElasticSearch快速启动并运行 - 将其安装在本地开发盒上并试用,您会感觉它是否合适。

答案 2 :(得分:1)

我一直在使用Jasper报告和Jasper Reports Server集成到我们的网络应用程序中。 Jasper接受许多不同的数据源类型,包括JSON和SQLServer。核心版本是免费的,允许您生成高复杂度的html amd pdf报告。使用服务器的付费版本可让您轻松集成到您的Web应用程序中。核心是在tomcat / jboss上运行的Java spring(部分开源),您可以使用REST Web服务或您的Web前端的visualize.js库与它进行交互。它使用highcharts,可以产生一些漂亮的结果,并提供从许多报告构建的特殊报告和仪表板的选项。

请在此处查看演示:http://www.jaspersoft.com/

这有一个假设的后端数据库和数据源堆栈,tomcat与Java Spring,Web前端HTML / Javascript。

该工具被包括亚马逊在内的许多大型企业使用,因此不应成为问题。

如果数据格式发生变化,则需要更改报告。这是由GUI与WYSIWYG编辑的xml格式。