对于NoSQL数据库来说,无模式意味着什么?

时间:2013-03-23 16:33:43

标签: nosql schema

Schemaless是一个目前在NoSql世界中浮现的术语。

  1. 这是什么意思?
  2. 我今天有一个包含3个属性的文档,然后我开始使用它,然后当我需要在文档中添加2个属性时,我的数据会发生什么变化?
  3. 这纯粹是一个迁移问题,我需要管理我的数据迁移,或者NoSql数据库是否可以创建与RDBMS一样多的摩擦,或者在某些方面使它更容易?

2 个答案:

答案 0 :(得分:21)

Schema-less有点用词不当,最好把它想象成:

  • SQL =由写入时的RDBMS强制执行的架构
  • NoSQL = DBMS在Write上强制执行的部分架构,PLUS架构由Read on Application(外部化)完全强制执行 模式)

因此,虽然假设无Schema的NoSQL数据存储理论上允许您在不事先了解密钥或数据类型的情况下存储您喜欢的任何数据(通常是文档中的键值对),但它将毫无意义除非你有一些机制来检索和使用数据。基本上,模式部分地从RDBMS移动到应用程序代码中。我部分地说,因为您已经为文档集合添加了索引,或者为了性能而对数据进行了分区,因此NoSQL DBMS将在本地定义部分模式,并且可能通过Unique约束强制执行。

为商店中的文档/对象添加其他属性。根据文档周围的填充量(未使用的空间),在其物理数据块中,向文档添加更多键值对可能导致文档必须物理移动到更大的连续存储块,并重建相关的索引。如果您打算在经常使用的查询中使用新密钥,那么您还需要添加一个合适的新索引,这显然需要一些物理存储,需要一段时间才能进行初始构建,并可能导致您要求系统管理员为DBMS分配更多内存,以允许缓存新索引。

答案 1 :(得分:2)

当天晚些时候,但在重新搜索主题时,我发现了这篇文章

http://tech.pro/tutorial/1189/basics-of-ravendb-nosql

请参阅文章中的第3部分,为了方便,我将再次引用它。

  

向RavenDB添加和更改数据模型再简单不过了。以来   它是一个NoSQL数据库,它可以处理你的添加和删除   模型非常简单。如果某个属性已添加到您的班级,则会是   设置为该类型的默认值。如果属性被删除,那么   在反序列化时,该值将被忽略。没有更多的东西了   SQL脚本。

这似乎是RavenDB的合理答案。