MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Карта-Намаляване на производителността в MongoDb 2.2, 2.4 и 2.6

Ето текущото състояние на функционалност за Map/Reduce в MongoDB

1) Повечето от ограниченията на производителността за Map/Reduce все още остават в MongoDB версия 2.2. Машината Map/Reduce все още изисква всеки запис да се преобразува от BSON в JSON, действителните изчисления се извършват с помощта на вградения JavaScript двигател (което е бавно) и все още има едно глобално заключване на JavaScript, което позволява само една нишка на JavaScript да се изпълнява наведнъж.

Имаше някои постепенни подобрения на Map/Reduce за разчленени клъстери. Най-важното е, че окончателната операция Reduce вече се разпределя между множество фрагменти, а изходът също се разделя паралелно.

Не бих препоръчал Map/Reduce за агрегиране в реално време в MongoDB версия 2.2

2) Започвайки с MongoDB 2.2, вече има нова рамка за агрегиране. Това е нова реализация на операции за агрегиране, написана на C++ и тясно интегрирана в рамката на MongoDB.

Повечето задачи за карти/намаляване могат да бъдат пренаписани, за да се използва рамката за агрегиране. Те обикновено работят по-бързо (20x подобрение на скоростта спрямо Map/Reduce е често срещано във версия 2.2), те използват пълноценно съществуващата машина за заявки и можете да изпълнявате паралелно множество команди за агрегиране.

Ако имате изисквания за агрегиране в реално време, първото място, от което да започнете, е с рамката за агрегиране. За повече информация относно рамката за агрегиране, разгледайте тези връзки:

  • http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
  • http://docs.mongodb.org/manual/reference/aggregation/

3) Имаше значителни подобрения в Map/Reduce в MongoDB версия 2.4. JavaScript двигателът SpiderMonkey е заменен от V8 JavaScript двигател и вече няма глобално заключване на JavaScript, което означава, че няколко нишки Map/Reduce могат да се изпълняват едновременно.

Машината Map/Reduce все още е значително по-бавна от рамката за агрегиране поради две основни причини:

  • Машината на JavaScript се интерпретира, докато Aggregation Frameworkruns компилира C++ код

  • JavaScript двигателят все още изисква всеки документ, който се разглежда, да бъде конвертиран от BSON в JSON; ако запазвате изхода в колекция, резултатният набор трябва да бъде преобразуван от JSON обратно в BSON

Няма значителни промени в Карта/Намаляване между 2.4 и 2.6.

Все още не препоръчвам използването на Map/Reduce за агрегиране в реално време в MongoDB версия 2.4 или 2.6.

4) Ако наистина имате нужда от Map/Reduce, можете да погледнете и Hadoop Adaptor. Тук има повече информация:

  • http://www.10gen.com/presentations/webinar/mongodb-hadoop-taming-elephant-room
  • http://api.mongodb.org/hadoop/MongoDB%2BHadoop+Connector.html
  • http://www.mongodb.org/display/DOCS/Hadoop+Quick+Start



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Преобразуване на mongodb Binary _id в LUUID с помощта на възел

  2. Не мога да използвам командата mongo, показва командата, която не е намерена на mac

  3. Персонализирани функции изчислени колони mongodb проекция

  4. Основни съображения за вземане на резервно копие на MongoDB

  5. Как мога да актуализирам множество документи в mongoose?