`
xiaolin0199
  • 浏览: 573137 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

实战mongodb存取icbase

 
阅读更多

本地安装mongodb

1.ubuntu安装
  sudo apt-get install mongodb  会安装很多依赖的包
  安装完后会自动启动服务

  开始:sudo service mongodb start
  停止:sudo service mongodb stop

  xiaofei@xiaofei-desktop:~$ ps aux | grep mongodb
mongodb  12470  0.0  0.1  70348  3624 ?        Ssl  16:20   0:00 /usr/lib/mongodb/mongod --config /etc/mongodb.conf
xiaofei  12496  0.0  0.0   3544   832 pts/3    S+   16:20   0:00 grep --color=auto mongodb

2.看看/etc/mongodb.conf文件

# This is an config file for MongoDB master daemon mongod
# it is passed to mongod as --config parameter

logpath = /var/log/mongodb/mongod.log
dbpath = /var/lib/mongodb/

# use 'true' for options that don't take an argument     
logappend = true
bind_ip = 127.0.0.1
#noauth = true 

3.浏览器中输入http://127.0.0.1:28017/,即可查看数据库一些基本系统信息

 

连接mongodb并建立一个新数据库

1.安装 pymongo
  easy_install pymongo

  连接mongodb
  >>> from pymongo import Connection
  >>> conn = Connection("127.0.0.1",27017)
  
  如果不存在就创建一个icbase
  >>> db = conn.icbase
  >>> db
  Database(Connection('127.0.0.1', 27017), u'icbase')

  在db上创建一个document
  >>> attrs = db.attrs
  >>> import datetime
  >>> attr = {'author':'Mike','text':'My first blog post!','tags':["mongodb", "python", "pymongo"],'date':datetime.datetime.utcnow()}
  >>> attrs.insert(attr)
  ObjectId('500e65103ec1ee314c000001')

  查询
  >>> attrs.find_one()
  {u'date': datetime.datetime(2012, 7, 24, 9, 3, 55, 440000), u'text': u'My first blog post!', u'_id': ObjectId('500e65103ec1ee314c000001'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}

  >>> attrs.find_one({'author':'mike'})
  >>> attrs.find_one({'author':'Mike'})
  {u'date': datetime.datetime(2012, 7, 24, 9, 3, 55, 440000), u'text': u'My first blog post!', u'_id': ObjectId('500e65103ec1ee314c000001'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}

  删除
  >>> attrs.remove({'author':'Mike'})

 

 

写脚本将icbase的信息插入到mongodb

写道

{'ic_id':xxx,'ic_partno':xxx,'ic_mfr':mfr_id,'attrname1_id':attrvalue1,'attrname2_id':attrvalue2,......}

*mfr_id: 是icbase_mfr的id
*attrname1_id: 是icbase_attrname的id
*attrvalue1: 是icbase_icattrvalue的value

{ "_id" : ObjectId("500f6a7b3ec1ee0edd0009f1"), "600" : "100 Ohms", "669" : "PTC", "3862" : "1", "706" : "20 %", "577" : "Thermistors - PTC", "576" : "PTC", "136" : "300 mAmps", "ic_partno" : "PRG18BB101MB1RB", "ic_id" : 2545, "695" : "SMD/SMT", "3576" : "http://www.murata.com/products/catalog/pdf/r90e.pdf", "540" : "Reel", "3856" : "http://cn.mouser.com/Catalog/Simplified_Chinese/638/384.pdf", "3854" : "Thermistors - PTC 100 OHM 24V", "3855" : "81-PRG18BB101MB1RB", "3853" : "PRG18BB101MB1RB", "739" : "24 V", "629" : "PRG", "501" : "- 10 C to + 60 C", "612" : "是", "321" : "Murata", "161" : "0.8 mm W x 1.6 mm L x 0.8 mm H", "ic_mfr" : 119, "538" : "0603" }

所有数据导完预计30-40分钟

273W,总共花掉:0:50:09.411991

 

 

尝试在icgoo中使用这些数据

1.读取每个型号的详细参数时使用;
2.详细参数过滤时使用;


在改变之前,首先再次检查了一下在调用产品详细参数的地方,将所以多余的要读库的行为去掉,
只使用attr_name_id,不再循环内通过该id去AttrName找对象.

1.product.models
  class Product:
  有一个icbase方法,
        #ic = IC.objects.get(pk=self.ic_id)
        #if ic:
        return self.ic.attrs
  本来self.ic就是外键对象,可以直接用,注释掉前二句话,不过外键的调用好像也是跟上面是一样,这样改应该效果没有变化

2.在做参数过滤时,对型号进行循环时
                #try:
                    #obj_key = AttrName.objects.get(id=key)
                #except:
                    #continue
    原先是要将key从AttrName中读取对象的,现在不读对象,还是只保存id_key

 

 

查看我的mongodb状态

写道
> db.attrs.stats()
{
"ns" : "icbase.attrs",
"count" : 2731252,
"size" : 1415603180,
"storageSize" : 1558881712,
"nindexes" : 1,
"ok" : 1
}
> db.attrs.totalIndexSize()
208570256
> db.attrs.getIndexes()
[
{
"name" : "_id_",
"ns" : "icbase.attrs",
"key" : {
"_id" : ObjectId("000000000000000000000000")
}
}
]


创建ic_id的索引,但是失败

> db.attrs.ensureIndex({ 'ic_id' : 1 })
Thu Jul 26 14:07:41 MessagingPort recv() error "Connection reset by peer" (104) 127.0.0.1:27017
Thu Jul 26 14:07:41 JS Error: Error: error doing query: failed (anon):100
Thu Jul 26 14:07:41 trying reconnect to 127.0.0.1
Thu Jul 26 14:07:41 reconnect 127.0.0.1 ok
Thu Jul 26 14:07:41 JS Error: Error: error doing query: failed (anon):100


看了一下日志:

Thu Jul 26 14:49:03 building new index on { ic_id: 1.0 } for icbase.attrs...
Thu Jul 26 14:49:03 Buildindex icbase.attrs idxNo:1 { ns: "icbase.attrs", key: { ic_id: 1.0 }, name: "ic_id_1" }
1166400/2731251 42%
Thu Jul 26 14:49:16 shutdown: going to flush oplog...
Thu Jul 26 14:49:16 shutdown: going to close sockets...
Thu Jul 26 14:49:16 shutdown: waiting for fs...
Thu Jul 26 14:49:16 shutdown: closing all files...
Thu Jul 26 14:49:16 closeAllFiles() finished
Thu Jul 26 14:49:16 connection accepted from 127.0.0.1:33860 #2
Thu Jul 26 14:49:16 shutdown: removing fs lock...
Thu Jul 26 14:49:16 Listener on port 27017 aborted
Thu Jul 26 14:49:16 dbexit: really exiting now
ERROR: Client::shutdown not called!
Thu Jul 26 14:49:48 Mongo DB : starting : pid = 7291 port = 27017 dbpath = /var/lib/mongodb/ master = 0 slave = 0 32-bit

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
** see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

应该是一个数据块在32位mongodb下不能超过2G,原来attrs就有1.5G了,在索引创建到42%的时候应该就超过这个限制了,所以不成功.......

默认情况下每个表都会有一个唯一索引:_id,如果插入数据时没有指定_id,服务会自动生成一个_id,为了充分利用已有索引,减少空间开销,最好是自己指定一个unique的key为_id,通常用对象的ID比较合适,比如商品的ID。

_id的索引占用情况
> db.attrs.totalIndexSize()
208570256

> db.attrs.dropIndex('_id_')
{ "nIndexesWas" : 1, "errmsg" : "may not delete _id index", "ok" : 0 }
不能删除

*****
或者可以重新插入数据,但在插入数据的时候手动指定'_id' = ic_id,这样会'_id_'索引就是ic_id的索引


重新在icbase上建一张新表:attrs2,将'_id'指定为ic_id

{ "_id" : 18, "740" : "50 Volts", "612" : "是", "ic_id" : 18, "695" : "SMD/SMT", "55" : "1000 pF", "706" : "10 %", "577" : "多层陶瓷电容 (MLCC) - SMD/SMT", "576" : "General Type MLCCs", "ic_mfr" : 94, "501" : "- 55 C to + 125 C", "540" : "Reel", "321" : "Kemet", "168" : "0.1", "688" : "C0G (NP0)", "ic_partno" : "C1812C102K5GACTU", "161" : "3.2 mm W x 4.5 mm L", "538" : "1812 (4532 metric)" }

> db.attrs2.stats()
{
"ns" : "icbase.attrs2",
"count" : 1468431,
"size" : 703207344,
"storageSize" : 726707424,
"nindexes" : 1,
"ok" : 1
}

 

MongoDB数据文件内部结构:

http://blog.nosqlfan.com/html/3515.html

 

分享到:
评论

相关推荐

    58同城高级系统架构师带你实战MongoDB集群分布式存储

    ### MongoDB集群分布式存储实战知识点详解 #### 一、MongoDB简介与应用场景 MongoDB是一款开源的NoSQL数据库系统,以其高性能、高可用性和易扩展性而闻名。它使用JSON-like的文档来存储数据,非常适合处理半结构化...

    张龙 MongoDB实战张龙 MongoDB实战张龙

    张龙 MongoDB实战张龙 MongoDB实战

    《MongoDB实战》第2版-第3章-代码实战Mongodb1

    《MongoDB实战》第二版是MongoDB官方团队与业界专家合作撰写的一本权威书籍,针对MongoDB这一NoSQL数据库的实战应用进行了深入讲解。MongoDB因其高并发、高性能、灵活的数据模型、易于扩展和分布式查询支持等优势,...

    mongodb存取文件、webuploader断点续传,支持秒传,openOffice转pdf实现在线预览

    利用mongodb存储文件,前台使用百度webuploader的文件md5实现断点续传,一次上传,下次秒传,解决文件重复问题,避免数据冗余,文件上传后支持下载, 特定格式支持在线预览,office转pdf后前台新页面显示pdf,相关...

    java操作mongodb存储文件实例

    将一系列图片文件存储到MongoDB中 java操作mongodb存储文件

    mongodb,c#存取图片

    在这个"mongodb,c#存取图片"的小Demo中,我们将学习如何使用C#和MongoDB .NET驱动程序来存取图片数据。MongoDB .NET驱动程序是官方提供的一个强大的工具,它允许开发者用C#语言轻松地操作MongoDB数据库。 首先,你...

    mongodb实战中文pdf

    本PDF文档“MongoDB实战”提供了一种深入理解和应用MongoDB的途径,适合对NoSQL数据库感兴趣的开发者、数据工程师以及IT专业人员。 在MongoDB实战中文版中,你将学习到以下关键知识点: 1. **MongoDB基础**:...

    MONGODB实战第2版.pdf.zip

    MongoDB实战第2版.pdf.zip是一个压缩包,包含了一份关于MongoDB的实战指南。MongoDB是一种流行的开源、文档型数据库,适用于处理大量结构化和半结构化的数据。这本书的第二版很可能提供了对MongoDB最新特性和最佳...

    MongoDB实战第二版(英文)

    mongodb 实战第二版,基于mongodb3.0 讲解How does MongoDB help you manage a huMONGOus amount of data collected through your web application? With this authoritative introduction, you'll learn the many ...

    C#\MongoDB应用开发实战\MongoDB

    总的来说,"C#\MongoDB应用开发实战"课程将带你逐步掌握使用C#与MongoDB进行交互的各项技能,无论你是初学者还是有经验的开发者,都能从中受益,提升你的MongoDB开发能力。通过实际项目练习和理论知识的结合,你将...

    MongoDB实战:MongoDB in Action

    "MongoDB实战:MongoDB in Action"是一本专为开发者和数据库管理员设计的书籍,旨在深入理解和应用MongoDB。这本书分为中英文两个版本,为读者提供了全面的学习资源。 1. **文档型数据库**:MongoDB是NoSQL数据库的...

    深入浅出MongoDB应用实战开发视频教学

    深入浅出MongoDB应用实战开发视频教学,里面包含笔记和资料

    MONGODB实战 第2版.pdf

    MongoDB实战第二版是一本深度探讨MongoDB数据库的权威指南,专为那些希望掌握这个流行的NoSQL数据库系统的技术人员设计。MongoDB是一个分布式文档数据库,以其灵活性、高性能和易扩展性而受到全球开发者的广泛欢迎。...

    mongoDB集群实战.pdf

    MongoDB集群实战的知识点包括了MongoDB的基本概念、集群的部署方法以及主从复制模式的实战部署步骤。 首先,我们来看MongoDB的基本概念。MongoDB是一个开源的非关系型数据库,它的特点包括分布式存储、面向文档的...

    Mongodb视频-燕十八 mongodb视频教程全集21讲+mongodb高级实战开发视频教程

    根据提供的文件信息,我们可以推断出这是一套关于MongoDB的视频教程,由燕十八主讲,包含了21讲的基础教程以及高级实战开发教程。接下来,我们将基于这些信息来生成相关的知识点。 ### MongoDB简介 MongoDB是一种...

    Spring Boot 实战 - mongodb

    **Spring Boot实战-MongoDB** MongoDB是一款高性能、开源、无模式的文档型数据库,它在处理大量数据时表现出色,特别适合于那些需要快速、灵活存储非结构化或半结构化数据的应用场景。Spring Boot作为Java开发者的...

    MongoDB进阶与实战:微服务整合、性能优化、架构管理.docx

    MongoDB 进阶与实战:微服务整合、性能优化、架构管理 MongoDB 是一种流行的开源非关系型数据库(NoSQL),它以文档为模型,使用类似于 JSON 的 BSON 格式进行数据存储。MongoDB 具有强大的查询和索引功能,并且...

    mongodb教程权威指南实战

    [MongoDB权威指南-英文版8天学通MongoDB10天掌握MongoDB(2012完整版)MongoDB基础教程MongoDB权威指南MongoDB实战MongoDB实战中文版mongodb学习手册以mongodb为主的nosql调研

    mongodb项目实战(初战)源代码

    在"mongodb项目实战(初战)源代码"中,我们可能会深入学习如何利用MongoDB进行实际项目开发,理解其核心概念和操作,以及如何在实际场景中应用。 首先,MongoDB的核心概念包括文档(Document)、集合(Collection...

Global site tag (gtag.js) - Google Analytics