python+mongoDB+pymongo常见命令及简单案例

MongoDB基本函数应用

__author__ = 'tianmh'

from pymongo import MongoClient

def get_db():

#建立链接

client = MongoClient("localhost", 27017)

#test,还有其他写法

db = client.test

return db

def get_collection(db):

#选择集合(mongo中collection和database都是lazy创建的,具体可以google下)

collection = db['posts']

print collection

def insert_one_doc(db):

#插入一个document

posts = db.posts

post = {"name":"lzz", "age":25, "weight":"55"}

post_id = posts.insert(post)

print post_id

def insert_mulit_docs(db):

#批量插入documents,插入一个数组

posts = db.posts

post = [ {"name":"nine", "age":28, "weight":"55"},

{"name":"jack", "age":25, "weight":"55"}]

obj_ids = posts.insert(post)

print obj_ids

##查询,可以对整个集合查询,可以根ObjectId查询,可以根据某个字段查询等

def get_all_colls(db):

#获得一个数据库中的所有集合名称

print db.collection_names()

def get_one_doc(db):

#有就返回一个,没有就返回None

posts = db.posts

print posts.find_one()

print posts.find_one({"name":"jack"})

print posts.find_one({"name":"None"})

return

def get_one_by_id(db):

#通过objectid来查找一个doc

posts = db.posts

obj = posts.find_one()

obj_id = obj["_id"]

print "_id 为ObjectId类型 :"

print posts.find_one({"_id":obj_id})

#需要注意这里的obj_id是一个对象,不是一个str,使用str类型作为_id的值无法找到记录

print "_id 为str类型 "

print posts.find_one({"_id":str(obj_id)})

#可以通过ObjectId方法把str转成ObjectId类型

from bson.objectid import ObjectId

print "_id 转换成ObjectId类型"

print posts.find_one({"_id":ObjectId(str(obj_id))})

def get_many_docs(db):

#mongo中提供了过滤查找的方法,可以通过各

#种条件筛选来获取数据集,还可以对数据进行计数,排序等处理

posts = db.posts

#所有数据,按年龄排序, -1是倒序

all =  posts.find().sort("age", -1)

count = posts.count()

print "集合中所有数据 %s个"%int(count)

for i in all:

print i

#条件查询

count = posts.find({"name":"lzz"}).count()

print "lzz: %s"%count

for i in  posts.find({"name":"lzz", "age":{"$lt":20}}):

print i

def clear_coll_datas(db):

#清空一个集合中的所有数据

db.posts.remove({})

if __name__ == "__main__":

db = get_db()

obj_id = insert_one_doc(db)

obj_ids = insert_mulit_docs(db)

#get_all_colls(db)

#get_one_doc(db)

#get_one_by_id(db)

#get_many_docs(db)

clear_coll_datas(db)


性能测试总结:

尽管Mongodb单机性能不如带PCIE卡的SQLServer,但是一旦分片,性能将提升几倍

在分4片的情况下,写入可达60000条/s

在分5片的情况下,写入可达80000条/s

值得一提的是,由于分片不均匀,导致90%的数据仅使用了60%的时间,剩下10%的数据仅在单点插入,所以性能下降的很厉害,如果分片足够多,我们的片键足够散列,让每片存储平均,性能还能有进一步提升。

另外有大神知道,怎么让分片的数据散列的更平均一点呢?因为mongodb分片用的一致性哈希,好像每个片节点无法设置虚拟节点,利用他原来的objectid也无法很平均的分片,望告知一二。

3、汇总总结:

想要达到1亿条数据10分钟插入,必须达到插入速度在16万/秒,所以如果我们将分片达到10片,理论上就可以达到1亿条数据10分钟的插入了,由于机器有限无法完成测试,不过最终20分钟的插入速度也让人满意了


简单案例分析:将10w个数据写入mongodb数据库内部,简单测试

代码:

__author__ = 'tianmh'

import pymongo

import json

import datetime,time

import copy

import sys, os

def getTimestampFromDatetime(d=None):

if d is None:

d = datetime.time.now()

return time.mktime(d.timetuple())

if __name__ == '__name__':

url = 'localhost'

port = 27017

max_pool_size = 50

start = getTimestampFromDatetime()

client = pymongo.MongoClient(url, port, max_pool_size)

db = client.testdb

saveData = []  #直接添加要存储的数据

for i in range(0, 100000):

saveData.append(

{

'count':i

}

)

db.test2.insert(saveData)

end = getTimestampFromDatetime()

print('time : {0}s'.format(end-start))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容