【问题标题】:MongoDB: Which would be faster? Regex search on string or direct search on array?MongoDB:哪个会更快?正则表达式搜索字符串还是直接搜索数组?
【发布时间】:2016-01-05 19:27:33
【问题描述】:

我的应用程序当前对一个以逗号分隔的 Objectid 的文本字段执行正则表达式搜索。根据Mongodb documentation,Mongo 在进行正则表达式搜索时使用索引。

我最初的想法是使用数组来存储 ObjectId,而不是使用字符串。但是数组搜索是否会比正则表达式搜索具有更好的性能,因为两者都使用索引?

【问题讨论】:

    标签: regex mongodb indexing


    【解决方案1】:

    使用 ObjectIds 数组而不是逗号分隔的 ObjectId 字符串列表是这里的方法。

    1. 数组将使用更少的空间:ObjectId 字符串为 24 个字符,而 BSON ObjectId 为 12 个字节。
    2. 数组索引更有效:对于不以文本开头为根的正则表达式搜索(即不以 ^ 开头),必须搜索整个索引O(n),而对于数组,每个元素都有它自己的multikey 索引条目O(log n)
    3. 索引条目的大小必须为 less than 1024 bytes,这将限制您在文本字段中使用大约 42 个 ObjectId。
    4. 数组元素是原子可修改的:您可以使用array update operators 直接修改单个元素。

    【讨论】:

    • "虽然使用数组,但每个元素都有自己的索引条目"。您能对此提供更多见解吗?
    • @Rahul 我添加了一个指向与数组字段一起使用的多键索引文档的链接。
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多