我正在开发一个网站(如果成功的话)它将拥有一个快速增长的数据库(可能是太字节或更多)。到目前为止我一直使用sql server并且对nosql一无所知。 我刚刚发现nosql正在研究数据库大小,现在我不确定它是否能满足我的需求。我将拥有与sql-server相同的功能吗?
我的问题可能看起来很傻,因为我是nosql的新手,但我只是想知道它是否不支持sql查询。我们怎样才能做到:
select *, (select name from cities where id = cityid) from users
如何加入表格?使用类似存储过程,视图或类似的东西?
答案 0 :(得分:6)
这是个大问题。 NoSQL是一个广泛的术语,几乎用于描述一堆非关系数据存储。它们的范围可以从MongoDB,RavenDB(文档存储)到Redis和其他键/值存储变体。它们的运行方式与SQL关系模型(以及生成的T-SQL)完全不同。
像Mongo或Raven这样的文档数据库通常有一个C#驱动程序(在大多数情况下)允许您在数据存储区中使用LinQ查询(Mongo示例on this thread和RavenDB示例on their documentation page)。它们都是针对它们的引擎而不同的。
所有这些引擎并非专门用于解决您所描述的“空间”问题,而是尝试以低速摩擦方式与数据存储区进行快速交互。所有这些数据存储的大小仍将与SQL在向其投入大量数据时的大小相同。 SQL Server将处理大量数据库,大多数文档存储和其他NoSQL变体也是如此。说实话,我相信SQL Server比新的NoSQL存储更多,因为它已经过现场测试更长时间,但是如前所述,这些文档存储(以及Apache Cassandra等其他存储)都可以处理大量数据。我唯一的建议是看看你想如何查询数据。文档存储通常没有关系完整性的概念,如foriegn键,因此规范化规则不适用。此外,您需要评估您的报告需求,因为SQL通常在此领域具有更多工具的优势。您还可以选择使用SQL作为关系数据的混合方法,以及其他对象blob等的文档存储。
我建议您先查看如何访问数据,然后评估哪一种最适合您的需求。有一点需要注意的是,SQL有一些很棒的功能,但通常只在企业版本中。这花费了很多。文档数据库的许可费用往往较低,有些是免费的,许多公司提供托管服务,因此无需担心这一点。最后,如果使用SQL,我建议从一开始就研究分片方法,因为这将使您处理的数据量更多,这将使其更易于管理,并且还可以提高查询性能。
答案 1 :(得分:0)
我使用了MongoDB很多。我建议在Mongolabs上注册沙盒帐户并玩弄它。它也有一个出色的C#驱动程序。尽管您可以通过ID关联文档,但NoSql并不是真正的关系。在您的示例中,您将针对用户文档存储一系列城市(如果我正在清楚地阅读您的示例)并查询该信息,反之亦然。对数据重复的关注较少,因为存储问题并不像以前那么重要。我使用JavaScript编写我的脚本(平均存储过程)并直接针对Mongo运行它,它非常灵活和强大。当然,如果你有大量的相关对象,也许关系数据库是你最好的选择。