在我的一个流程中,这个 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/