关于.net:关于可伸缩性的最佳数据访问范例是什么?

关于.net:关于可伸缩性的最佳数据访问范例是什么?

What is the best data access paradigm for scalability?

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

林克

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

实体框架

没有听到太多关于实体框架的喧闹声。 似乎更接近我熟悉的对象模型。

Astoria /动态数据

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

在进入诸如NHibernate之类的其他ORM产品之前,我非常困惑。 任何想法或智慧哪个更好?


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


我认为ADO.Net数据服务(以前称为Astoria)可以发挥巨大作用。它非常适合Web的REST样式体系结构。

由于网络是可扩展的,因此我认为遵循其架构的任何事物也都可以扩展。
另外,您可能想留意SQL Server数据服务。


如今,锁定存储过程似乎是一种逐渐消失的思维方式,至少这是我目前的观察。这种思维方式确实适合ORM世界,因为它们通常更直接地与表对抗,但任何有价值的ORM也会允许使用procs-有时您别无选择。

围绕EF的观点很多,不管有人说什么好坏,它都是V1产品,并且凭经验法则,MS大约需要3转才能使其正确运行,因此,谨慎地等待下一次转最小。

在这个领域,最大的参与者似乎是NHibernate,并且在社区中对此有很多支持。语言功能Linq进入NHibernate堆栈不应太遥远。


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

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

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


在LINQ上使用存储过程...但是不要让存储过程变成数据访问层!


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


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


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


这篇文章来自云真正起飞之前的2008年。似乎需要对答案进行更新。我将只提供一些链接和概述。我确信此站点上有更多关于此主题的最新帖子,如果找到它们,则将在此处添加链接。

在数据可伸缩性和事务处理可伸缩性方面,2017年我们需要谈论云和云服务提供商。

我认为这些天排名前三的云提供商是:

  • 亚马逊网络服务(AWS)
  • Google的云平台(GCP)
  • 微软Azure

成本

使用云服务的一大好处是,无需支付前期费用,无终止费,您只需为使用的内容付费。 (引用Alba先生在2016年发表的文章" AWS,Google Cloud和Azure的并排比较")

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

最便宜的方式是尽力而为的现货定价。竞价价格表示您必须出价才能保证满足一个竞价请求的价格。当您的买入价高于竞价时,Amazon EC2将启动您的竞价型实例,并且当现货价格升至高于您的竞价时,Amazon EC2将终止您的竞价型实例。 (在此毫不客气地引用《亚马逊用户指南》)

AWS,Google Cloud和Azure的并行比较是一篇不错的文章,对此处提供的这三个服务提供商进行了并行比较。

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

云中的扩展一直在爆炸式增长,直到最近,这种扩展是通过启动新的虚拟机来完成的,而这需要花费几秒钟的时间,但是有了Containers,一个人就可以在几毫秒内启动新实例。有关此的更多信息,请在此处查看Docker和Docker容器。

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


推荐阅读