Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何从完整的SQL查询转变为类似NoSQL的查询?_Sql Server 2005_.net 3.5_Nosql - Fatal编程技术网

Sql server 2005 如何从完整的SQL查询转变为类似NoSQL的查询?

Sql server 2005 如何从完整的SQL查询转变为类似NoSQL的查询?,sql-server-2005,.net-3.5,nosql,Sql Server 2005,.net 3.5,Nosql,在我的一个过程中,我有一个SQL查询,它占用了总执行时间的10-20%。此SQL查询对我的数据库进行筛选,并加载PricingGrid对象的列表。 所以我想提高这些性能。 到目前为止,我猜有两种解决方案: 使用NoSQL解决方案,这些都是改进阅读过程的好解决方案 但是迁移似乎很困难,需要做很多工作(比如定期将数据从sql server导入nosql) 我没有任何知识,我甚至不知道我应该使用哪一个(我首先使用的是Ravendb,因为我遵循ayende,它是由.net社区完成的) 我的模型中可能有

在我的一个过程中,我有一个SQL查询,它占用了总执行时间的10-20%。此SQL查询对我的数据库进行筛选,并加载PricingGrid对象的列表。 所以我想提高这些性能。 到目前为止,我猜有两种解决方案:

使用NoSQL解决方案,这些都是改进阅读过程的好解决方案

  • 但是迁移似乎很困难,需要做很多工作(比如定期将数据从sql server导入nosql)
  • 我没有任何知识,我甚至不知道我应该使用哪一个(我首先使用的是Ravendb,因为我遵循ayende,它是由.net社区完成的)
  • 我的模型中可能有一些东西需要修改,以使我的对象适合nosql数据库
在内存中加载所有PricingGrid对象(在静态IEnumerable中)

  • 当我的服务器没有足够的内存来加载所有内容时,这可能是一个问题
  • 我可能会重新发明NoSQL提供者发明的轮子(索引…)
我想我不是第一个想到这一点的人,那么什么是最好的解决方案呢?有什么工具可以帮我吗


.net 3.5、SQL Server 2005、windows Server 2005从SQL迁移数据只是第一步。 移动到文档存储(如RavenDB或MongoDB)也意味着您需要:

  • 对数据进行非规范化处理
  • 在代码中执行模式验证
  • 处理代码中复杂操作的并发性,因为您不再有事务(至少不是以相同的方式)
  • 在部分提交(更改)的情况下执行回滚
  • 根据您的更新、读取和网络模型,您可能还需要处理冲突
您提供的信息非常有限,但听起来您的需要包括一个数据库服务器,并且您的数据非常适合关系模型

在这种情况下,我会投票反对NoSQL解决方案,更可能的是,您可以通过数据库优化来加快查询速度,并且仍然保留RDBMS的所有附加值

非关系数据库是用于特定工作的工具(无论它们是如何销售的),如果您需要它们,通常是因为您的数据不适合关系模型,或者您需要在多台机器上分发数据(大小或可用性)。例如,我将MongoDB用于写密集型高吞吐量作业管理应用程序。它是集中式的,数据是非常短暂的,因此具有低耐久性的“成本”是可以接受的。这听起来不像是你的情况

如果您更喜欢使用NoSQL解决方案,也许您应该尝试使用(InnoDB),这将允许您获得内存缓存(以memcached守护程序插件的形式)的速度优势,以及RDBMS(MySQL)的底层保护和功能。它还应该简化数据迁移,并在一定程度上减少代码中所需的更改量。
我本人从未使用过它,我发现出于上述原因我需要NoSQL,或者我可以使用存储过程、索引和表视图以满足我的需要的方式优化RDBMS。

Asaf提供了有关NoSQL使用以及何时最合适的大量信息。考虑到您主要关心的是性能,我倾向于同意他的观点——采用一个全新(而且非常不同)的数据持久化平台比欺骗您的SQL Server集群要花更多的时间和精力。也就是说,我的回答主要是针对你问题的“如何”部分

消除误解:
  • 数据反规范化-无需手动反规范化现有数据。这将在迁移完后为您完成。您需要做的最简单的事情是根聚合、实体和值类型等

  • 并发/事务事务在Mongo和Raven中都是可能的,它们只是以不同的方式完成。Raven实现这一点的一种固有方式是在其
    RavenSession
    对象中使用类似ORM的“工作单元”模式。是的,您的数据验证需要在代码中完成,但无论如何您都应该在代码中完成。根据我的经验,这是一个过度炒作的骗局

  • 怎样:
  • 在主服务器上安装Raven或Mongo,并将其作为服务运行

  • 创建或扩展使用要移植的数据库的现有应用程序。此应用程序需要SQL数据库为其提供持久性的所有模型类/库

    a。在“数据层”中,您可能在某个地方有一个存储库类。从中提取一个接口,并使用它为Raven/Mongo持久性构建另一个存储库类。两个数据库都有很多很好的文档,可以使用它们的API来推/拉/更新文档图中的更改。很简单

    b。将SQL数据加载到内存中的C#对象中。拉回顶级对象(仅实体)并将其内部集合和相关数据加载到内存中。您的存储库可能已经在执行此操作(例如,在获取
    订单
    对象时,不仅要确保其属性,还要确保相关集合(如
    项目
    )加载到内存中

    c、 实例化Raven/Mongo存储库并将数据推送到其中。主要实体成为JSON序列化的“顶级文档”或“根聚合”,其集合的数据嵌套在其中。保存更改并关闭存储库。注意:您可以根据数据需要将此步骤分解为多个小部分

  • 一旦您的数据被迁移,就可以使用它并确保您满意。您可能需要稍微修改一下您的应用程序模型,以调整它们持久化到Raven/Mongo的方式-例如,您可能需要创建
    订单
    项目
    顶级文档