代码之家  ›  专栏  ›  技术社区  ›  Leo Moore

什么是可扩展性的最佳数据访问范例?

  •  10
  • Leo Moore  · 技术社区  · 16 年前

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

    林克

    我们应该使用LINQ吗?这看起来很简单,但是如果您知道您的SQL确实有帮助。另外,我听说您不能使用LINQ在ASP.NET中运行异步查询。所以我想知道它是否真的是可扩展的?有没有使用linq的真正大的站点(除了stackoverflow)。

    实体框架

    不要听到那么多关于实体框架的拉兹马塔兹。似乎更接近我熟悉的对象模型。

    Astoria/动态数据

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

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

    9 回复  |  直到 8 年前
        1
  •  17
  •   Scott Hanselman    16 年前

    我建议使用NHibernate或实体框架。对于大型站点,我将使用ADO.NET数据服务。我不会用Linq to SQL做任何大的事情。我认为堆栈溢出可能最终会导致一些有趣的规模问题,即2层而不是3层,而且随着数据库物理方面的变化和这些变化在整个代码中波动,重构它们也会遇到一些困难。只是一个想法。

        2
  •  15
  •   Gulzar Nazim    16 年前

    我认为ADO.NET数据服务(以前称为Astoria)有很大的作用。它非常适合Web的REST风格架构。

    因为Web是可伸缩的,所以我猜遵循其架构的任何东西也可以伸缩。 另外,您可能还需要注意SQL Server数据服务。

        3
  •  4
  •   Eric Z Beard    16 年前

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

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

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

        4
  •  4
  •   MotoWilliams    16 年前

    锁定到存储过程似乎是最近一种衰落的思考方式,至少这是我目前的观察结果。这种思维方式确实适合ORM世界,因为他们通常更喜欢直接与桌子对抗,但任何值得他们盐分的ORM也会允许在你别无选择的时候使用PROC。

    关于英孚有很多意见,不管别人怎么说,不管好坏,它是一个v1产品,根据经验法则,微软需要大约3转,以使它正确,可能是谨慎的等待下一个版本至少。

    在这个领域,似乎最大的玩家是NHibernate,并且在社区中有很多人支持它。语言特性linq在进入nhibernate堆栈时不应该太远。

        5
  •  1
  •   foxxtrot    16 年前

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

        6
  •  1
  •   Guy    16 年前

    我们已经在集群环境中对LINQ进行了试验,它在单个机器和集群中的伸缩性似乎很好。在您提供的3个选项中,我认为Linq是更好的选择,尽管每个选项的目标受众略有不同,因此在决定Acesss范式之前,您应该定义将如何处理数据。

        7
  •  1
  •   narendra.tumkur    16 年前

    我建议Linq。它在我们的网站上具有很好的扩展性,并且使用起来非常简单。

        8
  •  1
  •   Josh    16 年前

    对LINQ使用存储过程…但不要让存储过程变成数据访问层!

        9
  •  0
  •   ScottK    8 年前

    这篇文章是在2008年云真正起飞之前发表的。似乎需要更新答案。我只提供一些链接和概述。我确信这个网站上有更多关于这个主题的最新文章,如果我找到了,我会在这里添加链接。

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

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

    成本

    使用云服务的一个好处是没有预付费用,没有终止费,而且您只为您使用的内容付费。(引用Alba先生2016年的文章) A Side-by-Side Comparison of AWS, Google Cloud and Azure “”

    我们自己使用AWS。我们只在安装和运行了虚拟机的情况下付款,所以这可能是一种廉价的启动方式。通常情况下,服务提供商按分钟或小时收费,但保证您在整个时间内都能享受到。

    一个更便宜的方法是尽最大努力的现货定价。现货价格表示为确保满足单个现货请求而必须投标的价格。当你的出价高于现货价格时,亚马逊EC2会启动你的现货实例,当现货价格高于你的出价时,亚马逊EC2会终止你的现货实例。(无耻地引用了亚马逊的用户指南 here )

    A Side-by-Side Comparison of AWS, Google Cloud and Azure 是否有一篇好文章对这三个服务提供商进行了并列比较? here .

    欲了解更多关于云服务的学术观点,请阅读Yu、Wang、Ren和Lou于2010年发表的论文。” Achieving Secure, Scalable, and Fine-grained Data Access Control in Cloud Computing " 在2010年信息通信会议记录中 here ,但您可能需要成为IEEE成员才能访问它。虽然它有点过时,但它非常好,你可以把它作为一个起点。

    云计算中的扩展一直在爆炸,直到最近,扩展是通过启动新的虚拟机来完成的,这个虚拟机只需几秒钟,但是通过容器,人们可以在几毫秒内启动新的实例。有关更多信息,请查看Docker和Docker容器 here .

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