有MySQL了,为什么还硬要搭个MongoDB集群?( 二 )


有MySQL了,为什么还硬要搭个MongoDB集群?

文章插图
五、MongoDB与MySQL关键字对比
关键字对比
有MySQL了,为什么还硬要搭个MongoDB集群?

文章插图
集合相当于MySQL中的表
集合就是一组文档 。可以看作是具有动态模式的表 。
集合具有动态模式的特性 。这意味着一个集合中的文档可以具有任意数量的不同形态 。
但是,将不同类型的文档存放在一个集合中会出现很多问题:
  • 文档中可以存放任意类型的变量,但是,这里不建议将不同类型的文档保存在同一个集合中,开发人员需要确保每个查询只返回特定模式的文档,或者确保执行查询的应用程序代码可以处理不同类型的文档;
  • 获取集合列表比提取集合中的文档类型列表要快得多,减少磁盘查找次数;
  • 相同类型的文档存放在同一个集合中可以实现数据的局部性,对于集合,让使用者见文知意;
  • 集合中只存放单一类型的文档,可以更高效地对集合进行索引 。
集合的命名
  • 集合名称中不能是空字符串;
  • 集合名称不能包含(空字符),因为这个字符用于表示一个集合名称的结束;
  • 集合名称不能以system.开头,该前缀是为内部集合保留的 。
  • 集合名称不能有$,只能在某些特定情况下使用 。通常情况下,可以认为这两个字符是MongoDB的保留字符,如果使用不当,那么驱动程序将无法正常工作 。
文档相当于MySQL中的行
文档是MongoDB中的基本数据单元,相当于传统关系型数据库中的行,它是一组有序键值的集合 。每个文档都有一个特殊的键“_id”,其在所属的集合中是唯一的 。
文档中的键是字符串类型 。
键中不能含有(空字符) 。这个字符用于表示一个键的结束 。.和$是特殊字符,只能在某些特定情况下使用 。通常情况下,可以认为这两个字符是MongoDB的保留字符,如果使用不当,那么驱动程序将无法正常工作 。
游标
数据库会使用游标返回find的执行结果 。游标的客户端实现通常能够在很大程度上对查询的最终输出进行控制 。你可以限制结果的数量,跳过一些结果,按任意方向的任意键组合对结果进行排序,以及执行许多其他功能强大的操作 。
通过cursor.hasNext()检查是否还有其它结果,通过cursor.next()用来对其进行获取 。
调用find()时,shell并不会立即查询数据库,而是等到真正开始请求结果时才发送查询,这样可以在执行之前给查询附加额外的选项 。cursor对象的大多数方法会返回游标本身,这样就可以按照任意顺序将选项链接起来了 。
在使用db.users.find();查询时,实际上查询并没有真正执行,只是在构造查询,执行cursor.hasNext(),查询才会发往服务器端 。shell会立刻获取前100个结果或者前4MB的数据(两者之中的较小者),这样下次调用next或者hasNext时就不必再次连接服务器去获取结果了 。在客户端遍历完第一组结果后,shell会再次连接数据库,使用getMore请求更多的结果 。getMore请求包含一个游标的标识符,它会向数据库询问是否还有更多的结果,如果有则返回下一批结果 。这个过程会一直持续,直到游标耗尽或者结果被全部返回 。
游标的生命周期
在服务器端,游标会占用内存和资源 。一旦游标遍历完结果之后,或者客户端发送一条消息要求终止,数据库就可以释放它正在使用的资源 。
何时销毁游标:
  • 当游标遍历完匹配的结果时,它会消除自身;
  • 当游标超出客户端的作用域时,驱动程序会向数据库发送一条特殊的消息,让数据库终止该游标;
  • 如果10分钟没有被使用的话,数据库游标也将自动销毁 。
六、下载与安装过程中一些常见的坑
1、下载地址:
https://www.mongodb.com/try/download/community2
有MySQL了,为什么还硬要搭个MongoDB集群?

文章插图
  • 配置环境变量D:Program FilesMongoDBServer5.0bin
  • 在bin目录下,重新打开一个窗口,D:Program FilesMongoDBServer5.0bin,打开cmd,输入MongoDB

有MySQL了,为什么还硬要搭个MongoDB集群?

文章插图
  • 如果msi方式失败,可以下载zip文件进行安装
下载zip文件,解压,在bin同级目录下建data文件夹,在data下建一个db文件夹,存储MongoDB数据 。
在bin文件夹下执行cmd,执行mongod --dbpath D:Program Filesmongodbdatadb命令;
再在data目录下,建一个logs文件夹,存放MongoDB日志 。


推荐阅读