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

ash*_*ina 24 schema nosql

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

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

aro*_*r11 21

无架构有点用词不当,最好把它想象成:

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

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

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

  • 取决于产品,但通常如果要向文档添加其他属性/键,您只需更改应用程序代码以存储/使用新的键值对.如果不对索引进行索引,DBMS就不关心文档中存储的内容,并假设为每个文档分配了足够的空间,这样DBMS就不必重新构建它的后端. (2认同)