Sql server 从LINQ迁移到SQL再迁移到DocumentDB的好方法是什么?

Sql server 从LINQ迁移到SQL再迁移到DocumentDB的好方法是什么?,sql-server,azure,linq-to-sql,database-migration,azure-cosmosdb,Sql Server,Azure,Linq To Sql,Database Migration,Azure Cosmosdb,首先,介绍一下我们的情况。几年前,我启动了一个ASP.NETMVC项目,使用LINQtoSQL作为DAL。作为当时项目中唯一的开发人员,我选择使用它,因为它在社区中得到了很好的支持,我需要更多地关注应用程序逻辑和UI设计,以便将其推向市场。这一策略对我们很有效 不过,没过多久,我就需要在Windows服务中针对同一数据存储编写一些多线程代码。LINQtoSQL遇到了各种交叉线程的问题。当时我仍然是唯一的开发人员,需要快速启动这项服务,我使用POCOs和企业库复制了足够多的DAL和模型。虽然不是具

首先,介绍一下我们的情况。几年前,我启动了一个ASP.NETMVC项目,使用LINQtoSQL作为DAL。作为当时项目中唯一的开发人员,我选择使用它,因为它在社区中得到了很好的支持,我需要更多地关注应用程序逻辑和UI设计,以便将其推向市场。这一策略对我们很有效

不过,没过多久,我就需要在Windows服务中针对同一数据存储编写一些多线程代码。LINQtoSQL遇到了各种交叉线程的问题。当时我仍然是唯一的开发人员,需要快速启动这项服务,我使用POCOs和企业库复制了足够多的DAL和模型。虽然不是具有重复模型和DAL功能的理想体系结构,但它工作得很好,让我顺利通过了测试

那是五年前的事了。我们已经成功地完成了我们的项目,现在这种成功不是LINQ或Enterprise Library的责任,而是SQL本身的责任。现在,在有人建议我们对SQL数据库进行索引和所有这些方面的彻底检查之前,我们已经做到了这一点。我们在合同上增加了一个DBA,他为我们解决了这个问题。性能恢复,一切正常。但问题是(在我们看来)对于我们的业务模型和需求来说,它需要太频繁的维护

谢天谢地,微软已经通过Azure服务加强了他们的游戏。我们特别感兴趣的是DocumentDB(我们现在有两个开发人员)。在SQL中,我们有几个大的、扁平的、繁忙的表,当我们开始接近DB维护的需要时,这些表会给应用程序的某些领域带来严重的性能问题。我们根本没有资源用于日常维护。我们决定将应用程序部分或全部移动到DocumentDB。一些概念验证演示在内部告诉我们,对于我们现有的应用程序类型来说,这是一个很好的举措

如果你已经读到这里,谢谢,这是我的问题。将LINQ迁移到SQL类并将生成的逻辑迁移到DocumentDB支持的DAL中的好方法是什么?谢天谢地,我很早就预见到要使用IRepository方法,这样应用程序本身就不会受到影响,但愿不会受到影响。我最关心的是LINQtoSQL设计图面为我编写的所有“神奇”积垢。我和我的另一位开发人员当然了解如何编写我们自己的DAL代码,但我们需要一种快速而一致的方法,该方法考虑到应用程序在LINQ to SQL支持下的预期行为


我的直觉是基本上释放五年前LinqtoSQL为我生成的所有代码,并将其从LinqtoSQL设计器中分离出来,通过DI添加我们自己的DAL并从那里开始。我的另一个开发人员在这方面比我更先进,所以我有相当大的信心我们可以完成它。只是希望有人能帮助我们避免陷阱,这样我们才能有效地完成这项工作。

正如大卫·马科贡(David Makogon)在评论中指出的那样,这个问题确实没有“正确”的答案,因为它涉及面很广,而且基于观点。我得到了广泛的建议,但我认为没有什么明确的答案。

我还应该补充一下,我关心的是如何维护LINQ-SQL在实体之间保持的关系。关于LINQtoSQL,我非常喜欢的一点是,您可以依赖于在数据上下文中跟踪的父子关系。在应用程序中,您可以轻松地添加、删除或更改子实体,调用单个更新方法,并且所有这些关系都不会受到任何麻烦,代码也不会太少。理想情况下,这是我们希望保留在DocumentDB DAL中的行为。如果您一直在使用RDBMS和ORM功能,您会发现迁移接近于重写。DocumentDB并没有为您提供一种高效地替换许多RDBMS查询的方法。例如,您不能将连接推送到数据库(DocDB只有相同的文档连接AFAIK)。因此,现有的IRepository抽象对您没有多大帮助。此外,我会质疑是否需要切换到DocDB,因为您从中获得的功能和性能更少。相反,要简化数据库的使用并解决问题。通常,人们转向NoSQL并声称性能有所提高。但真正改进性能的是RDBMS也会提供的一个更简单的数据模型。是的,我也考虑了这一影响,我相信它在一定程度上会被证明。然而,我们的合同DBA在数据库级别上对主要故障区域的SQL进行了监控,并在应用程序明显存在故障的5个区域中只发现了1个。一旦他优化并重建了索引,应用程序就会像第一天一样飞起来。至于接近重写,我认为你的评论是对的。这就是我所感觉到的,这就是为什么我想在我们深入研究之前把它扔出去仔细检查。