日期:2014-05-16  浏览次数:20368 次

共享下MongoDB子对象搜索性能测试数据
   MongoDB支持索引,一个集合上可以创建唯一、非唯一索引,可以建立几个索引。可以将多列组合起来做成复合索引。通过索引检索数据性能很好,如果没有索引进行检索,会导致全集合的扫描,性能很差。即使他是内存数据库。

    由于我最近的项目上需要子对象集合,需要对其进行检索为此针对此进行了一次验证。这里将验证的结果共享给大家。 
    集合样例:
     {gid:"sadfasdfadsfasdf",gList:[{gtag:"asdfasdf"},{gtag:"yyjsdhfg"},{gtag:"dfsdf8899"},gtype:"abc"}
    其中gid是全局唯一的,gtype总共只有7个值。gList里面的子集合(子对象)的个数是随机的,个数范围在3到200之间。其中只有5000条数据有gtag,其他数据没有gtag。
     分别有三个应用,第一个应用需要按照gid检索数据,第二个应用需要通过gtag检索数据,第三个应用通过gtype检索数据。
     为了获得性能,需要做一个测试。为了得到的数据接近实际情况,我将生产系统的数据拿来做测试。考虑到32位mongodb处理的数据条目可字节数的限制,灌入120万条数据,再多的数据会导致mongodb无法简历索引,mongoDB不可用。
    为了测试其性能,首先进行一次全集合的遍历,将所有的数据读入内存。测试情况如下:

1、 分别就gid、gtag、gtype建立索引,进行检索。每个业务执行10万次。返回结果集中第一条数据。
     得到结果:
      检索gid业务消耗时间平均为0.6毫秒 ,检索gtype业务消耗时间平均为1.3毫秒,检索gTag业务消耗时间为7毫秒
2、返回列对性能的影响
    返回的列数、列的复杂度、以及每行的字节数会影响到性能。越复杂的列、列数越多、返回的字节数越多,消耗时间越多。
 
由于时间关系,没有进行分页业务的性能的测试。