使用NoSQL数据库替代SQL Server

3
我正在开发一个网站(如果成功的话)它将拥有一个快速增长的数据库(可能达到几个TB或更多)。到目前为止,我一直使用SQL Server,并不知道任何关于NoSQL的信息。
最近我了解到了NoSQL,并进行了关于数据库大小的研究,现在我不确定它是否能够满足我的需求。我是否可以像使用SQL Server时一样拥有相同的功能?
作为NoSQL新手,我的问题可能看起来很愚蠢,但我只是想知道它是否支持SQL查询。如果不支持,我们该如何做类似这样的操作:
select *, (select name from cities where id = cityid) from users

如何连接表格?使用类似于存储过程、视图或类似的方法吗?
2个回答

6
那是一个很大的问题。NoSQL是一个广泛的术语,用于描述一堆非关系型数据存储。它们可以从MongoDB、RavenDB(这些都是文档存储)到Redis和其他变体的键/值存储等各种形式。它们的操作方式与SQL关系模型(以及相应的T-SQL)非常不同。
像Mongo或Raven这样的文档数据库通常有一个C#驱动程序,允许您在数据存储区域使用LinQ查询(例如,在此线程上的Mongo示例和RavenDB示例)。它们都是特定于其引擎的,并且不同。
所有这些引擎都不是专门设计来解决您所描述的“空间”问题,而是尝试以快速的方式低摩擦地与数据存储区互动。当向其投入大量数据时,所有这些数据存储区仍然会像SQL一样增长。 SQL Server将处理大型数据库,大多数文档存储区和其他NoSQL变体也将如此。老实说,我比较信任SQL Server而不是较新的NoSQL存储区,因为它已经经过了长时间的现场测试,但正如已经说明的那样,这些文档存储区(以及其他存储区,如Apache Cassandra)都可以处理大量数据。我的唯一建议是看看您想要查询数据的方式。文档存储通常没有关系完整性的概念,例如外键,因此规范化规则不适用。此外,您需要评估自己的报告需求,因为SQL在这个领域通常具有更多的工具。您还可以选择使用SQL来处理关系型数据,并使用文档存储来处理其他对象blob等。
我建议首先研究您想要访问数据的方式,然后评估哪种最适合您的需求。还要注意的一件事是,SQL具有一些很棒的功能,但通常仅在企业版本中提供。这需要花费很多钱。文档数据库往往比授权费用低得多,有些甚至是免费的,许多公司提供托管服务,因此无需担心这个问题。最后,如果选择SQL,则建议从一开始就研究分片方法,因为您将处理的数据量很大,这将使其更易于管理,并且还可以提高查询性能。

是的,基本上我和你有同感,在工作中,我们使用混合系统,而真正重要的数据则会被写入SQL。 - Mark Walsh

0
我使用过MongoDB。我建议在Mongolabs上注册一个沙盒账户并尝试使用它。此外,还有一个非常好的C#驱动程序可供使用。NoSql不是真正的关系型数据库,尽管您可以通过ID关联文档。在您的示例中,您将存储一组城市(如果我清楚地阅读了您的示例)与用户文档相关联,并查询该文档或反之亦然。由于存储问题不再像以前那样重要,因此数据重复的问题较少。我使用JavaScript编写我的脚本(相当于存储过程),并直接对Mongo运行它,这非常灵活和强大。当然,如果您有大量相关对象,也许关系型数据库是您最好的选择。

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