首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建在Mongo上的数据模型:将ID存储为一个巨大的字符串或字符串数组?Mongo在使用正则表达式还是在数组中查找时速度更快?

构建在Mongo上的数据模型:将ID存储为一个巨大的字符串或字符串数组?Mongo在使用正则表达式还是在数组中查找时速度更快?
EN

Stack Overflow用户
提问于 2013-03-26 15:51:10
回答 1查看 108关注 0票数 0

我们需要帮助来构建我们的Mongo数据库。我们需要存储国家ID,然后运行查询以返回包含匹配国家的文档。假设ID是6-10个字符的字符串。

有两个选项:

1)将国家/地区ID存储为一个由分隔符分隔的大字符串

(例如,/)。Ex: "IDIDID1/IDIDID2/IDIDID3/IDIDID4/IDIDID5".

2)将in存储在数组中。

代码语言:javascript
复制
 Ex: ["IDIDID1", "IDIDID2", "IDIDID3", "IDIDID4", "IDIDID5"].

我们希望针对"Find all documents containing country ID IDIDID3.“这样的查询进行优化

对于选项1,我们计划使用RegEx来查询文档(例如,/IDIDID3/)。

对于选项2,我们将使用标准$in运算符。

哪个选项会产生更好的读取性能?

使用字符串方法是否会产生更好的性能,因为您可以索引字符串(与Mongo只能索引一个数组的限制相反)?

我们正在使用MongoMapper。

EN

回答 1

Stack Overflow用户

发布于 2013-03-26 18:10:12

摘自MongDB手册

代码语言:javascript
复制
$regex can only use an index efficiently when the regular expression 
has an anchor for the beginning (i.e. ^) of a string and is a case-sensitive match.
Additionally, while /^a/, /^a.*/, and /^a.*$/ match equivalent strings, 
they have different performance characteristics. 
All of these expressions use an index if an appropriate index exists; 
however, /^a.*/, and /^a.*$/ are slower. /^a/ can stop scanning after matching the prefix.

因此,使用数组和多键索引在性能方面更有意义

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15631924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档