问题标签 [mongodb-indexes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
130 浏览

mongodb - MongoDB - 存储电子邮件像素跟踪数据的最佳 Shard Key 是什么

目前,我们向邮件列表中的订阅者发送电子邮件。这具有一个跟踪像素,该像素映射到一个 PHP 文件,然后将数据插入我们的 SQL Server 数据库。

电子邮件跟踪像素插入的当前平均值约为每天 80,000 个插入。而大约 800,000 次插入相当于大约 1GB 的硬盘空间,因此 10 天 1GB 的数据。

除此之外,我们还有其他插入和跟踪数据被插入到 SQL Server 数据库中,该数据库也恰好是网站使用的同一数据库。因此,出于空间、性能、许可成本和水平扩展等原因,我想将此分析跟踪数据从 SQL Server 数据库中移出 + 网站不需要此分析跟踪数据这一事实,因此我想将这些写入繁重的插入离开,以便网站数据库就是这样。

目前的表结构

TrackingPixelId | 用户名 | 代码 | 中 | 来源 | 查看日期 | 会话 ID

9109616 | 第1234章 'BULLETIN120115' | '电子邮件' | 'BULLETIN120115' | {日期时间} | bf7e2f801...

栏目信息

TrackingPixelId : PK 整数自动递增

用户 ID:整数

代码、媒介和来源:字符串/varchars

DateViewed: DateTime 例如 2015-01-13 06:18:24.920

SessionId : 例如 fa5cac87896e1c7b423051fffdb836a6

Code 和 Source 本质上是相同的,即打开的 Email Mail Out 的唯一 ID。

因此,就如何报告数据而言,我们将查看已打开电子邮件的数量。因此,每日、每周、每月和每年的报告,我们不需要立即生成报告,可能每天的写入量可能很大,而只需要大量读取,但可能首先需要最新的数据。

那么考虑所有这些因素,什么是最好的分片键?

0 投票
1 回答
310 浏览

mongodb - 关于mongodb索引

我有一个关于 mongodb 索引的问题。假设我们有两个模型:

问题

如果我能找到一些书:

我应该为 Book 创建哪个索引

或者

为什么?

0 投票
1 回答
1246 浏览

javascript - 获取 Meteor 中集合的索引列表

如何使用 Meteor 获取集合中的索引列表?
类似于(或基于代理)Mongo 的 东西 Meteor 中还没有太多的索引 API(最终会有一个);但我希望有人已经解决了这个问题 干杯db.collection.getIndexes

0 投票
2 回答
11488 浏览

mongodb - 哈希和升序索引之间的 Mongodb 性能差异(有什么理由不在无序字段中使用哈希?)

在 mongodb 中有多种类型的index。对于这个问题,我对可用于排序的升序(或降序)索引根据文档“主要与分片集群一起使用以支持散列分片键”(来源)确保“更多数据分布均匀”(来源

我知道你不能像这样创建索引:db.test.ensureIndex( { "key": "hashed", "sortOrder": 1 } )因为你得到一个错误

我的问题:

指数之间:

  1. db.test.ensureIndex( { "key": 1 } )

  2. db.test.ensureIndex( { "key": "hashed" } )

对于查询db.products.find( { key: "a" } ),哪个性能更高?是hashed关键O(1)


我是如何回答这个问题的:

在我知道你不能使用 多键索引之前hashed,我创建了一个表单的索引db.test.ensureIndex( { "key": 1, "sortOrder": 1 } ),并且在创建它时我想知道散列索引是否比升序索引更高效(散列通常是O(1))。我留下了现在的钥匙,因为(正如我上面提到的)db.test.ensureIndex( { "key": "hashed", "sortOrder": 1 } )是不允许的。但是问题是哈希索引更快地通过键搜索仍然留在我的脑海中。

我做索引的情况是:

我有一个集合,其中包含按键分类的排序文档列表。

例如 {key: a, sortOrder: 1, ...}, {key: a, sortOrder: 2, ...}, {key: a, sortOrder: 3, ...}, {key: b, sortOrder: 1, ...}, {key: b, sortOrder: 2, ...}, ...

由于我使用key分类和 sortOrder 进行分页,所以我总是使用一个值来查询过滤,key并使用sortOrder文档的顺序。

这意味着我有两个可能的查询:

  • 对于第一页db.products.find( { key: "a" } ).limit(10).sort({"sortOrder", 1})
  • 对于其他页面db.products.find( { key: "a" , sortOrder: { $gt: 10 } } ).limit(10).sort({"sortOrder", 1})

在这种特定情况下,搜索O(1)键和O(log(n))sortOrder 是理想的,但这是不允许的。

0 投票
3 回答
621 浏览

mongodb - 是否应该为小确定大小的 mongo 集合创建索引?

假设我有一个 mongo 集合,它具有固定数量的条目,永远不会超过 300-400 的计数。例子:

在这些字段中,我想索引姓名和电话号码。

为这么小的集合创建索引是否可取?该决定是否完全取决于收藏的规模?这是否取决于我要创建的索引数量?

0 投票
0 回答
224 浏览

perl - 使用 Perl 驱动程序在 MongoDB 中查询字段的顺序

我在 MongoDB::Collection->find 函数中发现了一个奇怪的行为,并想问这是否是由于我对驱动程序工作方式的误解造成的,这确实是一种奇怪的行为。

我想进行一个查询,搜索索引字段,但也搜索其他一些字段。为了确保 MongoDB 将使用现有索引,我考虑将搜索词作为 array_ref 传递,字段按照我希望它们的顺序进行传递,但是 explain() 函数显示使用 BasicCursor 并扫描所有文档。另一方面,如果我将搜索词作为 hash_ref (不确保字段顺序)传递,MongoDB 会以正确的顺序获取字段并使用现有索引。

我有一个包含以下文件的集合:

有一个名为customer_1_date_1客户和日期字段的索引。

当我将搜索词作为数组 ref 给出时,解释命令指出:

另一方面,当我将搜索词作为哈希引用给出时,解释命令指出:

所以,我的问题是:我应该相信哈希 ref 总是得到现有的索引吗?有什么方法可以在不使用其他模块的情况下确保这一点?

谢谢你们,

娟妈

0 投票
0 回答
63 浏览

mongodb - 同时使用排序和查询时,MongoDB 中的 MapReduce 索引使用情况

为了获得最佳性能,如果您同时为MapReduce提供 asort和 a ,您是否应该:query

  1. 一个索引,其中包含排序中使用的字段,然后是查询中使用的字段

  2. 一个索引,其中包含查询中使用的字段,然后是排序中使用的字段

  3. 两个独立的索引


例如文档包含字段A, B, C, D。Map-Reduce 使用按字段排序A和按字段查询B, C

以下哪个指标更可取:

  1. { "A" : 1, "B" : 1, "C" : 1 }

  2. { "B" : 1, "C" : 1, "A" : 1 }

  3. { "A" : 1 },{ "B" : 1, "C" : 1 }


这在任何地方都有记录吗?(同时使用排序和查询时,map-reduce 的索引使用情况。)

0 投票
1 回答
49 浏览

mongodb - 我怎样才能得到特定的数组(或数组的键)?

如何在 mongoDB 中获取包含“unique6”的特定数组(或数组的键)。

注意:数组中的值是唯一的。

0 投票
1 回答
639 浏览

mongodb - mongodb 复合索引与索引相交

跨分片的集合中将有大约 30 亿个文档。假设我将使用不完全由索引完成的查询。而且我没有使用按键进行排序。

具有以下索引是否有意义(与查询匹配):

或者:

0 投票
3 回答
32571 浏览

mongodb - MongoException:索引名称:代码已经存在不同的选项

我有一个具有以下结构的mongodb集合term

和一个将术语集合表示为的 java 类Term.java

term收集了很多文件。现在我添加了一个新字段Term.java作为

在向集合添加字段statusTerm.java,在向集合中插入一个新术语时,term我得到了一个异常:

com.mongodb.MongoException:索引名称:代码已经存在不同的选项

我正在使用 MongoDB 版本:2.6.5 和 spring-data-mongodb 版本:1.3.2