NoSQL如何正确扩展?

时间:2013-03-31 02:38:46

标签: sql nosql scalability

我使用SQL Server 2012.我有一个按用户ID分层的物理层数据库。在我的应用程序中,用户是一个聚合根(即,没有关于用户来自或进入我的存储库而没有整个用户进入或离开)。关于一个特定用户的所有内容都存在于一台特定的计算机上。

我的系统的可扩展性是否低于使用NoSQL的系统?或者,有人可以解释NoSQL系统如何跨服务器进行精确扩展吗?难道他们不得不以与我正在做的相似的方式进行分类吗?我们都读到NoSQL支持可伸缩性,但目前我还没有看到MongoDB如何使我的架构受益。

1 个答案:

答案 0 :(得分:2)

MongoDB允许您scale in two waysshardingreplication。我认为你可以在MS SQL Server中同时做到这两点。

通常不同的是数据模型:

  • 在关系数据库中,您通常有多个相互引用的表。从理论上讲,你可以通过使用多个集合来执行与MongoDB类似的操作,但这通常不会像那样。相反,在MongoDB中,您倾向于将所有属于同一集合的数据存储在一起。因此,通常您拥有的数据集少于数据库中的表。这将在很多时候导致更多冗余(数据被复制)。您可以尝试在关系数据库中执行此操作,但这并不是那么容易(会有更少的表,每个表都有更多的列)。

  • MongoDB集合比表更灵活,因为您不需要预先定义数据模型(列/属性的确切列表,数据类型)。这允许您在不必更改表的情况下更改数据模型 - 缺点是您需要在应用程序中考虑这一点(您不能依赖具有相同结构的所有行/文档)。我不确定你是否可以在MS SQL Server中这样做。

  • 在MongoDB中,每个文档都是一个Json对象,因此它是一棵树而不是一张平面表。这允许数据模型具有更大的灵活性。例如,在我正在开发的应用程序(Apache Jackrabbit Oak / MongoMK)中,对于每个属性(列),我们可以存储多个值;每个修订版的一个值。在关系数据库中执行此操作是可能的,但非常棘手。