我正在使用 mongodb 来持久化一个非常大的(90G),它有近 40,000,000 个项目。我读取并解析这个文件并将所有项目插入到 mongodb(我的编程语言是 perl,batch_insert,我将一个项目映射到一个 mongodb 文档)。
在插入之前,我已经预先创建了索引(大约 10 个索引键)。我发现插入速度不能满足我的需要(每秒 200 到 400 个项目)。我知道太多的索引键肯定会减慢我的插入速度,尤其是当集合的大小变得很大时。所以我想知道我是否可以在将所有数据转储到 db 后索引它们。
谁能告诉我这种方式是否可用,是否绝对可以节省我的时间?
我有一个MongoDB集合db.articles,它有2个键,“标题”和“摘要”。我想对这两个键进行文本搜索。例如,搜索文本是“物理”,我想要所有文档返回其“标题”或“摘要”包含关键字“物理”。但是如何创建文本索引以满足我的命令确实让我困惑:
我应该为它们创建两个单独的文本索引,如下所示:
db.articles.ensureIndex({title:"text"})
db.articles.ensureIndex({abstract:"text"})
Run Code Online (Sandbox Code Playgroud)
或者
我应该在单个命令中创建索引并给予相同的权重:
db.articles.ensureIndex(
{
title: "text",
abstract: "text",
},
{
weights: {
title: 1,
abstract:1,
},
name: "TextIndex"
}
)
Run Code Online (Sandbox Code Playgroud)
我已经习惯了find()这个操作,它的查询粒度是key,也就是说,你应该指明你要查询的key。但是对于文本索引,它就像一个文档粒度,你不能指明你要查询的key。想要查询,只能指定文档名称。那么,如果我想对某个特殊键进行文本搜索,该怎么办呢?
In my mongodb database,there is only one document below:
{
"_id" : ObjectId("5226efc5ccf23796f9590f67"),
"count" : NumberLong(126045),
"eissn" : "1466-5034",
"grade" : 0.0,
"issn" : "1466-5026",
"journalAlias" : ["International journal of systematic and evolutionary microbiology", "Int J Syst Evol Microbiol", "Int. J. Syst. Evol. Microbiol."],
"journalName" : "International journal of systematic and evolutionary microbiology",
"ccNameCount" : [{
"ccName" : "ATCC",
"paperCount" : 1,
"strainCount" : 2
}, {
"ccName" : "ATCC",
"paperCount" : 3,
"strainCount" : 4
}, {
"ccName" : …
Run Code Online (Sandbox Code Playgroud) DELETE FROM sales;
Run Code Online (Sandbox Code Playgroud)
并且如果sales
表上没有其他未提交的事务。关于该DELETE
陈述,哪项陈述是正确的?
它删除表中的所有行并且删除的行不能回滚
它删除所有行以及表的结构
如果表有主键,它不会删除行
它删除表中的所有行并且可以回滚删除的行
当然,正确答案在1到4之间。我不知道删除的数据是否可以回滚。
如果有人知道,请帮助我。谢谢。