草庐IT

Indexing

全部标签

MongoDb:如何为具有许多可搜索字段的数据创建正确的(复合)索引

更新:我需要补充一点,这个问题的重点是允许我为JsonRestStores定义模式。用户可以通过任意一个键或多个键进行搜索。因此,我无法轻易预测用户将搜索什么——可能是1、2、5个字段(对于人员、预订等数据丰富的字段尤其如此)假设我有一个这样的索引:{"item":1,"location":1,"stock":1}在MongoDbmanualonindexes之后:MongoDBcanusethisindextosupportqueriesthatinclude:theitemfield,theitemfieldandthelocationfield,theitemfieldandth

mongodb - 如何调试我的 mongodb 索引?

我的搜索在生产环境中花费了80多秒,但在我的本地环境中只需要一秒钟(数据几乎相同)。我不确定接下来可以采取什么步骤。查询看起来像:@params={search_field:'kamil'}User.only('username','email','name','role','utm_email').or({:"email"=>/#{@params[:search_field]}/i},{:"username"=>/#{@params[:search_field]}/i},{:"name"=>/#{@params[:search_field]}/i}).explain()explain

mongodb - 数据量大的MongoDB数据库加索引有什么影响?

我有一个包含数百万条推文的MongoDB数据库,看来要提高查询性能,我需要添加一个或多个额外的复合索引。将进入复合索引的字段上已经有单独的索引。在我开始添加这些索引之前,我想知道会产生什么影响,包括短期(添加初始索引是否需要几天时间?)和长期(是否会使插入速度足够慢)它超过了加快查询的好处?)这不是生产数据库-没有副本,没有分片。它运行在一个低端的linux机器上,它运行不多,如果有的话。正如我所说,数以百万计的推文。相关字段是userid和tweeted_at(日期)。机器上没有足够的可用空间,我没有任何地方可以放置我的数据库的副本,因此在副本上尝试它并不是很有帮助。我不期待确切的答

用于查找和排序的 MongoDB 索引用法

我有一个查询,其中find()使用与排序不同的文档属性。例如document={a:"",b:"",c:"",d:"",e:""}db.col.find({a:"",b:"",c:""}).sort({d:1,e:1})我可以创建两个索引,一个用于find(),一个用于sort(),MongoDB会相应地使用它们吗?db.col.createIndex({a:1,b:1,c:1})db.col.createIndex({d:1,e:1}) 最佳答案 当sort()操作需要一个完全独立于查询谓词的索引时,MongoDB(从3.0开始)

MongoDB 复合索引优化键和范围条件更新

已阅读thisdoc,它指出索引可以优化更新操作。然后,我将索引添加到我的集合中以优化我正在使用的更新操作。集合中的记录具有作为_id的对象和时间戳:{_id:{userId:"sample"},firstTimestamp:123,otherField:"abc"}我想做的是使用下面的查询操作更新:db.userFirstTimestamp.update({_id:{userId:"sample"},firstTimestamp:{$gt:100}},{_id:{userId:"sample"},firstTimestamp:100,otherField2:"efg"})我想根据'f

mongodb - Mongo/Morphia - $text 查询只需要一个文本索引'

我正在尝试使用Mongo+Morphia在类上创建和使用全文搜索。我是这样注释的:@Entity@Indexes(@Index(fields=@Field(value="$**",type=IndexType.TEXT)))publicclassProductimplementsComparable{@Id@ExposepublicObjectIdid;@ExposepublicStringname;@ExposepublicStringkey;@ExposepublicStringcategory;@ExposepublicStringbrand;@ExposepublicStrin

regex - MongoDB:哪个更快?正则表达式搜索字符串还是直接搜索数组?

我的应用程序当前在文本字段上执行正则表达式搜索,该文本字段是逗号分隔的Objectid。根据Mongodbdocumentation,Mongo在进行正则表达式搜索时使用索引。我最初的想法是使用数组来存储ObjectId,而不是使用字符串。但是数组搜索是否会比正则表达式搜索具有更好的性能,因为两者都使用索引? 最佳答案 此处的方法是使用ObjectId数组而不是逗号分隔的ObjectId字符串列表。数组将使用更少的空间:ObjectId字符串为24个字符,而BSONObjectId为12个字节。数组索引更有效:对于不以文本开头为根的

mongodb - 带有 $in 或 $or 的索引

我的文档结构是这样的{_id:"id1",field1:"val1",field2:"val2",outcome:"ABC"}我在结果字段上创建了索引。我必须找到仅包含{outcome:"ABC"}或{outcome:"XYZ"}的所有文档。如果我使用$or或$in,查询执行时间没有重大差异。例如db.coll.find({$or:[{outcome:"ABC"},{outcome:"XYZ"}]});db.coll.find({outcome:{$in:["ABC","XYZ"]}});在这种情况下,我应该使用哪个运算符$or或$in?为什么?任何帮助,将不胜感激。

具有复合索引的分片集群上的 MongoDB Oplog 游标

有一个OpLog游标,是否有可能在更新操作中获取除默认_id之外的另一个索引?背景:我有一个分片集群,使用复合索引作为分片键。此复合键的一部分用于确定哪一组分片用于存储数据(也称为TagAwareSharding)有一些NodeJS微服务在后台运行tailingtheOpLogs不同分片的ReplicaSets以触发对数据更改的进一步处理。现在,如果某些数据得到更新,OpLog中返回的唯一索引是默认的_id,这迫使我查询整个集群以获取复合索引的第二部分在进一步处理中利用整个分片键。该应用程序的写入非常密集,意味着每次更新需要对整个集群进行一次额外查询。如果我能在更新操作中获得整个复合索

Node.js MongoDB 创建多个索引 : no index name specified

我正在使用MongoDB版本2.6.11如何解决这个错误?在Node.jsAPIreference您可以传递的唯一参数是一个索引规范数组和一个回调函数,我应该在哪里指定索引名称?我正在使用的代码如下(假设我已经需要mongoclient并已连接到数据库):db.collection("MyCollection").createIndexes([{field1:1},{field2:1,field3:1}],function(err,result){//Errorhandlingcode});错误代码为67,错误的完整堆栈跟踪如下:MongoError:noindexnamespecif