使用ensureindex创建Mongodb索引

时间:2014-05-27 12:26:12

标签: php mongodb indexing

我使用Mongo db存储大量数据,这些数据在一毫秒内插入数百条记录。系统运行并运行了几年。但是根据业务需要,我需要在mongo db集合中添加一个新索引:

我正在使用php Shanty库来创建索引。这是代码片段

    $indexArray[] = array(
        "index" => array(
            "category"     => -1,
            "sub_category" => 1,
            "name"         => 1,
            "product_name" => 1,
            "category_id"  => 1,
            "value"     => -1,
            "begin_dt_tm"  => -1
        ),
        "options" => array(
            "background" => true,
            "name"       => "Index_CSNPCIdVBdt"
        )
    );

 foreach ($indexArray as $columnIndexData) {
    $newCollectionObject->ensureIndex($columnIndexData["index"], $columnIndexData["options"]);
 }

以上创建索引很好。我面临的唯一问题是在索引创建过程中我的系统出现故障并且mongo db没有响应。我已经设置了'background:true'选项,它可以在后台完成这项工作,但它仍会使我的服务器无法响应,直到创建索引。

是否有替代方案以便mongo db保持响应?

1 个答案:

答案 0 :(得分:0)

使用副本集,您可以执行滚动维护(基本上在辅助节点作为独立实例运行时创建索引),这不会影响您的客户端。由于您有一个独立的实例,不适合您。

我怀疑服务器上的负载相当高和/或您的硬件是瓶颈(通常怀疑RAM不够,磁盘速度慢......)