什么没有 发表于 2015-7-6 09:09:49

Mongodb实战(1)

      我们知道Mongodb是不支持事务操作的,而传统的关系数据库中多表的事务处理是很平常的事,因此在从关系数据库向mongodb的转换过程中就需要转换思路,重新设计你的数据模型。现有一个项目,需求是对内部局域网里的计算机进行管理,实现对主机的监控和日常操作的审计。项目组刚开始选择的数据库是mongodb,但在设计数据模型时,还是按照传统的关系数据库的思维方式,结果就遇到了多个collection的原子更新问题。例如,有两个collection——部门collection、主机collection,要求在删除部门时同步删除部门里的所有主机,这在关系数据库中使用事务很容易实现,但在mongodb里则不行。项目组遇到了很多这样的问题后,只好又改回了使用关系数据库。那mongodb能否支持原子操作呢?
  Mongodb是一种文档型数据库,document里可以存储任何类型的数据,甚至可以存储嵌套的document,因此我们可以把部门和主机放到一个collection里,这样就不会有多个collection的原子更新问题。例如,我们可以这样设计部门collection:
  {
     DepartmentId : “1”,
     DepartmentName : “dep1”,
     Host:
     [
        {
  HostId : “1”,
           HostName : “host1”
        },
        {
           HostId : “2”,
           HostName : “host2”
        }
     ]
  }

  在部门collection的document里建立一个host field,这个field是数组类型的,数组中放置主机信息document,可以放置任意多个这样的主机,这样删除一个部门就能同步删除部门里的所有主机,实现了原子操作。可以看出关系数据库里是把主-详细信息分别放到两个表里,而mongodb的思路是放到一个collection里。
    至于如何对数组里的数据进行增、删、改、查,我会在后续的博客里结合图客网的实际使用情况进行详细讲解。
页: [1]
查看完整版本: Mongodb实战(1)