我们正在为我们的某个财务应用程序构建新的功能集。我们有自己的SQL服务器数据库,我们将调用多个返回JSON响应的RESTful API。对于例如一些返回新闻数据,一些返回股票信息,一些返回财务数据,我们自己的sql server数据库有员工数据。因此,它们都有自己不同的数据格式。我们正在构建的这个新应用程序将聚合所有这些数据,将其转换为有意义的显示在网络上,如mint.com。
我们在后端和中间层的技术堆栈方面完全开放。首先想到的是像mongodb这样的NoSQL以及用于搜索和报告的弹性搜索。将在这些数据之上构建一个Web应用程序(从API存储或检索),很可能是在Asp.net MVC中。
我们需要您的意见,特别是如果您有建立类似企业解决方案的经验。
请与您分享您的意见,
答案 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.Net和NEST,一起使用),它们公开了大部分ES功能。
2)我们选择ElasticSearch的可扩展性与灵活性和易用性相结合。您可能面临的挑战可能是将文档从C#类映射到ElasticSearch文档。从本质上讲,它的设置非常简单,但是您需要做一些计划来按照您想要搜索和检索的方式索引数据。因此,如果选择ES作为平台,请花一些时间处理文档结构 - 默认情况下,dynamic mapping
已启用,因此您几乎可以将任何JSON抛出到文档中。但是,对于生产环境,最好将其关闭并设置一个或多个映射,以便以标准化方式查询它们。
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格式。