vik*_*ing 6 mongodb nosql ycsb
我们最近使用YCSB(https://github.com/brianfrankcooper/YCSB/wiki)对Oracle 10g和MongoDB进行了基准测试,当我们尝试增加1,000,000个数据集的线程数时,Oracle的性能在4个线程之后保持不变,但MongoDB继续执行更好,更好,直到8个线程,之后只有读取更好,写入和更新(操作/秒)保持不变.
我们在2个CPU Xeon四核(总共8个核心)+ 8 GB RAM上运行此基准测试.
我们观察到,与单线程客户端相比,MongoDB在多线程客户端上的表现更好,我的问题是:当MongoDB在更多负载下表现更好时,为什么不能以较少的负载执行相同操作(比如只需几个线程) )通过利用多核?
在单个核心上处理请求在逻辑上非常简单.只需拥有接收请求的代码,然后处理它.
在2个内核上处理单个请求并不是那么简单,因为这样做需要您将请求分解为组件,分配工作,同步答案,然后构建单个响应.如果你做这项工作,虽然你可以减少挂钟时间(墙上的时钟通过多少时间),你总是会使请求占用更多的CPU时间(消耗的总CPU资源).
在像MongoDB这样的系统中,您希望有很多不同的客户端发出请求,因此无需尝试并行处理单个请求,并且不需要.
更大的问题是为什么Oracle在4个CPU之后没有增加并发性.有许多可能的原因,但一个合理的猜测是您遇到了某种锁定,这是保证一致性所必需的.(MongoDB不能为您提供一致性,因此可以避免这种类型的瓶颈.)