从SQL转向NoSQL,选择哪种数据库?

7
我们目前的SQL Server数据库存在严重的性能问题。我们的应用程序在单个表上非常重,我们进行了一些分析,发现约90%的数据库数据都在单个表中。我们对此表运行大量查询以便于分析,但是我们现在即使在添加单个列时也会遇到严重的性能问题,甚至会拖慢当前SP。我们的大多数团队都是开发人员,我们没有DBA可供使用,他们可以帮助我们重新调整当前的数据库并使事情更快地运行。
因为这些限制,我们考虑将该应用程序的这部分移动到NoSQL数据库中。我的问题是:
  1. 我们是否朝着正确的方向前进?因为我们预计在这个表上会有指数级增长的数据,而且会运行大量的分析。
  2. 哪种选择最适合我们,CouchDB、Cassandra还是MongoDB?重点在于可扩展性和性能。
  3. 对于实时分析和支持,类似于SQL的NoSQL如何工作,是否有一种方法可以查看当前存储的数据?我曾经读过有关Hadoop的HIVE可以用于从NoSQL数据库编写和检索数据的SQL,我是对的吗?
  4. 从SQL转移到NoSQL时可能会失去哪些东西?

这个表有多少行?在尝试读取数据时,您是否正在插入大量行?调整数据库或使用报告数据库等可能比将所有内容更改为NoSQL更容易。此外,您查询的数据需要多新,每条记录有多重要?例如,CouchDB使用“最终一致性”... - Steven
目前只有60000行,但这个数字会非常快速地增加。每个数据对我们来说都非常重要,这是我们应用程序的核心,查询也会很重。但我们可以接受延迟的结果,但不能有不一致性,即希望数据不会改变。这个表格只允许插入和读取操作,不允许更新。无论表格中有什么数据,它们的本质都是静态的。 - Nikshep
2
如果您的60,000行存在性能问题,那么您的SQL设计肯定存在问题。 - Steven
表格有多少列?你在运行什么样的查询? - Omar
60000行没有写入?肯定有问题。您是否创建了索引以优化查询?能否提供一个慢查询的示例? - Marcelo Cantos
显示剩余3条评论
3个回答

7

针对你的问题:

1. 我们是否朝着正确的方向前进?因为我们期望这个表格呈指数增长,有大量的分析运行在上面。

是的,大多数NoSQL系统都是专门开发来解决可扩展性和可用性的问题的,如果你按照预定方式使用它们

2. 对于我们来说,哪种选项最好,CouchDB、Cassandra还是MongoDB?重点在于可扩展性和性能。

这完全取决于你的数据长什么样子以及你将如何使用它。你提到的NoSQL数据库实现和行为非常不同,请参阅此链接以获取更详细的概述:NoSQL解决方案比较

3. 对于实时分析和支持,类似于SQL在NoSQL中的工作方式,我们是否有一种可以查看当前存储数据的设施?我曾经在某个地方读到过Hadoop的HIVE可以用来从NoSQL数据库中编写和检索数据,我是对的吗?

这取决于你选择的系统,因为有些NoSQL数据库不支持范围查询或连接,你受限于你可以查看什么和以多快的速度查看。

4. 在从SQL转向NoSQL时,我们可能会失去哪些东西?

NoSQL有两个主要考虑因素:

查询/结构:NoSQL意味着没有SQL。如果你的系统实际上需要结构化和复杂的查询,但你选择了其中一种新型解决方案(特别是键值存储,它基本上是一个巨大的哈希表),你很快就会发现自己处于重新实现业余设计的RDBMS中,而且还存在所有原来的问题。

一致性:如果你选择最终一致的系统来实现水平扩展,那么你将不得不接受你的数据过时的事实,这对某些应用程序(论坛?)可能是无害的,但对其他系统(银行)可能是可怕的。


3
非常好的回答,我唯一的反对意见是noSQL的意思是Not Only SQL而不是No SQL。 - mvieghofer

2

我认为你应该保持关系型并调整表格、索引以及它连接的表格。你还应该考虑使用聚合(汇总数据)。也许更多的非规范化设计会有所帮助,甚至重新设计数据成为更像星形结构的形式。此外,操作处理和决策支持(或报告)分析不应在同一张表上运行。


1

通过检查缺失的索引等,以及查看您使用的隔离级别是否最优,可能可以改进SQL方法。可能可以使用快照隔离等来提高性能。MSDN链接

还要了解OLTP与OLAP。

NoSQL可能仍然是更好的选择,但您仍需要学习如何正确地使用数据库,它将带来另一组不同的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接