微软提供了许多不同的选项供数据访问。哪一个最适合可扩展的应用程序?
LINQ的
我们应该使用Linq吗?这看起来很容易,但如果你知道你的SQL确实有帮助。另外我听说你不能使用Linq在ASP.NET中运行异步查询。因此,我想知道它是否真的可扩展?是否有任何使用Linq的大型网站(可能除了stackoverflow)。
实体框架
关于实体框架,请不要听到太多关于razzmatazz的内容。似乎更接近我熟悉的对象模型。
Astoria /动态数据
我们应该将我们的数据作为服务公开吗?
在我进入NHibernate之类的其他ORM产品之前,我很困惑。任何想法或智慧哪个更好?
答案 0 :(得分:17)
我会推荐NHibernate或Entity Framework。对于大型网站,我使用ADO.NET数据服务。 LINQ to SQL我不会做任何大事。我认为Stack Overflow最终可能会出现一些有趣的扩展问题,即2层而不是3层,并且随着数据库的物理方面发生变化而这些变化在整个代码中波动,它们也会有一些重构问题。只是一个想法。
答案 1 :(得分:15)
我认为ADO.Net数据服务(以前称为Astoria)可以发挥重要作用。它非常适合网络的REST风格架构。
由于网络可扩展,我想任何跟随其架构的东西都是可扩展的...... 此外,您可能希望留意SQL Server数据服务..
答案 2 :(得分:4)
如果您正在谈论关系数据库,那么我的投票是将所有数据操作封装在存储过程中,无论您如何从其他层访问它们。
如果禁用对数据库的所有读/写访问权限(通过存储过程除外),则可以隐藏明确定义的合同背后的数据模型。数据模型可以自由更改,因此存储过程仍然可以保证其输入和输出。
这使DBA可以完全自由地调整应用程序并使其扩展。当SQL由数据库外部的工具生成时,这是一项非常非常困难的任务。
答案 3 :(得分:4)
现在锁定存储过程似乎是一种渐弱的思维方式,至少这是我目前的观察。这种思维方式确实适用于ORM世界,因为它们通常更直接反对表,但任何值得盐的ORM也允许使用过程 - 有时候你别无选择。
关于EF有很多意见,不论有什么人说,无论好坏,它都是V1产品,并且根据经验,MS需要3转才能做到正确才能谨慎等待至少下一次。
似乎这个领域最大的玩家是NHibernate,社区中有很多支持。 Linq,语言功能,在进入NHibernate堆栈时不应该太远。
答案 4 :(得分:1)
使用适合您的任何东西。如果您已经拥有一个相当规范化的数据库(即主键和外键的良好定义),这些都是最容易设置的。但是,如果您的数据不易于规范化,则实体框架比LINQ to SQL更灵活,但配置需要更多工作。
答案 5 :(得分:1)
我们一直在集群环境中试验LINQ,它似乎在各个机器和整个集群中都能很好地扩展。在您提供的3个选项中,我会说LINQ是更好的选择,尽管每个选项的目标受众略有不同,因此您应该在决定使用范例之前定义您将对数据执行的操作。
答案 6 :(得分:1)
我会建议linq。它在我们的网站上可以很好地扩展,并且很容易使用。
答案 7 :(得分:1)
使用LINQ的存储过程...但不要让sprocs变成数据访问层!
答案 8 :(得分:0)
这篇文章是在云计算真正起飞之前的2008年。似乎需要更新答案。我将提供一些链接和概述。我确信此主题上有更多关于此主题的最新帖子,如果我找到它们,那么我将在此处添加链接。
在数据可扩展性和事务处理可扩展性方面,2017年我们需要谈论云和云服务提供商。
我认为现在排名前三的云提供商是:
<强>费用强>
使用云服务的一个好处是没有前期费用,没有终止费用,而且您只需支付使用的费用。 (引用阿尔巴先生的2016年文章&#34; A Side-by-Side Comparison of AWS, Google Cloud and Azure&#34;)
我们自己使用AWS。我们只在安装和运行虚拟机时付费,因此它可以是一种便宜的启动方式。通常情况下,服务提供商会按分钟或按小时收费,但您可以保证在整个时间内收费。
更便宜的方式是尽力而为的现货定价。现货价格代表您必须出价以保证满足单个竞价请求的价格。当您的出价高于竞价价格时,Amazon EC2会启动您的竞价型实例,当竞价价格高于您的出价时,Amazon EC2会终止您的竞价型实例。 (无耻地引用亚马逊的用户指南here)
A Side-by-Side Comparison of AWS, Google Cloud and Azure是一篇很好的文章,可以对这三种服务提供商here进行并排比较。
有关云服务的更多学术观点,请参阅INFOCOM 2010会议论文Achieving Secure, Scalable, and Fine-grained Data Access Control in Cloud Computing"中的Yu,Wang,Ren和Lou&#34; here的2010年论文,但您可能需要成为IEEE会员以获得访问权限。虽然有点过时,但它非常出色,您可以将它作为跳跃点。
云中的扩展已经爆炸式增长,直到最近,通过启动新的虚拟机来完成扩展,这需要几秒钟,但是使用容器,可以在几毫秒内启动新实例。有关这方面的更多信息,请查看Docker和Docker容器here。
我很抱歉这个答案只是一堆链接以获取更多信息,但我认为这个问题的答案应该有更新。我希望这能激发某人提供更多第一手资料。如果您已经发布了一些相关信息,请考虑提供指向您自己帖子的链接。谢谢!