MongoDB – Уикипедия

MongoDB
Connection to the MongoDB Shell.png
Информация
РазработчикMongoDB Inc.
Начална версия2009 (2009)
Последна версия3.2.4
Програмен езикC++, JavaScript, C
Операционна системаМеждуплатформен софтуер
Език на интерфейсаАнглийски
СтатусActive
Вид софтуерDocument-oriented database
ЛицензGNU AGPL v3.0 (drivers: Apache license)
Уебсайтwww.mongodb.org
MongoDB в Общомедия

MongoDB (на английски: humongous – огромен) е система за обработване на бази данни от документи, разработена от 10gen. Тя е от рода на нерелационните бази данни (NoSQL). Вместо да съхранява информация в таблици, както е при традиционните релационни бази данни, MongoDB съхранява структурираната информация в JSON формат с динамични схеми. Това прави интегрирането на информацията в определени приложения доста по-лесно и по-бързо.

История[редактиране | редактиране на кода]

10gen започват разработването на MongoDB през октомври 2007. Екипът, разработил MongoDB, също така участва в разработването на DoubleClick, ShopWiki и Gilt Groupe Архив на оригинала от 2016-10-07 в Wayback Machine.. При разработването и поддръжката на DoubleClick, екипът постоянно срещал предвизивкателства свързани с обработката на данни, тяхното съхранение и увеличаващи се мащаби. Това накарало програмистите от 10gen (понастоящем MongoDB) да разработят свой собствен софтуер, който да се справя успешно с подобни проблеми. Тогава настъпило и първоначалното вдъхновение на екипа да разработи база данни по собствен стандарт и принадлежност. Компанията е открита с цел да се възползва максимално от огромните възможности, които предлага Cloud средата, като чрез това постигне по-висока ефективност, разрастване и бързина при процеса на разработване. Към настоящия момент, MongoDB може да се отличи с над 10 милиона изтегляния и инсталации, хиляди клиенти и повече от 1000 партньори. Системата за складиране на данни се използва от мрежите на MTV, Craiglist, Foursquare и UIDAI Aadhaar. MongoDB е най-популярната NoSQL система за управление на бази от данни.[1]

Характеристики[редактиране | редактиране на кода]

Заявки[редактиране | редактиране на кода]

MongoDB поддържа различни видове заявки. Сред тях са полевите заявки, заявки в дадени граници както и търсения с регулярни изрази (regex).

Тези заявки могат да бъдат изпращани заедно с JavaScript функции, зададени от потребителя и да връщат като резултат специфични полета от документи.

Индексиране[редактиране | редактиране на кода]

Всяко поле в един MongoDB документ може да бъде индексирано, дори и тези, които са включени в масиви или са ембеднати в документи. (Индексите в MongoDB са концептуално подобни на тези в RDBMS. MongoDB позволява и използване на главни и второстепенни индекси.

Репликация[редактиране | редактиране на кода]

MongoDB е има висока съвместимост с т.нар. репликационни сетове (Replica Sets)[2] . Един такъв сет се състои от две или повече копия на дадена информация. Всяко отделно копие (реплика) на тази информация може да бъде главното или второстепенно копие на информацията по всяко време.

По подразбиране главната реплика е тази, която изпълнява всички операции за четене и писане върху данните. Второстепенните реплики държат копие на информацията в главната. Ако нещо се случи с главната реплика, реплика-сетът автоматично изпълнява процес по избиране на нова главна реплика измежду второстепенните.

Понякога второстепенните копия могат да извършват операции, свързани с четене, но информацията винаги остава една и съща между различните копия.

Разпределяне на информацията[редактиране | редактиране на кода]

MongoDB се разширява хоризонтално посредством процес наречен sharding. Този процес изисква от потребителя да избере даден ключ да бъде Shard, който впоследствие определя как информацията в дадена колекция ще бъде разпределена. Тя се разбива на отделни отрязъци (определени от shard ключа) и се разпределя между множество shard-ове. (Shard-а е главен (родител) с един или повече второстепенни (деца)).

Предоставя се и опция shard ключа да бъде хеширан в карта към shard – това позволява информацията да бъде разпределена равномерно.

MongoDB може да работи на множество сървъри едновременно, като така балансира информацията и/или дублира информацията за да предостави сигурност на информацията в случай на хардуерен проблем. MongoDB е изключително лесен за интегриране и дава възможност да се добавят нови работни станции към вече работеща база от данни.

Съхранение на файлове[редактиране | редактиране на кода]

MongoDB може да бъде използван и като файлова система, което му позволява да използва методи за балансиране и повторение на данни, разпръснати между много сървъри, които съхраняват файловете.

Тази функционалност, наречена Grid File System, е включена в драйверите на MongoDB и е налична за много програмни езици (Вижте „Language Support“ секцията за лист на поддържаните езици.) MongoDB предоставя на разработчиците функционалност за манипулация на файлове и съдържание, като пример за тях e Nginx.

Вместо да съхранява един файл в отделен документ, GridFS разделя този файл на по-малки части (чънкове) и съхранява всяка от тези части в отделен документ.

В една система, състояща се от множество системи, файловете могат да бъдат разпределени и копирани множество пъти между системите, като по този начин се създава балансирана и устойчива на провали система.

Фреймуърк за съвкупност[редактиране | редактиране на кода]

Този фреймуърк за съвкупност дава на потребителите възможност, да извличат резултати, като тези, които връща GROUP_BY клаузата в SQL. Тези операции за съвкупност могат да бъдат навързвани една след друга за да се получи навързана верига от изпълними действия – подобни на Unix pipes.

Фреймуърка предоставя и $lookup операторът, който дава възможност да бъдат обединявани повече от един документа в един.

MapReduce може да се използва за обработване на струпани (обединени) данни. Пример за такава операция е batch processing.

Съвместимост с JavaScript[редактиране | редактиране на кода]

MongoDB позволява JavaScript езикът да бъде използван в заявки, операции за съвкупност (например MapReduce) след което да бъдат изпращани към базата данни, за да се изпълнят.

Ограничени колекции[редактиране | редактиране на кода]

MongoDB поддържа колекции с фиксиран размер, наречени capped collections. Този тип колекция запазва реда на добавяне на записи в колекцията, и когато определеният размер се достигне, тя започва да се държи като кръгова опашка.

Критики[редактиране | редактиране на кода]

Случай, в който се наблюдава неправилно поведение, е когато приложение използва два различни MongoDB процеса, но те нямат достъп помежду си и тогава е възможно за MongoDB да върне стари прочитания. В такъв случай е възможно MongoDB да не запази някои от по-скорошните записи.

Преди версия 2.2, контролът върху съгласуваността или по-познат на английски като concurrency control, които представлява система за контрол осигуряваща коректни резултати при едновременно изпълнение на заявки върху база данни без нарушаване целостта на данните, е бил имплементиран на ниво MongoDB инстанция. С версия 2.2, контролът върху съгласуваността се имплементира на ниво база данни. От версия 3.0 са представени контролери(engines) за съхранение, като всеки един от тях може да имплементира контрол върху съгласуваността по различен начин. С MongoDB 3.0 контролът върху съгласуваността се имплементира на ниво колекция при MMAPv1 контролер за съхранение, и на ниво документация при WiredTiger контролер за съхранение. При версиите предшественици на версия 3.0 е използван подход увеличаващ броя на заявките изпълняващи се едновременно, познат като sharding (разпределяне на информацията от база данни към няколко различни сървъра).

Друга критика е свързана с ограниченията наложени във версиите на MongoDB за системи с 32-битова архитектура, които се дължат на присъщите ограничения на паметта. MongoDB препоръчва 64-битови системи, предоставяйки достатъчно RAM памет на своите потребители по време на работа.

В допълнение, MongoDB е ограничен до побитово сравнение от тип memcmp(сравнение на два блока в паметта, при което имаме последователно сравнение на поредни единични байтове до намиране на разлика в десетичните им стойности или до достигане края на горепосочените), което не предоставя коректност при работа с езици използващи Уникодска кодировка.

Архитектура[редактиране | редактиране на кода]

Достъп през програмни езици[редактиране | редактиране на кода]

MongoDB разполага с официални драйвъри за голям набор програмни езици и среди за разработка. Също така има голям брой неофициални както и обществено поддържани драйвъри за други програмни езици и платформи.

Управление и графично представяне[редактиране | редактиране на кода]

Основна среда за работа със системата е конзолата, която за MongoDB е представена от множество инструменти интерпретиращия посвоему. Предпочитан такъв инструмент за работа чрез командния ред е mongo, въпреки предоставяните от трети страни потребителски интерфейси.MongoDB неразполага официално с графично управляващ софтуер.

Лиценз и поддръжка[редактиране | редактиране на кода]

MongoDB е достъпен безплатно под лиценза на GNU Affero General Public License. Езиковите драйвъри са предоставени под лиценза на Apache License. В допълнение, MongoDB Inc. предоставя права на собственик за MongoDB.

Производителност[редактиране | редактиране на кода]

United Software Associates публикува еталон използвайки Cloud Serving Benchmark на Yahoo! като основа на всички тестове. MongoDB осигурява по-голяма производителност от Couchbase Server или Apache Cassandra във всички тестове които пускат, в някои случаи 25 пъти повече.

Друг показател за най-добрите бази данни е NoSQL използващи Elastic Compute Cloud на Amazon, който е направена от End Point и пристига с противоположни резултати, поставяйки MongoDB на последно място сред изследваните бази данни.

Производствени внедрявания[редактиране | редактиране на кода]

Мащабните внедрявания на MongoDB се проследяват от MongoDB Inc. Известни потребители на MongoDB са:

  • Adobe: Опитът на Мениджърът е предназначен за ускоряване на развитието на цифровите преживявания, които повишават лоялността на клиентите, ангажираност и предлагане. Adobe използва MongoDB да съхраняват петабайта данни на съдържание в мащабни хранилищата, залегнали в основата на Мениджърския опит.
  • Amadeus IT Group: използва MongoDB за своя back-end софтуер.
  • Компактен мюонен соленоид в Европейската организация за ядрени изследвания използва MongoDB като основен back-end за Система за Сумиране на данни за Големият адронен ускорител.
  • Крейгслист: С 80 милиона обяви публикувани всеки месец, Крейгслист трябва да архивира милиарди записи в различни формати и трябва да бъде в състояние да изпраща заявки и да докладва за тези архиви по време на изпълнение. Крейгслист мигрират от MySQL към MongoDB в подкрепа на активния си архив, с непрекъсната наличност, мандатът за спазване на нормативната уредба през 700 сайтове в 70 различни страни.
  • eBay: използва MongoDB в търсене на предложения и вътрешен Cloud Manager State Hub.
  • FIFA (video game series): EA спорт студио за развитие използва MongoDB за да съхранявате потребителски данни и състояние играта. Автоматичното споделяне позволява мащабиране на MongoDB през 250 + сървърите на EA като потребителското търсене расте.
  • Foursquare: разгръща MongoDB за Amazon Web Services за съхранение на места и потребителски отбелязвания на различни места.
  • LinkedIn: използва MongoDB като back-end.
  • McAfee: MongoDB подсилва McAfee Global Threat Intelligence (GTI), с базирана в облака разузнавателна служба, която събира данни от милиони сензори по целия свят.
  • MetLife: използва MongoDB за „Стената – The Wall“, приложение за обслужване на клиенти което осигурява '360-градусов изглед' на клиентите на MetLife.
  • SAP: използва MongoDB в SAP Platform as a service.
  • Shutterfly: използва MongoDB за своята платформа за снимки. Към 2013 г. платформата за снимки съхранява 18 милиарда качени снимки от 7 милиона потребители на Shutterfly.
  • Tuenti: използва MongoDB като тяхна back-end База данни.
  • Yandex: Най-голямата търсачка в Русия използва MongoDB за управление на всички потребителски метаданни за услугата си за споделяне на файлове. MongoDB се е разширил, за да може да поддържа десетки милиарди обекти и терабайта данни, нараства с 10 милиона нови файлове качени на ден.

Книги[редактиране | редактиране на кода]

Кейъл, Банкър. MongoDB in Action (1s ed.) – МонгоДБ в действие (1-во издание). Manning, 8 март 2011. ISBN 978-1-935182-87-0. p. 375. (на английски)

Кодороул, Кристина, Дироф, Майкъл. MongoDB: The Definitive Guide – МонгоДБ: Цялостно ръководство (1-во издание). O'Reilly Media, 23 септември 2010. ISBN 978-1-4493-8156-1. p. 216. (на английски)

Пиртъл, Мич. MongoDB for Web Development (1st ed.) – МонгоДБ за уеб разработка (1-во издание). Addison-Wesley Professional, 3 март 2011. ISBN 978-0-321-70533-4. p. 360. (на английски)

Холкинс, Тим, Мембрей, Петър. The Definitive Guide to MongoDB: The NoSQL Database for Cloud and Desktop Computing (1st ed.) – Цялостното ръководство за МонгоДБ: NoSQL базата данни за клауд и десктоп компютинг. Apress, 26 септември 2010. ISBN 978-1-4302-3051-9. p. 350. (на английски)

Вижте също[редактиране | редактиране на кода]

Източници[редактиране | редактиране на кода]

Външни препратки[редактиране | редактиране на кода]

Node.js
Platform
Frameworks
Libraries
Languages
Hosts
  Тази страница частично или изцяло представлява превод на страницата MongoDB в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​

Категория:NoSQL