麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
757
2023-04-26
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小时内删除侵权内容。