2013年5月29日

在MongoDB中一起使用$or和sort()时,查询性能差的一种解决方案

摘要: 在前面文章曾经提到,在MongoDB中一起使用$or和sort()时,查询性能会很差,详见:http://www.cnblogs.com/xinghebuluo/archive/2011/12/01/2270590.html在mongodb的计划中,2.5.w版本中可能会修改这个bug。我的项目中也遇到了这个问题,后来自己想了一个解决方案,暂时规避了这个问题,现在把这个方案分享出来,和大家讨论一下.这个解决方案是受到了mongos的源代码的启示,众所周知mongodb是分布式架构,那么在我们使用mongos查询并使用排序的时候,mongos需要把查询请求发送给各个shard,并将每个shard 阅读全文

posted @ 2013-05-29 10:18 xinghebuluo 阅读(5872) 评论(4) 推荐(3)

2012年2月21日

mongodb指南(翻译)(二十五) - developer zone - 插入对象(二)模式设计(Schema Design)

摘要: 合法关键字名称文档中的关键字在命名时需要遵循下面两个限制条件:"$"字符不能作为关键字的第一个字符"."字符不能被用于关键字中模式设计(Schema Design)Mongodb中的模式设计与关系型DBMS大不相同。在创建应用前很有必要来了解一下mongodb中的模式设计。在关系型数据模型中,对于一个给定依赖于用例的关系模型,理论上是有一个正确的设计。这就是通常的第三范式(3NF).一般人认为这是为了效率考虑。在Mongodb中,模式设计不仅仅是一个将数据模型化的方法,更是用例的模型化。对于绝大多数的用例,模式设计需要单独定制。这有优点和缺点-用例可以得 阅读全文

posted @ 2012-02-21 14:02 xinghebuluo 阅读(1801) 评论(0) 推荐(0)

2012年2月14日

mongodb指南(翻译)(二十四) - developer zone - 插入对象(一)简介

摘要: 当我们向Mongodb写数据,它们永远是以文档格式插入的。文档是一种数据结构,类似于JSON,Python 字典,和 Ruby的散列。在这里,我们多聊聊面向文档和怎样向Mongodb插入数据。面向文档面向文档的数据库存储“文档”,但是这里的文档指的是结构化的文档 - 该术语可能来自于"XML 文档"。其他结构化的数据,如JSON,甚至在很多语言中的内嵌字典,都有着相似的性质。存储在Mongodb中的文档是类JSON的。JSON是一种存储程序中对象风格数据的很好的方法,一定意义上讲它是语言无关并且是基于一些标准的。为了更加高效,Mongodb使用了一种称为BSON的格式,以二 阅读全文

posted @ 2012-02-14 13:36 xinghebuluo 阅读(1329) 评论(6) 推荐(1)

2012年2月1日

mongodb指南(翻译)(二十三) - developer zone - 索引(七)索引优化建议

摘要: 首先,mongodb中的索引同MySQL中的很类似,因此很多在MySQL中创建高效索引的技术也适用于mongodb。再者,而且可能更加重要的是,索引优化建议也只能到此为止。对于你的应用,最好的索引依赖于几个重要的因素,包含你期望的查询种类,读/写频率,甚至系统的剩余内存。这意味着最好的策略就是对数据集准备多套索引配置方案,然后观察那个表现最好。索引策略这里有一些创建良好索引的基本原则。创建匹配查询的索引如果你仅对一个关键字查询,那么使用单键索引就可以了。例如,你可能正在搜索博客发布的缓动环(slug):db.posts.find({ slug : 'state-of-mongodb-2 阅读全文

posted @ 2012-02-01 14:19 xinghebuluo 阅读(923) 评论(0) 推荐(0)

2012年1月31日

mongodb指南(翻译)(二十二) - developer zone - 索引(六)多键

摘要: Mongodb提供了一个有趣的“多键”特性,可以自动对对象的数组值进行索引。标签就是个好例子。假定你有一篇包含了许多分类标签的文章:$ dbshell> db.articles.save( { name: "Warm Weather", author: "Steve",tags: ['weather', 'hot', 'record', 'april'] } )> db.articles.find(){"name" : "Warm Weather&q 阅读全文

posted @ 2012-01-31 11:44 xinghebuluo 阅读(904) 评论(0) 推荐(0)

2012年1月30日

mongodb指南(翻译)(二十一) - developer zone - 索引(五)在后台创建索引

摘要: 默认情况下,ensureIndex()是阻塞型操作,并会暂停数据库上所有正在进行的其他操作,直到创建索引完成。但是,在高于或等于版本1.3.2的mongodb中,提供了可选的后台创建索引的选项。要在后台创建索引,增加background:true选项。例如:> db.things.ensureIndex({x:1}, {background:true});> db.things.ensureIndex({name:1}, {background:true, unique:true,... dropDups:true});当后台模式启动时,其他的操作,包含写,在创建索引期间不会被阻塞 阅读全文

posted @ 2012-01-30 17:09 xinghebuluo 阅读(1288) 评论(0) 推荐(0)

2012年1月18日

mongodb指南(翻译)(二十) - developer zone - 索引(四)地理信息索引

摘要: v1.4+MongoDB支持2维地理信息索引。它被设计用来进行脑海中基于位置的查询,诸如“查找距离我的位置最近的N个场所”。它还可以高效的处理额外的查询条件,比如“查找距离我的位置最近的N个博物馆”。为了可以使用这种索引,你需要在你的对象中设置一个字段,该字段可以是一个子对象或者前两个元素为x,y坐标的数组(或者y,x-只要一致就行;为了确保一致性,推荐在你的客户端代码中使用保持排序的词典/hashes。)。一些例子:{ loc : [ 50 , 30 ] } //SUGGESTED OPTION{ loc : { x : 50 , y : 30 } }{ loc : { foo : 50 , 阅读全文

posted @ 2012-01-18 10:52 xinghebuluo 阅读(5404) 评论(2) 推荐(0)

2011年12月28日

mongodb指南(翻译)(十九) - developer zone - 索引(三)索引的删除、重建、版本

摘要: 后台创建索引默认情况下,建立索引会阻塞数据库的其他操作。V1.3.2及更高版本提供了后台创建索引的功能。删除索引删除指定集合的所有索引:db.collection.dropIndexes();删除单个索引:db.collection.dropIndex({x: 1, y: -1})不使用辅助函数,直接作为命令来运行:// note: command was "deleteIndexes", not "dropIndexes", before MongoDB v1.3.2// remove index with key pattern {y:1} from 阅读全文

posted @ 2011-12-28 16:49 xinghebuluo 阅读(3080) 评论(0) 推荐(0)

2011年12月19日

mongodb指南(翻译)(十八) - developer zone - 索引(二)_id索引、复合索引、稀疏索引、数组索引、唯一索引

摘要: _id索引除了定容量集合外的所有集合,都会自动为_id字段创建一个索引。这是一个特殊索引并且不能被删除。该_id索引强制它的关键字都是唯一的(除了分片环境下的一些情景)。_id值是恒定不变的。对内嵌关键字进行索引(“点表示法”)在Mongodb中,你可以对内嵌文档的关键字进行索引。访问子文档的方法被视为点表示法。例如:db.things.ensureIndex({"address.city": 1})文档作为关键字被索引的字段可以是任意类型,包括(内嵌的)文档:db.factories.insert( { name: "xyz", metro: { ci 阅读全文

posted @ 2011-12-19 16:37 xinghebuluo 阅读(2780) 评论(0) 推荐(0)

2011年12月17日

mongodb指南(翻译)(十七) - developer zone - 索引(一)简介

摘要: 索引通常可以显著的提高查询性能。仔细考虑你的应用中会用到的查询种类这样你就可以定义相关的索引了。一旦索引定义完成,在mongodb中实际创建它们是很简单的。Mongodb的索引在概念上和MySQL等关系型数据库的索引非常相似。当你在某些情境下需要在MySQL中创建一个索引,这样的情境同样适用于Mongodb。基本概念一个索引就是一个数据结构,它收集集合中文档的指定字段的值。这种数据结构被Mongo的查询优化器用来对集合中文档进行快速分类和排序。从形式上讲,这些索引按“B-Tree”索引形式来实现的。在shell中,你可以调用ensureIndex()创建一个索引,参数是一个指定一个或多个关键字 阅读全文

posted @ 2011-12-17 16:10 xinghebuluo 阅读(623) 评论(0) 推荐(0)

导航