论文部分内容阅读
摘 要:MongoDB是NoSQL中面向文档的数据库,是一个基于分布式文件存储的数据库系统。适用于后台具有大量读写操作的网站、使用嵌套结构等非规范化数据的应用程序。MongoDB支持GIS功能,数据结构灵活,非常适用于支撑物流业务。
关键词:NoSQL;MongoDB;物流
MongoDB是以高性能和可扩展性为特征的开源软件,它将数据存储为一个文档,数据结构由键值(keyValue)对组成。MongoDB的文档相当于关系数据库中的一行记录,多个文档组成一个集合相当于关系数据库的表,多个集合逻辑上组合在一起就是数据库。
一、 MongoDB的优势与不足
MongoDB最大的特征是无表结构,进行表结构变更时,只需要在程序进行相应的修改就可以了,不必关心表结构和程序之间的一致性。它采用的面向文档的数据模型使其可以自动在多台服务器之间分散数据,还可以平衡集群的数据和负载,自动重排文档,这样开发者就不用考虑如何扩展;当需要更大的容量时,只需在集群中添加新机器,然后让数据库来处理。
MongoDB不支持JOIN查询与事务处理。使用MongoDB创建和更新数据的时候,数据不会实时写入到硬盘中,由于不能实时向硬盘中写入数据,所以就有可能出现数据丢失的情况。
二、 MongoDB的原理
(一) 索引原理
简单地说,索引就是将文档按照某个(或某些)字段顺序组织起来,以便能根据字段高效的查询。MongoDB默认会为插入的文档生成_id字段作为文档唯一的标识,为了保证能根据文档id快速查询文档,MongoDB默认会为集合创建_id 字段的索引。MongoDB支持多种类型的索引,包括单字段索引、复合索引、多key索引、文本索引等。
(二) 复制集
MongoDB复制集具有故障自动切换和自动修复成员节点的功能,各个DB之间数据完全一致,大大降低了维护成本。复制集的结构非常类似一个集群,其中一个节点出现故障,其他节点马上会将业务接过来而无需停机操作。
(三) MongoDB GIS
MongoDB遵循是GEOJSON规范,{type:””,coordinates:}coordinates是一个[longitude,latitude]的数组类型。
三、 MongoDB在快递物流系统的应用
快递物流系统最常见的业务类型就是订单的查询和记录,订单的特点是随着递送过程,订单数据需要随时更新路径。物流系统用到的特性有:MongoDB的数组结构,索引,GIS功能。以下通过讲解一个Demo以供参考。
(一) 数据操作
物流快递的订单修改主要是查询和信息追加两种,主要介绍这两种:
>db.order.find({_id:”1000”});∥根据订单号查询
∥更新物流状态
>db.order.update({_id:”1000”},
{$push:{details:
{“action”:”delivering”,”operator”:”快递员王五”,”date”:ISODate(”2017-11-01-21T20:00:00 08:00”)}
}}
(二) 索引创建
索引可以使任何类型的字段,_id索引默认存在,不需要再创建;当数据量较大时,可以使用sharding结构,shardkey的选择上可以使用Hash(_id)。
∥TTL索引,字段creat_date,180后自动清理数据
>db.order.createIndex({”create_date”:1},”expireAfterSeconds”:15552000)
位置和狀态索引,为了能快速处理“某地未处理订单”查询,这是一个多条件的查询,所以是一个复合索引,status字段放在前面,因为多数的查询都会依赖状态字段。
∥位置和状态的复合索引,多条件的查询
>db.order.createIndex({”status”:1,”delivery.city”:1,”delivery.address”:1})
总的来说,MongoDB有很高的可扩展性,有一个很好的 replication 模式,有很完善的Java API,存储格式是Json的,这对Java来说非常好处理,运维起来非常方便,不用专门为它安排一个管理员。但是应用经验缺乏,我们都没有相关NoSQL 产品的使用经验,项目相对来说还比较新,和以往的存储相比,数据的关系性操作不再存在。
作者简介:
张洁鑫,四川省成都市,武警警官学院。
关键词:NoSQL;MongoDB;物流
MongoDB是以高性能和可扩展性为特征的开源软件,它将数据存储为一个文档,数据结构由键值(keyValue)对组成。MongoDB的文档相当于关系数据库中的一行记录,多个文档组成一个集合相当于关系数据库的表,多个集合逻辑上组合在一起就是数据库。
一、 MongoDB的优势与不足
MongoDB最大的特征是无表结构,进行表结构变更时,只需要在程序进行相应的修改就可以了,不必关心表结构和程序之间的一致性。它采用的面向文档的数据模型使其可以自动在多台服务器之间分散数据,还可以平衡集群的数据和负载,自动重排文档,这样开发者就不用考虑如何扩展;当需要更大的容量时,只需在集群中添加新机器,然后让数据库来处理。
MongoDB不支持JOIN查询与事务处理。使用MongoDB创建和更新数据的时候,数据不会实时写入到硬盘中,由于不能实时向硬盘中写入数据,所以就有可能出现数据丢失的情况。
二、 MongoDB的原理
(一) 索引原理
简单地说,索引就是将文档按照某个(或某些)字段顺序组织起来,以便能根据字段高效的查询。MongoDB默认会为插入的文档生成_id字段作为文档唯一的标识,为了保证能根据文档id快速查询文档,MongoDB默认会为集合创建_id 字段的索引。MongoDB支持多种类型的索引,包括单字段索引、复合索引、多key索引、文本索引等。
(二) 复制集
MongoDB复制集具有故障自动切换和自动修复成员节点的功能,各个DB之间数据完全一致,大大降低了维护成本。复制集的结构非常类似一个集群,其中一个节点出现故障,其他节点马上会将业务接过来而无需停机操作。
(三) MongoDB GIS
MongoDB遵循是GEOJSON规范,{type:”
三、 MongoDB在快递物流系统的应用
快递物流系统最常见的业务类型就是订单的查询和记录,订单的特点是随着递送过程,订单数据需要随时更新路径。物流系统用到的特性有:MongoDB的数组结构,索引,GIS功能。以下通过讲解一个Demo以供参考。
(一) 数据操作
物流快递的订单修改主要是查询和信息追加两种,主要介绍这两种:
>db.order.find({_id:”1000”});∥根据订单号查询
∥更新物流状态
>db.order.update({_id:”1000”},
{$push:{details:
{“action”:”delivering”,”operator”:”快递员王五”,”date”:ISODate(”2017-11-01-21T20:00:00 08:00”)}
}}
(二) 索引创建
索引可以使任何类型的字段,_id索引默认存在,不需要再创建;当数据量较大时,可以使用sharding结构,shardkey的选择上可以使用Hash(_id)。
∥TTL索引,字段creat_date,180后自动清理数据
>db.order.createIndex({”create_date”:1},”expireAfterSeconds”:15552000)
位置和狀态索引,为了能快速处理“某地未处理订单”查询,这是一个多条件的查询,所以是一个复合索引,status字段放在前面,因为多数的查询都会依赖状态字段。
∥位置和状态的复合索引,多条件的查询
>db.order.createIndex({”status”:1,”delivery.city”:1,”delivery.address”:1})
总的来说,MongoDB有很高的可扩展性,有一个很好的 replication 模式,有很完善的Java API,存储格式是Json的,这对Java来说非常好处理,运维起来非常方便,不用专门为它安排一个管理员。但是应用经验缺乏,我们都没有相关NoSQL 产品的使用经验,项目相对来说还比较新,和以往的存储相比,数据的关系性操作不再存在。
作者简介:
张洁鑫,四川省成都市,武警警官学院。