免费智能真题库 > 历年试卷 > 数据库系统工程师 > 2024年上半年 数据库系统工程师 上午试卷 综合知识
  第20题      
  知识点:   文档数据库MongoDB
  关键词:   数据库   数据        章/节:   数据库技术基础       

 
MongoDB是一种NoSQL数据库,具体地说,是( )存储数据库。
 
 
  A.  文档
 
  B.  图形
 
  C.  XML
 
  D.  键值
 
 
 

  相关试题:数据库技术基础          更多>  
 
  第55题    2009年上半年  
   47%
在C/S体系结构中,客户端执行的操作是(55).
  第28题    2009年上半年  
   42%
数据库通常是指有组织地、动态地存储在(28);应用数据库的主要目的是解决数据(29)问题。
  第57题    2012年上半年  
   63%
假设某企业职工实体有属性:职工号、职工姓名、性别、出生日期;部门实体有属性:部门号、部门名称、电话,一个部门可以有多部电..
   知识点讲解    
   · 文档数据库MongoDB
 
       文档数据库MongoDB
        MongoDB是10gen公司开发的以高性能和可扩展性为特征的文档型数据库,也是NoSQL文档存储模式数据库中的重要一员。MongoDB的最大特点就是无表结构。在保存数据和数据结构的时候,会把数据和数据结构都完整地以BSON的形式保存起来(BSON是JSON的二进制编码格式,但比JSON支持更加复杂的格式,在空间利用上更加高效,支持的数据类型如下表所示),并把它作为值和特定的键进行关联。正是由于这种设计,使得它不需要表结构,而被称为文档型数据库。
        
        BSON支持的数据类型
        
        这里说的文档,是一种可以嵌套的数据集合。从关系数据库的范式的概念来说,嵌套是明显的反范式设计。范式设计的好处是消除了依赖,但是增加了关联,查询需要通过关联两张或者多张表来获得所需要的全部数据,但是更改操作是原子的,只需要修改一个地方即可。反范式则是增加了数据冗余来提升查询性能,但更新操作可能需要更新冗余的多处数据,需要注意一致性的问题。
        由于MongoDB最大的特点就是无表结构,无论是定义还是使用,所以,对于任何关键字,它都可以像关系型数据库那样进行复杂的查询。此外,MongoDB拥有比关系型数据库更快的速度,而且,可以像关系型数据库那样通过添加索引来进行高速处理。
        根据它的特点,可以通过“添加字段”“查询数据”这两个操作看出MongoDB与传统的关系型数据库相比的优势与不足,如下表所示。
        
        MongoDB与传统的关系型数据库的比较
        因此,在实际应用中,我们要根据MongoDB的特点灵活使用:在最初的设计时就避免join查询的使用,当然,可以在最开始的时候就将必要的数据嵌入到文档中去,这可以实现同样的功能。
        除此之外,MongoDB有它自己的通信协议,有几种语言的socket驱动。MongoDB还有强大的查询语言可以和SQL相媲美,它的查询语言同样支持Map/reduce函数。此外,MongoDB的分区方法采用的是“读写分离”,以主从模式对数据进行复制和修改。
        MongoDB具有四点主要特征:
        (1)高性能:提供JSON、XML等可嵌入数据快速处理功能;提供文档的索引功能,相对传统数据库而言,大大提高查询速度。
        (2)丰富的查询语言:为数据聚合、结构文档、地理空间提供丰富的查询功能。
        (3)高可用性:提供数据冗余处理和故障自动转移的功能。
        (4)水平扩展能力:通过集群将数据分布到多台机器,而不是只提升单个节点的性能,具体处理分为主从和权衡两种处理模式。
        MangoDB为C、C#、.NET、Java、PHP等各种开发语言提供了程序库,如下表所示。
        
        MangoDB为各种开发语言提供的程序库(部分)
        Java驱动程序是MongoDB最早的驱动,它已经使用多年,而且非常稳定,是企业级开发的首选。下面使用Java驱动程序来举一个各种汽车信息统计的搜索引擎的例子,每种汽车收集的信息都不同,本例子的目的是使得这些信息都能被搜索到。
        宝马的属性就比较多,所以它的文档也复杂一些:
        
        MangoDB能存放任意数量、任意属性的被统计信息,这样应用就能轻易扩展,但目前还不能对当前的格式进行有效的索引。MangoDB索引可以将数组的每一个元素进行涵盖,所以可以将想要索引的属性放到一个保护常用键名的数组中。例如,对于宝马汽车,可以为索引添加一个数组,将全部属性放到数组中:
        
        对于奥迪汽车,只有一个属性,就是价格:
        
        现在只要创建一个“index.name”和“index.value”的复合索引就行了。使用Java代码举例,使用ensureIndex函数建复合索引:
        
        实现宝马汽车信息的文档如下:
        
        只要实现了java.util.List,就可以用来表示数组,所以用java.tuil.ArrayList来存放表示汽车不同属性信息的内嵌文档。
   题号导航      2024年上半年 数据库系统工程师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第20题    在手机中做本题