NoSQL:文档数据库

“文档”是文档数据库中的主要概念。此类数据库可存放并获取文档,其格式可以是XML、JSON、BSON等,这些文档具备可述性(self-describing),呈现分层的树状结构(hierarchical tree data structure),可以包含映射表、集合和纯量值。数据库中的文档彼此相似,但不必完全相同。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。文档数据库可视为其值可查的键值数据库。(参考:键值数据库)

下表是关系型数据库Oracle和文档数据库MongoDB的术语对比:

Oracle MongoDB
数据库实例(database instance) MongoDB实例(MongoDB instance)
模式(schema) 数据库(database)
表(table) 集合(collection)
行(row) 文档(document)
伪列(rowid) _id
join DBRef

什么是文档数据库

文档数据库中的各个文档的“数据模式”(the schema of the data)也许不同,但是他们仍然能放在同一“集合”内,而不是像关系型数据库那样,表格中每行数据的模式都要相同。

向文档中新增属性时,既无需预先定义,也不用修改已有文档内容。


文档数据库特性

  • 一致性:开发者可以根据应用程序需要和业务需求,为每次操作指定数据库的“一致性”强度,以决定读取操作应该使用何种slaveOk设置,并通过WriteConcern设置写入操作的安全级别。
  • 事务:支持单文档级别的事务,也可以使用“仲裁”这一概念来实现事务功能。(参考:NosQL分布式模型:仲裁)
  • 可用性:文档数据库视图用主从数据复制技术来增强可用性。可以使用三活数据中心架构。(参考:三活数据中心)
  • 查询:可以使用视图查询,可用“物化视图”。文档数据库可以查询文档中的数据,而不用必须根据关键字获取整个文档。
  • 可扩展性:可用“分片”技术。(参考:NosQL分布式模型:分片)

适用案例

  • 事件记录,应用程序对事件记录各有需求。
  • 内容管理系统及博客平台,用来管理用户评论、用户注册、用户配置和面向Web文档(web-facing document)。
  • 网站分析与实时分析,用来存储“页面浏览量”(page view)或“独立访客数”(unique visitor)会非常方便,而且可以无需改变模式即可新增度量标准。
  • 电子商务应用程序,以存储产品和订单。

不适用案例

  • 包含多项操作的复杂事务。文档数据库不适合执行“跨文档的原子操作”(atomic cross-document operation)。
  • 查询持续变化的聚合结构。虽然文档数据库对模式不施加任何限制,但是如果要即时查询这些持续可变的实体,那么所用的查询命令也要不断变化,所以就需要以“最低级别的粒度”(lowest level of granularity)来保存聚合了,这实际上就等于要统一数据格式了。在这种情况下,文档数据库并不适合。

想了解更多关于NoSQL数据库:NoSQL数据库专栏

你可能感兴趣的:(数据库,NoSQL)