我正在开发一个新项目,我必须开发一个可以存储在文件数据库(例如CouchDB)中的反向索引。我在Ruby 1.8.7编码。
这是倒排索引的格式:
{
"en": {
"#linux": {
"re": 144,
"patch": 142,
"1": 55,
"to": 53
},
"#something": {
"word": 20
}
},
"fr": {},
"es": {}
}
我想要一种使用类似CouchDB的方法,我可以通过一系列检查来创建条目,如下所示:
#linux
),则创建它patch
),则创建它并将其值设置为1
['en']['#linux']
或任何变量时,重复并将计数(最右边的值)加1。我使用基本哈希完成了问题,但是当我将脚本设置为大约1TB或更多文本时,将这些内容放在内存中并不会很好。
所选答案适用于此。唯一的区别是对语法稍作修改,其工作原理如下:
@db.collection.update({"_id" => lang}, {"$inc" => {"#{tag}.#{word}" => 1}}, { :upsert => true })
答案 0 :(得分:3)
CouchDB不会成为您工作的最佳工具。特别是它不适合不增长文档的快速更新(您的增量)。在每次更新时,它会在磁盘上创建一个新版本的文档,因此您的数据库将非常庞大,磁盘将会很忙。
我建议查看MongoDB。它具有快速的就地更新,索引和更丰富的查询语言。例如:
db.collection.update({_id: 'en'},
{$inc: {'linux.re': 1}},
true);
这将找到ID为“en”的文档,并递增其['linux']['re']
字段。如果找不到文档,或者['linux']
不存在,或者['linux']['re']
不存在,则会自动创建它们。这是我最喜欢的数据库之一。