成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

R語言利劍之NoSQL系列:MongoDB

數據庫 其他數據庫 MongoDB
R利劍NoSQL系列文章,主要介紹通過R語言連接使用NoSQL數據庫。涉及的NoSQL產品,包括Redis, MongoDB, HBase, Hive, Cassandra, Neo4j。希望通過我的介紹讓廣大的R語言愛好者,有更多的開發選擇,做出更多地激動人心的應用。

由于文章篇幅有限,均跳過NoSQL的安裝過程,請自行參考文檔安裝。

***篇 R利劍MongeDB,分為4個章節。

MongoDB環境準備
rmongodb函數庫
rmongodb基本使用操作
rmongodb測試案例

每一章節,都會分為”文字說明部分”和”代碼部分”,保持文字說明與代碼的連貫性。

1. MongoDB環境準備

文字說明部分:

首先環境準備,這里我選擇了Linux Ubuntu操作系統12.04的32位桌面版本,大家可以根據自己的使用習慣選擇順手的Linux。

MongoDB安裝過程跳過。

查看MongoDB服務器環境
使用mongod命令,啟動MongoDB。

進程號: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

~ mongod

    mongod --help for help and startup options
    Thu Apr 11 11:02:26
    Thu Apr 11 11:02:26 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
    Thu Apr 11 11:02:26
    Thu Apr 11 11:02:26 [initandlisten] MongoDB starting : pid=2924 port=27017 dbpath=/data/db/ 32-bit host=conan
    Thu Apr 11 11:02:26 [initandlisten]
    Thu Apr 11 11:02:26 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
    Thu Apr 11 11:02:26 [initandlisten] **       see http://blog.mongodb.org/post/137788967/32-bit-limitations
    Thu Apr 11 11:02:26 [initandlisten] **       with --journal, the limit is lower
    Thu Apr 11 11:02:26 [initandlisten]
    Thu Apr 11 11:02:26 [initandlisten] db version v2.0.6, pdfile version 4.5
    Thu Apr 11 11:02:26 [initandlisten] git version: e1c0cbc25863f6356aa4e31375add7bb49fb05bc
    Thu Apr 11 11:02:26 [initandlisten] build info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_41
    Thu Apr 11 11:02:26 [initandlisten] options: {}
    Thu Apr 11 11:02:26 [websvr] admin web console waiting for connections on port 28017
    Thu Apr 11 11:02:26 [initandlisten] waiting for connections on port 27017

打開mongo shell

~ mongo

    MongoDB 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

~ R
R version 2.15.0 (2012-03-30)
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: 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

mongo.bson.buffer.start.array(buf, "comments")
mongo.bson.buffer.append(buf, "0", "a1")
mongo.bson.buffer.append(buf, "1", "a2")
mongo.bson.buffer.append(buf, "2", "a3")

關閉數組類型的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個函數

mongo.add.user
mongo.authenticate
mongo.binary.binary
mongo.binary.function
mongo.binary.md5
mongo.binary.old
mongo.binary.user
mongo.binary.uuid
mongo.bson.array
mongo.bson.binary
mongo.bson.bool
mongo.bson.buffer.append
mongo.bson.buffer.append.bool
mongo.bson.buffer.append.bson
mongo.bson.buffer.append.code
mongo.bson.buffer.append.code.w.scope
mongo.bson.buffer.append.complex
mongo.bson.buffer.append.double
mongo.bson.buffer.append.element
mongo.bson.buffer.append.int
mongo.bson.buffer.append.list
mongo.bson.buffer.append.long
mongo.bson.buffer.append.null
mongo.bson.buffer.append.object
mongo.bson.buffer.append.oid
mongo.bson.buffer.append.raw
mongo.bson.buffer.append.regex
mongo.bson.buffer.append.string
mongo.bson.buffer.append.symbol
mongo.bson.buffer.append.time
mongo.bson.buffer.append.timestamp
mongo.bson.buffer.append.undefined
mongo.bson.buffer.create
mongo.bson.buffer.finish.object
mongo.bson.buffer.size
mongo.bson.buffer.start.array
mongo.bson.buffer.start.object
mongo.bson.code
mongo.bson.code.w.scope
mongo.bson.date
mongo.bson.dbref
mongo.bson.destroy
mongo.bson.double
mongo.bson.empty
mongo.bson.eoo
mongo.bson.find
mongo.bson.from.buffer
mongo.bson.from.list
mongo.bson.int
mongo.bson.iterator.create
mongo.bson.iterator.key
mongo.bson.iterator.next
mongo.bson.iterator.type
mongo.bson.iterator.value
mongo.bson.long
mongo.bson.null
mongo.bson.object
mongo.bson.oid
mongo.bson.print
mongo.bson.regex
mongo.bson.size
mongo.bson.string
mongo.bson.symbol
mongo.bson.timestamp
mongo.bson.to.list
mongo.bson.undefined
mongo.bson.value
mongo.code.create
mongo.code.w.scope.create
mongo.command
mongo.count
mongo.create
mongo.cursor.destroy
mongo.cursor.next
mongo.cursor.value
mongo.destroy
mongo.disconnect
mongo.distinct
mongo.drop
mongo.drop.database
mongo.find
mongo.find.await.data
mongo.find.cursor.tailable
mongo.find.exhaust
mongo.find.no.cursor.timeout
mongo.find.one
mongo.find.oplog.replay
mongo.find.partial.results
mongo.find.slave.ok
mongo.get.database.collections
mongo.get.databases
mongo.get.err
mongo.get.hosts
mongo.get.last.err
mongo.get.prev.err
mongo.get.primary
mongo.get.server.err
mongo.get.server.err.string
mongo.get.socket
mongo.get.timeout
mongo.gridfile.destroy
mongo.gridfile.get.chunk
mongo.gridfile.get.chunk.count
mongo.gridfile.get.chunks
mongo.gridfile.get.chunk.size
mongo.gridfile.get.content.type
mongo.gridfile.get.descriptor
mongo.gridfile.get.filename
mongo.gridfile.get.length
mongo.gridfile.get.md5
mongo.gridfile.get.metadata
mongo.gridfile.get.upload.date
mongo.gridfile.pipe
mongo.gridfile.read
mongo.gridfile.seek
mongo.gridfile.writer.create
mongo.gridfile.writer.finish
mongo.gridfile.writer.write
mongo.gridfs.create
mongo.gridfs.destroy
mongo.gridfs.find
mongo.gridfs.remove.file
mongo.gridfs.store
mongo.gridfs.store.file
mongo.index.background
mongo.index.create
mongo.index.drop.dups
mongo.index.sparse
mongo.index.unique
mongo.insert
mongo.insert.batch
mongo.is.connected
mongo.is.master
mongo.oid.create
mongo.oid.from.string
mongo.oid.print
mongo.oid.time
mongo.oid.to.string
mongo.reconnect
mongo.regex.create
mongo.remove
mongo.rename
mongo.reset.err
mongo.set.timeout
mongo.shorthand
mongo.simple.command
mongo.symbol.create
mongo.timestamp.create
mongo.undefined.create
mongo.update
mongo.update.basic
mongo.update.multi
mongo.update.upsert

3. rmongodb基本使用操作

文字說明部分:

首先,要安裝rmongodb類庫,加載類庫。

然后,通過mongo.create()函數,建立與MongoDB Server的連接。如果是本地連接,mongo.create()不要參數,下面例子使用遠程連接,增加host參數配置IP地址。mongo<-mongo.create(host=“192.168.1.11”)

檢查是否連接正常,mongo.is.connected()。這條語句在開發時會經常使用到。在用R語言建模時,如果對象或者函數使用錯誤,連接會被自動斷開。由于MongoDB的異常機制,斷開時不會是提示。大家要手動使用這條命令測試,連接是否正常。

接下來,定義兩個變量,db和ns。db是我們需要使用的數據庫,ns是數據庫+數據集。

下面我們創建一個Mongo對象。

{
        "_id" : ObjectId("51663e14da2c51b1e8bc62eb"),
        "name" : "Echo",
        "age" : 22,
        "gender" : "Male",
        "score" : {
                "Mike" : 5,
                "Jimmy" : 3.5,
                "Ann" : 4
        },
        "comments" : [
                "a1",
                "a2",
                "a3"
        ]
}

然后,分別使用修改器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類型數據

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", "Echo")
mongo.bson.buffer.append(buf, "age", 22L)
mongo.bson.buffer.append(buf, "gender", 'Male')

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

#數組類型
mongo.bson.buffer.start.array(buf, "comments")
mongo.bson.buffer.append(buf, "0", "a1")
mongo.bson.buffer.append(buf, "1", "a2")
mongo.bson.buffer.append(buf, "2", "a3")
mongo.bson.buffer.finish.object(buf)
b <- mongo.bson.from.buffer(buf)

插入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))

使用$push修改器,給comments數組追加”Orange”數據

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "$push")
mongo.bson.buffer.append(buf, "comments", "Orange")
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種修改器速度比較,pushpush > set>inc

終于push是對數組操作,set是對任意值操作,inc是對數字操作,所以下面測試可能不太公平。測試結果僅供參考。

代碼部分:

批量插入數據函數

  batch_insert<-function(arr=1:10,ns){
    library(stringr)
    mongo_insert<-function(x){
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.append(buf, "name", str_c("Dave",x))
      mongo.bson.buffer.append(buf, "age", x)
      mongo.bson.buffer.start.array(buf, "comments")
      mongo.bson.buffer.append(buf, "0", "a1")
      mongo.bson.buffer.append(buf, "1", "a2")
      mongo.bson.buffer.append(buf, "2", "a3")
      mongo.bson.buffer.finish.object(buf)
      return(mongo.bson.from.buffer(buf))
    }
    mongo.insert.batch(mongo, ns, lapply(arr,mongo_insert))
  }

批量修改,$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修改器函數

  batch_push<-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, "$push")
      mongo.bson.buffer.append(buf, "comments", "Orange")
      mongo.bson.buffer.finish.object(buf)
      objNew <- mongo.bson.from.buffer(buf)
      mongo.update(mongo, ns, criteria, objNew)
    }
  }

執行程序,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

責任編輯:彭凡 來源: 統計之都
相關推薦

2014-08-01 13:40:50

R語言

2013-04-10 10:31:21

R語言

2011-06-14 09:09:13

NoSQLMongoDB

2023-09-05 10:25:35

數據庫性能

2013-05-31 10:15:29

R語言

2017-10-17 11:58:54

R語言UpSetR可視化

2021-05-18 07:15:37

Python

2010-09-07 09:07:33

MongoDBCouchDB

2013-05-16 09:37:14

R語言

2013-12-03 11:00:48

2011-04-01 09:29:52

MySQLMongoDB

2011-04-18 10:03:51

NoSQLMongoDB

2011-08-02 16:08:52

NoSQLMongoDBCassandra

2019-03-20 15:59:11

NoSQLRedis數據庫

2010-08-31 09:11:58

2011-09-14 15:30:00

MongoDB

2011-03-04 09:32:31

NoSQL就業形勢Cassandra

2010-08-12 09:43:31

CassandraMongoDB

2013-05-24 10:01:40

R語言

2011-05-16 10:29:44

HandlerSockNoSQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线免费观看 | 欧美日韩一区二区三区不卡视频 | 国产xxxx搡xxxxx搡麻豆 | 成年人在线电影 | 欧美精品第一区 | 亭亭五月激情 | 日韩午夜在线播放 | 五月婷婷在线视频 | 日韩成人在线一区 | 91精品国产欧美一区二区 | 欧美视频在线播放 | 视频在线h| 国产精品久久精品 | 粉嫩一区二区三区国产精品 | 干干天天 | 羞羞午夜| 在线观看成人 | 亚洲精品中文在线观看 | 羞羞视频网站免费观看 | 国产亚洲精品美女久久久久久久久久 | 国产aaaaav久久久一区二区 | 毛片一级黄色 | 欧美a视频 | aaa国产大片| 国产精品国色综合久久 | 欧美一级黄带 | 好好的日在线视频 | 国产精品久久久久久高潮 | 国产精品99久久久久久www | 日韩一区二区免费视频 | 综合久久99 | 国产黄色免费网站 | 亚洲国产成人精品女人久久久野战 | 欧美天堂 | www.欧美视频 | 欧美一区免费 | 国产精品美女www爽爽爽 | 精品一区二区三区四区视频 | 欧美高清视频一区 | 日韩在线视频一区 | 日本亚洲精品成人欧美一区 |