问题标签 [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.
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。
因此,就如何报告数据而言,我们将查看已打开电子邮件的数量。因此,每日、每周、每月和每年的报告,我们不需要立即生成报告,可能每天的写入量可能很大,而只需要大量读取,但可能首先需要最新的数据。
那么考虑所有这些因素,什么是最好的分片键?
mongodb - 关于mongodb索引
我有一个关于 mongodb 索引的问题。假设我们有两个模型:
问题
如果我能找到一些书:
我应该为 Book 创建哪个索引
或者
为什么?
javascript - 获取 Meteor 中集合的索引列表
如何使用 Meteor 获取集合中的索引列表?
类似于(或基于代理)Mongo 的
东西 Meteor 中还没有太多的索引 API(最终会有一个);但我希望有人已经解决了这个问题
干杯db.collection.getIndexes
mongodb - 哈希和升序索引之间的 Mongodb 性能差异(有什么理由不在无序字段中使用哈希?)
在 mongodb 中有多种类型的index。对于这个问题,我对可用于排序的升序(或降序)索引和根据文档“主要与分片集群一起使用以支持散列分片键”(来源)确保“更多数据分布均匀”(来源)
我知道你不能像这样创建索引:db.test.ensureIndex( { "key": "hashed", "sortOrder": 1 } )
因为你得到一个错误
我的问题:
指数之间:
db.test.ensureIndex( { "key": 1 } )
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 是理想的,但这是不允许的。
mongodb - 是否应该为小确定大小的 mongo 集合创建索引?
假设我有一个 mongo 集合,它具有固定数量的条目,永远不会超过 300-400 的计数。例子:
在这些字段中,我想索引姓名和电话号码。
为这么小的集合创建索引是否可取?该决定是否完全取决于收藏的规模?这是否取决于我要创建的索引数量?
perl - 使用 Perl 驱动程序在 MongoDB 中查询字段的顺序
我在 MongoDB::Collection->find 函数中发现了一个奇怪的行为,并想问这是否是由于我对驱动程序工作方式的误解造成的,这确实是一种奇怪的行为。
我想进行一个查询,搜索索引字段,但也搜索其他一些字段。为了确保 MongoDB 将使用现有索引,我考虑将搜索词作为 array_ref 传递,字段按照我希望它们的顺序进行传递,但是 explain() 函数显示使用 BasicCursor 并扫描所有文档。另一方面,如果我将搜索词作为 hash_ref (不确保字段顺序)传递,MongoDB 会以正确的顺序获取字段并使用现有索引。
我有一个包含以下文件的集合:
有一个名为customer_1_date_1
客户和日期字段的索引。
当我将搜索词作为数组 ref 给出时,解释命令指出:
另一方面,当我将搜索词作为哈希引用给出时,解释命令指出:
所以,我的问题是:我应该相信哈希 ref 总是得到现有的索引吗?有什么方法可以在不使用其他模块的情况下确保这一点?
谢谢你们,
娟妈
mongodb - 同时使用排序和查询时,MongoDB 中的 MapReduce 索引使用情况
为了获得最佳性能,如果您同时为MapReduce提供 asort
和 a ,您是否应该:query
一个索引,其中包含排序中使用的字段,然后是查询中使用的字段
一个索引,其中包含查询中使用的字段,然后是排序中使用的字段
两个独立的索引
例如文档包含字段A, B, C, D
。Map-Reduce 使用按字段排序A
和按字段查询B, C
。
以下哪个指标更可取:
{ "A" : 1, "B" : 1, "C" : 1 }
{ "B" : 1, "C" : 1, "A" : 1 }
{ "A" : 1 }
,{ "B" : 1, "C" : 1 }
这在任何地方都有记录吗?(同时使用排序和查询时,map-reduce 的索引使用情况。)
mongodb - 我怎样才能得到特定的数组(或数组的键)?
如何在 mongoDB 中获取包含“unique6”的特定数组(或数组的键)。
注意:数组中的值是唯一的。
mongodb - mongodb 复合索引与索引相交
跨分片的集合中将有大约 30 亿个文档。假设我将使用不完全由索引完成的查询。而且我没有使用按键进行排序。
具有以下索引是否有意义(与查询匹配):
或者:
mongodb - MongoException:索引名称:代码已经存在不同的选项
我有一个具有以下结构的mongodb
集合term
和一个将术语集合表示为的 java 类Term.java
我term
收集了很多文件。现在我添加了一个新字段Term.java
作为
在向集合添加字段status
后Term.java
,在向集合中插入一个新术语时,term
我得到了一个异常:
com.mongodb.MongoException:索引名称:代码已经存在不同的选项
我正在使用 MongoDB 版本:2.6.5 和 spring-data-mongodb 版本:1.3.2