10

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

林克

我们应该使用 Linq 吗?这当然看起来很容易,但如果你知道你的 SQL 确实有帮助。另外我听说您不能使用 Linq 在 ASP.NET 中运行异步查询。因此我想知道它是否真的可扩展?有没有使用 Linq 的非常大的网站(stackoverflow 可能除外)。

实体框架

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

阿斯托利亚/动态数据

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

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

4

9 回答 9

17

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

于 2008-09-16T04:06:34.280 回答
15

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

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

于 2008-09-15T23:10:56.440 回答
4

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

如果您禁用对数据库的所有读/写访问,除了通过存储过程,您可以将数据模型隐藏在定义良好的合同后面。数据模型可以自由更改,因此存储过程仍然尊重它们的输入和输出。

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

于 2008-09-15T23:14:01.537 回答
4

这些天来,锁定存储过程似乎是一种正在减弱的思维方式,至少这是我目前的观察。这种思维方式确实适用于 ORM 世界,因为它们通常更有效地直接对抗表,但任何值得他们盐分的 ORM 也将允许使用 procs——有时你别无选择。

关于 EF 有很多意见,不管别人怎么说,好或坏,它是 V1 产品,根据经验,MS 需要大约 3 转才能让它正确,等待下一个转至少。

似乎这个领域最大的参与者是 NHibernate,社区对此有很多支持。语言特性 Linq 在进入 NHibernate 堆栈方面应该不会太远。

于 2008-09-17T04:34:47.637 回答
1

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

于 2008-09-15T23:11:30.637 回答
1

我们一直在集群环境中试验 LINQ,它似乎在单个机器和整个集群上都可以很好地扩展。在您提供的 3 个选项中,我会说 LINQ 是更好的选择,尽管每个选项的目标受众略有不同,因此您应该在决定访问范式之前定义您将对数据执行的操作。

于 2008-09-15T23:13:27.620 回答
1

我会建议linq。它在我们的网站上可以很好地扩展,并且使用起来非常简单。

于 2008-09-16T00:17:00.043 回答
1

使用带有 LINQ 的存储过程......但不要让存储过程变成数据访问层!

于 2008-09-16T00:25:21.397 回答
0

这篇文章来自 2008 年,当时云还没有真正起飞。似乎需要更新答案。我将仅提供一些链接和概述。我相信这个网站上有更多关于这个主题的最新帖子,如果我找到它们,我会在这里添加链接。

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

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

成本

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

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

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

A Side-by-Side Comparison of AWS、Google Cloud 和 Azure是一篇很好的文章,对这三个可用的服务提供商进行了并排比较。

有关云服务的更多学术观点,请阅读 Yu、Wang、Ren 和 Lou的 2010 年论文“在云计算中实现安全、可扩展和细粒度的数据访问控制” ,在此处提供的 INFOCOM 2010 论文集中,但您可以需要成为 IEEE 成员才能访问它。虽然它有些过时,但它非常出色,您可以将其用作起点。

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

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

于 2017-03-09T07:50:55.153 回答