微软提供了许多不同的数据访问选项。哪一种最适合可扩展的应用程序?

林克

我们应该使用 Linq 吗?这看起来确实很简单,但如果您了解 SQL,它确实会有帮助。我还听说您无法使用 Linq 在 ASP.NET 中运行异步查询。因此我想知道它是否真的具有可扩展性?是否有使用 Linq 的大型网站(stackoverflow 可能除外)。

实体框架

不要听到太多关于实体框架的花言巧语。似乎更接近我熟悉的对象模型。

阿斯托里亚/动态数据

我们应该将数据作为服务公开吗?

在我接触其他 ORM 产品(如 NHibernate)之前,我很困惑。有什么更好的想法或智慧吗?

有帮助吗?

解决方案

我推荐 NHibernate 或实体框架。对于大型站点,我会使用 ADO.NET 数据服务。我不会使用 LINQ to SQL 做任何大事。我认为 Stack Overflow 最终可能会遇到一些有趣的规模问题,即 2 层而不是 3 层,并且随着数据库的物理方面发生变化,并且这些变化会波及到整个代码,它们在重构时也会遇到一些麻烦。只是一个想法。

其他提示

我认为 ADO.Net Data Services(以前称为 Astoria)可以发挥巨大的作用。它非常适合 Web 的 REST 风格架构。

由于网络是可扩展的,我想任何遵循其架构的东西也是可扩展的。另外,您可能需要留意 SQL Server Data Services。

如果您谈论的是关系数据库,那么我的投票是支持将所有数据操作封装在存储过程中,无论您如何从其他层访问它们。

如果禁用对数据库的所有读/写访问(除了通过存储过程之外),则可以将数据模型隐藏在定义明确的合约后面。数据模型可以自由更改,因此存储过程仍然尊重其输入和输出。

这使 DBA 可以完全自由地调整应用程序并使其扩展。当 SQL 由数据库外部的工具生成时,这是一项非常非常困难的任务。

如今,锁定存储过程似乎是一种日渐式微的思维方式,至少我目前的观察是这样。这种思维方式确实适合 ORM 世界,因为它们通常更有效地直接针对表,但任何有价值的 ORM 也将允许使用过程——有时你别无选择。

关于 EF 有很多意见,无论任何人说什么,好还是坏,它都是 V1 产品,根据经验法则,MS 大约需要 3 转才能得到正确的结果,因此谨慎的做法是等待下一个转数至少。

看来这个领域最大的参与者是 NHibernate,并且社区对此提供了大量支持。Linq 这一语言功能距离进入 NHibernate 堆栈应该不会太遥远。

使用任何对你有用的东西。如果您已经有一个相当标准化的数据库(即主键和外键的良好定义),那么这些都是最容易设置的。但是,如果您的数据不容易规范化,则实体框架比 LINQ to SQL 更灵活,但配置起来确实需要更多工作。

我们一直在集群环境中试验 LINQ,它似乎在单个计算机上和整个集群上都能很好地扩展。在您提供的 3 个选项中,我认为 LINQ 是更好的选择,尽管每个选项的目标受众略有不同,因此您应该在决定访问范例之前定义将如何处理数据。

我建议使用 linq。它在我们的网站上扩展良好,并且使用起来很简单。

将存储过程与 LINQ 结合使用...但不要让存储过程变成数据访问层!

这篇文章是 2008 年云真正起飞之前的文章。看来需要更新答案了。我将仅提供一些链接和概述。我确信此网站上有更多关于此主题的最新帖子,如果我找到它们,那么我将在此处添加链接。

说到数据可扩展性和事务处理可扩展性,2017年我们需要谈论云和云服务提供商。

我认为目前排名前三的云提供商是:

成本

使用云服务的好处之一是没有前期成本,没有终止费,并且您只需为使用的内容付费。(引用Alba先生2016年的文章《AWS、Google Cloud 和 Azure 的并列比较")

我们自己使用AWS。我们仅在安装并运行虚拟机时付费,因此这是一种廉价的启动方式。通常,服务提供商按分钟或按小时收费,但保证您在整个时间内都可以使用。

一种更便宜的方法是尽力而为现货定价。Spot 价格代表您必须出价高于该价格才能保证满足单个 Spot 请求的价格。当您的出价高于 Spot 价格时,Amazon EC2 会启动您的 Spot 实例,而当 Spot 价格高于您的出价时,Amazon EC2 会终止您的 Spot 实例。(无耻地引用亚马逊的用户指南 这里)

AWS、Google Cloud 和 Azure 的并列比较 是一篇很好的文章,对这三个可用的服务提供商进行了并排比较 这里.

要对云服务进行更学术的了解,请阅读 Yu、Wang、Ren 和 Lou 于 2010 年发表的论文“在云计算中实现安全、可扩展、细粒度的数据访问控制" 在 INFOCOM 2010 会议记录中可用 这里, ,但您可能需要成为 IEEE 会员才能访问它。虽然它有点过时,但它非常出色,您可以将其用作起点。

云中的扩展一直呈爆炸式增长,直到最近,扩展都是通过启动新的虚拟机来完成的,这需要几秒钟的时间,但使用容器可以在几毫秒内启动新实例。有关这方面的更多信息,请查看 Docker 和 Docker 容器 这里.

我很抱歉这个答案只是一堆获取更多信息的链接,但我认为这个问题的答案应该有更新。我希望这能激励有人提供更多第一手细节。如果您已经发布了一些相关信息,请考虑提供指向您自己的帖子的链接。谢谢!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top