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

标签 sql-server-2005 .net-3.5 nosql

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

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

  • 但是迁移似乎很困难,需要做很多工作(比如定期将数据从 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 解决方案,也许您应该尝试使用 Memcached+MySQL (InnoDB) 这将允许您获得内存缓存(以 memcached 守护程序插件的形式)的速度优势,以及 RDBMS (MySQL) 的底层保护和功能。它还应该简化数据迁移并在一定程度上减少代码中所需的更改量。 我自己从未使用过它,我发现我要么出于上述原因需要 NoSQL,要么我可以使用存储过程、索引和 TableView 以足以满足我需要的方式优化 RDBMS。

关于sql-server-2005 - 如何从完整的 SQL 查询转变为类似 NoSQL 的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9192250/

相关文章:

sql-server - 表值函数中的顺序错误(保留递归 CTE 的 "order")

sql-server - msdb.dbo.sp_send_dbmail 不在存储过程中执行

sql-server-2005 - 当复制发布者无法连接到订阅者系统时,SQL Server 如何通过电子邮件发送错误消息

c# - 在对象数组中查找

c# - 用户控件的 WPF 布局作为运行

用于存储文件 + 复制的 MongoDB/CouchDB?

angularjs - 我需要什么用于Web服务器开发的NodeJS工具(框架,IDE等)?为什么?

mysql - Gem 允许使用分片 mysql 数据库访问数据,同时保持 Activerecord 的使用

SQL - 简单的 'OR' 不起作用!

sql-server-2005 - 如何将 ILMerge 与 SQL Server 2005 CLR 程序集和 XmlSerializer 一起使用