EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

《NoSQL 精粹》第九章-文档数据库

何为文档数据库

特性

适用案例

事件记录

在企业级解决方案中,许多不同的应用程序都需要记录事件。应用程序对事件记录各有需求。

文档数据库可以把所有这些不同类型的事件都存起来,并作为事件存储的中心数据库(central data store)使用。

如果事件捕获的数据类型一直在变,那么就更应该用文档数据库了。

可以按照触发事件的应用程序名分片,也可以按照 order_processed 或 customer_logged 等事件类型分片。

内容管理系统及博客平台

由于文档数据库没有预设模式(predefined schema),而且通常支持 JSON 文档,所以它们很适合用在内容管理系统(content management system)及网站发布程序上,也可以用来管理用户评论、用户注册、用户配置和面向 Web 文档(web-facing document)。

网站分析与实时分析

文档数据库可存储实时分析数据。由于可以只更新部分文档内容,所以用它来存储页面浏览量(page view)或独立访客数(unique visitor)会非常方便,而且无需改变模式即可新增度量标准。

电子商务应用程序

电子商务类应用程序通常需要较为灵活的模式,以存储产品和订单。同时,它们也需要在不做高成本数据库重构及数据迁移的前提下进化其数据模型。

不适用场合

包含多项操作的复杂事务

文档数据库也许不适合执行跨文档的原子操作(atomic cross-document operation),虽然像 RavenDB 等文档数据库其实也支持此类操作。

查询持续变化的聚合结构

灵活的模式意味着数据库对模式不施加任何限制。数据以应用程序实体(application entity)的形式存储。

如果要即时查询这些持续改变的实体,那么所用的查询命令也得不停变化(用关系型数据库的术语讲,就是:用 JOIN 语句将数据表按查询标准连接起来时,待连接的表一直在变)。

由于数据保存在聚合中,所以假如聚合的设计持续变动,那么就需要以最低级别的粒度(lowest level of granularity)来保存聚合了,这实际上就等于要统一数据格式了。在这种情况下,文档数据库也许不合适。