3

我正在开发的网站(如果成功)将拥有一个快速增长的数据库(可能是 TB 或更多)。到目前为止,我一直使用sql server,对nosql一无所知。我刚刚发现 nosql 正在研究数据库大小,现在我不确定它是否能满足我的需求。我会拥有与使用 sql-server 相同的功能吗?

我的问题可能看起来很愚蠢,因为我是 nosql 的新手,但我只是想知道它是否不支持 sql 查询。我们怎么能做这样的事情:

select *, (select name from cities where id = cityid) from users

如何加入表格?使用存储过程、视图或类似的东西?

4

2 回答 2

6

这是个大问题。NoSQL 是一个广泛的术语,几乎用于描述一堆非关系数据存储。它们的范围从 MongoDB、RavenDB(它们是文档存储)到 Redis 和其他键/值存储变体。它们都与 SQL 关系模型(以及由此产生的 T-SQL)非常不同。

像 Mongo 或 Raven 这样的文档数据库通常有一个 C# 驱动程序,它(在大多数情况下)允许您跨数据存储使用 LinQ 查询(此线程上的 Mongo 示例和其文档页面上的 RavenDB 示例)。它们都特定于它们的引擎并且不同。

所有这些引擎都不是专门为解决您所描述的“空间”问题而设计的,而是尝试以一种低摩擦的方式与数据存储进行快速交互。所有这些数据存储的大小仍将增长,就像 SQL 在向其抛出大量数据时所做的那样。SQL Server 将处理海量数据库,大多数文档存储和其他 NoSQL 变体也是如此。老实说,我比新的 NoSQL 存储更信任 SQL Server,因为它已经过更长时间的现场测试,但是如前所述,这些文档存储(以及 Apache Cassandra 等其他存储)都可以处理大量数据。我唯一的建议是看看你想如何查询数据。文档存储通常没有外键等关系完整性的概念,因此规范化规则不适用。此外,您需要评估您的报告需求,因为 SQL 通常在该领域具有优势,具有更多工具。您还可以选择一种混合方法,将 SQL 用于关系数据,将文档存储用于其他对象 blob 等。

我建议先研究一下您希望如何访问您的数据,然后评估哪一个最适合您的需求。还有一点需要注意的是,SQL 有一些很棒的特性,但通常只在企业版中。这要花很多钱。文档数据库的许可成本往往要低很多,有些是免费的,许多公司提供托管服务,因此您无需担心它。最后,如果使用 SQL,我建议从一开始就考虑分片方法,因为您将要处理的数据量很大,因为这将使其更易于管理,并且还可以提供更好的查询性能。

于 2013-09-12T23:44:56.693 回答
0

我用过很多次MongoDB。我建议在 Mongolabs 上注册一个沙盒帐户并使用它。它也有一个出色的 C# 驱动程序。NoSql 并不是真正的关系型,尽管您可以通过 Id 关联文档。在您的示例中,您将针对用户文档存储一系列城市(如果我正在清楚地阅读您的示例)并查询,反之亦然。对数据重复的担忧减少了,因为存储问题不像以前那么重要。我使用 JavaScript 编写脚本(相当于存储过程)并直接针对 Mongo 运行它,它非常灵活和强大。当然,如果您有大量相关对象,那么关系数据库可能是您最好的选择。

于 2013-09-12T23:33:13.437 回答