我们最近在当前的SQL Server数据库中遇到了与性能相关的主要问题。 我们的应用程序在单个表上非常繁重,我们进行了一些分析,大约90%的数据库数据都在一个表中。我们在此表上运行了大量查询以用于分析目的,我们现在遇到了主要的性能问题,即使添加单个列有时会减慢我们当前的Sp。我们的大多数团队都是开发人员,我们无法访问dba,这可能有助于重新调整我们当前的数据库并使工作更快。
这些约束的原因我们正考虑将应用程序的这一部分移动到NoSQL数据库。 我的问题是:
答案 0 :(得分:7)
问题:
1 ..如果这是正确的方向我们正在前进?正如我们期待这张桌子呈指数级增长。随着大量分析在其上运行。
是的,大多数noSQL系统是专门为解决可扩展性和可用性而开发的,如果你以预期的方式使用它们。
2 ..对于我们CouchDB,Cassandra,MongoDB来说哪个是最佳选择?强调可扩展性和性能
这完全取决于您的数据是什么样的,以及您将如何使用它。您提到的noSQL数据库已经实现并且行为彼此之间存在很大差异,请参阅此链接以获得比较您提到的少数几个更详细的概述。 Comparisons of noSQL solution
3 ..对于类似于SQL的实时分析和支持,如何在NoSQL中工作,我们可以通过它查看存储的当前数据吗?我曾经读过有关Hadoop的HIVE可以用来编写和检索数据的数据,因为来自NoSQL db的SQL是对的吗?
这取决于您使用的系统,因为某些noSQL数据库不支持范围查询或连接,您可以查看的内容以及查看速度受限制。
4 ..从SQL转移到NoSQL时,我们会失去什么?
noSQL有两个主要考虑因素:
查询/结构: NoSQL意味着没有SQL。如果您的系统实际上需要结构化和复杂的查询,但是您使用了这些很酷的新解决方案之一(尤其是键值存储,这基本上是一个巨大的哈希表),您很快就会发现自己处于重新实现业余的过程中,设计不合理的RDBMS,包含所有原始问题。
一致性:如果您选择最终一致的系统来横向扩展,那么您将不得不接受过时的数据,这可能对某些应用程序(论坛?)无害或者其他一些应用程序可怕系统(银行)。
答案 1 :(得分:2)
我认为你应该保持关系并调整表,它的索引以及它加入的表。您还应该考虑使用聚合(汇总数据)。也许更加非规范化的设计可以帮助甚至将数据重新设计成更多的星形结构。此外,不应在相同的表格上运行操作处理和决策支持(或报告)分析。
答案 2 :(得分:1)
可以通过检查缺失索引等来改进SQL方法,并查看您使用的隔离级别是否最佳。可以使用快照隔离等来提高性能。 MSDN link
同时阅读OLTP与OLAP。
NoSQL可能仍然是一个更好的选择,但你仍然需要学习如何正确使用数据库,它会带来另一组不同的问题。