R语言利剑之NoSQL系列:MongoDB

网友投稿 757 2023-04-26

R语言利剑之NoSQL系列:***

R语言利剑之NoSQL系列:***

由于文章篇幅有限,均跳过NoSQL的安装过程,请自行参考文档安装。

***篇 R利剑MongeDB,分为4个章节。

***环境准备rmongodb函数库rmongodb基本使用操作rmongodb测试案例

每一章节,都会分为”文字说明部分”和”代码部分”,保持文字说明与代码的连贯性。

1. ***环境准备

文字说明部分:

首先环境准备,这里我选择了Linux Ubuntu操作系统12.04的32位桌面版本,大家可以根据自己的使用习惯选择顺手的Linux。***安装过程跳过。

查看***服务器环境使用mongod命令,启动***。

进程号:pid=2924 端口:port=27017 数据文件目录:dbpath=/data/db/ 软件版本:32-bit 主机名:host=conan

使用mongo命令,打开mongo shell。

mongo shell的简单操作:查看数据库,切换数据库,查看数据集.

R语言环境2.15.0,WinXP通过远程连接,访问Mongodb Server。

代码部分:

查看操作系统

~ uname -a    Linux conan 3.2.0-38-generic-pae #61-Ubuntu SMP Tue Feb 19 12:39:51 UTC 2013 i686 i686 i386 GNU/Linux~ cat /etc/issue    Ubuntu 12.04.2 LTS \n \l

启动mongodb

打开mongo shell

~ mongo    *** shell version: 2.0.6    connecting to: test

进入mongo shell, 列表显示数据库

> show dbs    db      0.0625GB    feed    0.0625GB    foobar  0.0625GB    local   (empty)

切换数据库

> use foobar   switched to db foobar

列表显示数据集

> show collections    blog    system.indexes

R语言开发环境2.15.0,WinXP

~ RR version 2.15.0 (2012-03-30)Copyright (C) 2012 The R Foundation for Statistical ComputingISBN 3-900051-07-0Platform: i386-pc-mingw32/i386 (32-bit)

2. rmongodb函数库

文字说明部分:

rmongodb的开发了一大堆的函数,对应mongo的操作。比起别的NoSQL来说,真是工程浩大啊。但我总觉得封装粒度不够,写起代码来比较复杂。

下面列出了所有rmongodb函数库,我只挑选几个常用的介绍。

建立mongo连接

mongo<-mongo.create()

查看接连是否正常

mongo.is.connected(mongo)

创建一个BSON对象缓存

buf <- mongo.bson.buffer.create()

给对象buf增加element

mongo.bson.buffer.append(buf, "name", "Echo")

增加对象类型的element

score <- c(5, 3.5, 4)names(score) <- c("Mike", "Jimmy", "Ann")mongo.bson.buffer.append(buf, "score", score)

增加数组类型的element

关闭数组类型的element

mongo.bson.buffer.finish.object(buf)

取出缓存数据

b <- mongo.bson.from.buffer(buf)

数据库.数据集

ns="db.blog"

插入一条记录

mongo.insert(mongo,ns,b)#mongo shell:(Not Run)db.blog.insert(b)

创建查询对象query

buf <- mongo.bson.buffer.create()mongo.bson.buffer.append(buf, "name", "Echo")query <- mongo.bson.from.buffer(buf)

创建查询返回值对象

buf <- mongo.bson.buffer.create()mongo.bson.buffer.append(buf, "name", 1)fields <- mongo.bson.from.buffer(buf)

执行单条记录查询

mongo.find.one(mongo, ns, query, fields)#mongo shell:(Not Run)db.blog.findOne({query},{fields})

执行列表记录查询

mongo.find(mongo, ns, query, fields)#mongo shell:(Not Run)db.blog.find({query},{fields})

创建修改器对象objNew

buf <- mongo.bson.buffer.create()mongo.bson.buffer.start.object(buf, "$inc")mongo.bson.buffer.append(buf, "age", 1L)mongo.bson.buffer.finish.object(buf)objNew <- mongo.bson.from.buffer(buf)

执行修改操作

mongo.update(mongo, ns, query, objNew)#mongo shell:(Not Run)db.blog.update({query},{objNew})

单行代码修改操作

mongo.update(mongo, ns, query, list(name="Echo", age=25))#mongo shell:(Not Run)db.blog.update({query},{objNew})

删除所选对象

mongo.remove(mongo, ns, query)#mongo shell:(Not Run)db.blog.remove({query},{objNew})

销毁mongo连接

mongo.destroy(mongo)

代码部分:

共有153个函数

3. rmongodb基本使用操作

文字说明部分:

首先,要安装rmongodb类库,加载类库。

然后,通过mongo.create()函数,建立与*** Server的连接。如果是本地连接,mongo.create()不要参数,下面例子使用远程连接,增加host参数配置IP地址。mongo<-mongo.create(host=“192.168.1.11”)

检查是否连接正常,mongo.is.connected()。这条语句在开发时会经常使用到。在用R语言建模时,如果对象或者函数使用错误,连接会被自动断开。由于***的异常机制,断开时不会是提示。大家要手动使用这条命令测试,连接是否正常。

接下来,定义两个变量,db和ns。db是我们需要使用的数据库,ns是数据库+数据集。

下面我们创建一个Mongo对象。

然后,分别使用修改器inc,set,$push进行操作。

***删除对象,并断开连接。

代码部分:

安装rmongodb

install.packages(rmongodb)

加载类库

library(rmongodb)

远程连接mongodb server

mongo<-mongo.create(host="192.168.1.11")

查看是否连接正常

print(mongo.is.connected(mongo))

定义db

db<-"foobar"

定义db.collection

ns<-"foobar.blog"

组织bson类型数据

插入mongodb

mongo.insert(mongo,ns,b)

单条显示插入的数据

buf <- mongo.bson.buffer.create()mongo.bson.buffer.append(buf, "name", "Echo")query <- mongo.bson.from.buffer(buf)print(mongo.find.one(mongo, ns, query))

使用$inc修改器,修改给age加1

buf <- mongo.bson.buffer.create()mongo.bson.buffer.start.object(buf, "$inc")mongo.bson.buffer.append(buf, "age", 1L)mongo.bson.buffer.finish.object(buf)objNew <- mongo.bson.from.buffer(buf)mongo.update(mongo, ns, query, objNew)print(mongo.find.one(mongo, ns, query))

使用$set修改器,修改age=1

buf <- mongo.bson.buffer.create()mongo.bson.buffer.start.object(buf, "$set")mongo.bson.buffer.append(buf, "age", 1L)mongo.bson.buffer.finish.object(buf)objNew <- mongo.bson.from.buffer(buf)mongo.update(mongo, ns, query, objNew)print(mongo.find.one(mongo, ns, query))

使用简化修改语句,给对象重新赋值

mongo.update(mongo, ns, query, list(name="Echo", age=25))print(mongo.find.one(mongo, ns, query))

删除对象

mongo.remove(mongo, ns, query)

销毁mongo连接

mongo.destroy(mongo)

4. rmongodb测试案例

文字说明部分:

批量插入数据,使用修改器批量修改数据

3种修改器速度比较,push最慢push > set>inc

终于push是对数组操作,set是对任意值操作,inc是对数字操作,所以下面测试可能不太公平。测试结果仅供参考。

代码部分:

批量插入数据函数

批量修改,$inc修改器函数

batch_inc<-function(data,ns){    for(i in data){      buf <- mongo.bson.buffer.create()      mongo.bson.buffer.append(buf, "name", str_c("Dave",i))      criteria <- mongo.bson.from.buffer(buf)      buf <- mongo.bson.buffer.create()      mongo.bson.buffer.start.object(buf, "$inc")      mongo.bson.buffer.append(buf, "age", 1L)      mongo.bson.buffer.finish.object(buf)      objNew <- mongo.bson.from.buffer(buf)      mongo.update(mongo, ns, criteria, objNew)    }  }

批量修改,$set修改器函数

batch_set<-function(data,ns){    for(i in data){      buf <- mongo.bson.buffer.create()      mongo.bson.buffer.append(buf, "name", str_c("Dave",i))      criteria <- mongo.bson.from.buffer(buf)      buf <- mongo.bson.buffer.create()      mongo.bson.buffer.start.object(buf, "$set")      mongo.bson.buffer.append(buf, "age", 1L)      mongo.bson.buffer.finish.object(buf)      objNew <- mongo.bson.from.buffer(buf)      mongo.update(mongo, ns, criteria, objNew)    }  }

批量修改,$push修改器函数

执行程序,3种修改速度比较,$push最慢

ns="foobar.blog" data=1:1000 mongo.remove(mongo, ns) ## [1] TRUE system.time(batch_insert(data, ns)) ## user system elapsed ## 0.25 0.00 0.28 system.time(batch_inc(data, ns)) ## user system elapsed ## 0.47 0.27 2.50 system.time(batch_set(data, ns)) ## user system elapsed ## 0.77 0.48 3.17 system.time(batch_push(data, ns)) ## user system elapsed ## 0.81 0.41 4.23

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PostgreSQL运行在 FreeBSD 和 Linux 的表现的测试数据
下一篇:十种程序语言帮你读懂大数据的“秘密”
相关文章