现在的位置: 首页 > 移动开发 > 正文

MongoDB和NoSQL有哪些优势?MJORM怎么入门

2020年06月08日 移动开发 ⁄ 共 3517字 ⁄ 字号 评论关闭

  目前有很多互相竞争的NoSQL产品,它们使用的方式不尽相同,但都能很好地解决大数据问题。MongoDB就是其中一款非常不错的产品。MongoDB是面向文档、无Schema的存储解决方案,它用JSON风格的文档展现、查询、修改数据。下面学步园小编来讲解下MongoDB和NoSQL有哪些优势?MJORM怎么入门?

  MongoDB和NoSQL有哪些优势

  作为NoSQL解决方案,MongoDB的优势是很容易上手。在我第一次深入研究NoSQL数据库的时候,尝试了很多基于Java的解决方案,我发现要搞清楚什么是列族(columnfamily)、Hadoop和HBase之间是什么关系、ZooKeeper到底是什么非常费时间。我最终想明白这些问题的时候,才明白Cassandra、HBase等产品都是非常完善的NoSQL解决方案。和其他解决方案相比,MongoDB则更容易掌握一些,开始写代码之前不需要理解太多的概念。

  很显然,MongoDB和任何软件一样都存在缺陷。在学习、使用MongoDB的过程中,我遇到过几件可算是“陷阱”的事情:

  不要把它用成RDBMS。这一点看起来显而易见,但在MongoDB里创建、执行复杂查询都很容易,以至于到了想用它做实时查询的时候,你可能才会发现自己已经做过头了,而且可能会碰到性能问题。(我以前就犯过这样的错)

  MongoDB的索引是BinaryTree。如果你不太熟悉B-Tree,应该研究一下。查询条件的顺序要和创建索引的顺序相匹配。

  精心设计索引。这和前面提到的B-Tree有关系。我刚开始创建的几个索引都包含文档里的很多字段,因为总是想着以后可能会查询它们,这种想法你应该能够理解。不要犯这样的错误。我曾给一个很小的集合(大约一千万条记录)创建了一个索引,这个索引后来增长到17GB,比集合本身还要大。如果某个数组字段可能会包含成百上千的条目,你可能不会给它创建索引。

  MongoDB支持NoSQL的方法非常有趣,它用BSON存储、用JSON表示,管理和Map/Reduce则用了JavaScript。这样一来,等MongoDB发展的时间足够久、和更流行的大数据解决方案一样长的时候,MongoDB必然会出现一些奇怪的小问题,比如在NumberLong上使用等于运算符会判断失败。

  MongoDB、控制台、驱动程序

  MongoDB的管理通常可以在一个JavaScript客户端控制台应用上进行,控制台应用能简化数据迁移和操作等复杂任务;你也完全可以用JavaScript语言编程实现MongoDB的管理。在这篇文章里,我们会示范控制台的使用。现在的MongoDB客户端产品非常多,它们都具备能投入生产环境的品质,MongoDB社区也称它们为驱动程序。一般来说,每种编程语言都有各自的驱动程序,这些驱动程序能覆盖所有流行的编程语言,还有一些并不是很流行的编程语言。本文将展示MongoDB的Java驱动程序该如何使用,也会和使用ORM库(MJORM)的方式进行比较。

  MJORM简介:MongoDB的ORM解决方案

  NoSQL数据存储还有很多有趣的问题需要解决,最近让应用程序员比较关心的是对象关系映射(ORM)。ORM是指持久化数据和应用所用对象之间的映射,持久化数据过去都存储在关系型数据库里。ORM能让处理数据的过程更加流畅、更加贴近编写应用的语言。

  MongoDB面向文档的架构让它很容易进行ORM,因为它存储的文档本身就是对象。不过可惜的是,可用于MongoDB的JavaORM库还不是很多,目前只有morphia(针对MongoDB的Java库,是类型安全的)和spring-data(SpringData综合项目的MongoDB实现)。

  这些ORM库使用了大量注解,出于很多原因,我并不倾向于使用注解,其中最重要的是被注解的对象在多个项目之间的可移植性问题。所以我创建了mongo-Java-orm项目(MJORM,发音为me-yorm),它是针对MongoDB的JavaORM。MJORM使用MIT许可,放在了GoogleCode上。项目用Maven构建,Maven的工件库目前托管在GoogleCode的Subversion服务器上。写这篇文章的时候,MJORM最新的稳定发布版本是0.15,个别项目已经在生产环境里使用了。

  MJORM怎么入门

  将MJORM库添加到项目里

  Maven用户首先要将MJORM的Maven仓库添加到pom.xml文件里,以便自己的项目能使用MJORM工件:

  

  mjorm-webdav-maven-repo

  mjormmavenrepository

  http://mongo-Java-orm.googlecode.com/svn/maven/repo/

  default

  

  然后添加依赖本身:

  

  com.googlecode

  mongo-Java-orm

  0.15

  

  这样你就能把MJORM类导入到自己的应用里并使用它们。如果你没用Maven,那你需要手动下载MJORM库,还有MJORMpom.xml里列出的所有依赖。

  创建POJO

  依赖关系处理好之后,就开始编写代码吧。我们先编写JavaPOJO:

  classAuthor{

  privateStringfirstName;

  privateStringlastName;

  //...settersandgetters...

  }

  classBook{

  privateStringid;

  privateStringisbn;

  privateStringtitle;

  privateStringdescription;

  privateAuthorauthor;

  //...settersandgetters...

  }

  上面的对象模型描述了作者和书,作者有一个ID、还有姓氏和名字,书的描述信息则包含ID、ISBN号、标题、描述信息和作者。

  可以看到书的ID属性是一个String,它会适应成MongoDB的ObjectId类型,ObjectId类型是个十二字节的二进制值,用十六进制的字符串来表示。虽然MongoDB要求所有集合里的每个文档都要有一个唯一的ID,但并没有要求ID必须是ObjectId类型。目前MJORM支持的ID类型只有ObjectId,而且会把它们表示成String。

  你可能已经注意到,Author对象没有ID。这是因为Author是Book文档的子文档,所以就没必要非得有一个ID了。请记住,MongoDB的ID只需要放在一个集合的根级别文档中。

  创建XML映射文件

  下一步是创建XML映射文件,MJORM会用这些映射文件把MongoDB文档映射成对象。在本文的演示里,我们会给两个对象各创建一个文档,但真正合理的做法是把所有的映射都放在一个XML文件里,或者根据实际需要进行分割。

  下面是Author.mjorm.xml:

  

  

  

  

  

  

  

  Book.mjorm.xml是:

  

  

  

  

  

  

  

  

  

  

  映射文件完全能自解释。descriptors元素是根元素,所有的映射文件都要有。根元素下面是object元素,用来定义要被映射到MongoDB文档的类。object会包含property元素,用来描述POJO的所有属性,以及它们怎样映射到MongoDB文档的属性。property元素至少要有一个name属性,这是POJO属性的名称,也是MongoDB文档属性的名称。property元素还可以添加一个column属性,指定MongoDB文档里备用的属性名称。

  包含id属性的property元素会被看作是对象的唯一标识符。一个object元素可以只包含一个带有id属性的property元素。auto属性是让MJORM在持久化这个属性时给它自动生成一个值。

  要想了解有关XML映射文件更详细的说明,请移步至GoogleCode上的MJORM项目。

  整合

  我们现在已经创建好了数据模型,还有告诉MJORM在数据写入MongoDB时如何解析POJO、从MongoDB读取数据时如何封装POJO的映射文件,那我们就可以开始一段有趣的学习之旅了。首先我们必须打开到MongoDB的连接:

  以上就是关于“MongoDB和NoSQL有哪些优势?MJORM怎么入门”的内容,希望对大家有用。更多资讯请关注学步园。学步园,您学习IT技术的优质平台!

抱歉!评论已关闭.