MarkLogic / NoSQL / NewSQL & Web Application Frameworks - Architecture for new Application



我想开发一款从一开始就可以轻松扩展(最终扩展到数百万用户)的应用程序,它可以容纳每个用户具有Data维度的标准表,但符合一些标准数据格式(如XSD)。我看过MarkLogic,它看起来非常快速和可扩展,并且支持我想要使用的XML类型数据(可能会为各个部分提供一些JSON)。

我的问题:

1) 什么是一个好的Web应用程序框架可以与之进行扩展。我倾向于ASP.NET MVC C#,但那是因为我熟悉它。我看了Node.js,但似乎存在一些扩展问题。

2) MarkLogic是个不错的选择吗?我是NoSQL/NewSQL的新手,但我了解这些概念。还有什么可以很好地扩展?

一直在考虑使用亚马逊AWS

我有常规关系数据库+Web应用程序(SQL Server/MySQL/Oracle ASP.NET MVC等)+XML+C#等的背景

  • 在Kendo UI上做了一些工作,但发现它有点令人厌倦,因为缺少文档,再加上一些让我花了太多时间的bug

Disclosure:我在MarkLogic担任开发人员社区经理。

关于你的第一个问题,MarkLogic为Java和Node.js的MarkLogic REST API提供了支持的包装器。对于其他语言,你可以直接对REST API进行HTTP调用,也可以使用一个社区驱动的包装器作为起点(你提到了.Net)。我还不是Node的专家,无法谈论它的扩展能力,所以我将把这部分留给其他人。REST API的目的是提供简单的访问,而不管您使用什么语言。

对于您的第二个问题,对于需要扩展的XML和JSON数据的应用程序来说,MarkLogic是一个不错的选择吗?是的。

  • MarkLogic的扩展性非常好,许多客户都部署了大型部署。无共享体系结构意味着您可以使用商品硬件来扩展应用程序,而不需要越来越昂贵的机器。(请参阅可扩展性注意事项)
  • MarkLogic支持ACID事务,因此您的数据将是安全的
  • MarkLogic支持但不要求使用模式
  • 您提到可能在AWS上部署。MarkLogic在那里运行良好,使您能够通过添加和删除服务器来上下扩展应用程序。MarkLogic将在可用服务器之间为您平衡数据。请参阅《亚马逊EC2上的MarkLogic服务器指南》
  • 我不熟悉Kendo UI,但我想你会发现MarkLogic有很好的文档记录。我们提供API文档、指南、教程和其他内容来支持开发人员

Disclosure,我也为MarkLogic(工程核心团队)工作。除了Daves注释之外,MarkLogic还支持一个本机.NET接口XCC
https://docs.marklogic.com/guide/xcc此API具有等效的Java和.NET实现。

然而,与Dave提到的API不同,XCC是一个比基于REST的APIS更低级别的API,因此通常需要更多的编码和MarkLogic知识
然而,它是本机.NET库,与C#和其他.NET数据类型有很好的映射。我会把它比作用C++和Ruby或Python编写软件。

其他选择是在HTTP级别使用任何语言的任何HTTP库进行编码,并且不需要任何特定于marklogic的客户端库。(.NET有很好的HTTP)。这种方法需要更多的工作和理解才能开始,因为您需要编写服务器端代码来实现大多数任务,但在版本8中,MarkLogic支持XQuery和JavaScript作为HTTP连接的服务器端代码。

作为与其他软件栈类似的最低级别的API(HTTP),在易于开发和更精确的控制之间存在一种折衷。对于某些执行直接在服务器上的自定义代码可能会造成效率低下或纯客户端代码非常困难。

许多人在学习什么是有效的时,最终使用了API的组合更适合他们的用例和体验。在版本8中,所有的API都可以从不同语言和线程的相同或不同客户端同时访问同一端口。如果你有不同技能水平、熟悉语言的开发人员,可以集成到现有的应用程序中,而不必离开该语言,或者在你觉得有用的时候用服务器端代码编写应用程序的一部分,你可能会觉得这很有用。由于服务器本身完全不知道使用什么API和语言,因此您可以保持相同的数据模型和文档,并随着时间的推移发展应用程序,而无需更改数据本身。

虽然所有这些选择看起来都令人困惑,但它最终意味着你不必太担心你最初的语言或API选择,也不必担心未来的项目或开发人员是否会喜欢不同的东西。这可以让你真正开始编写你的应用程序。选择一种你喜欢的语言,写一个快速的演示应用程序,看看你是否喜欢它,如果不喜欢,尝试另一种或混合&火柴当您扩展到更大的容量时,您可能会发现服务器端语言有助于某些操作,而无需迁移整个应用程序,或者您可以将某些部分移动到浏览器或中间层,添加缓存层或扩展到不同的集群和存储拓扑结构,所有这些都与现有代码无关。

最新更新