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

Защо все още трябва да използвате MMAPv1 Storage Engine за MongoDB

Въпреки че този двигател за съхранение е остарял още от MongoDB версия 4.0, в него има някои важни функции. MMAPv1 е оригиналната машина за съхранение в MongoDB и се базира на картографирани файлове. Само 64-битовата архитектура на Intel (x86_64) поддържа този механизъм за съхранение.

MMAPv1 осигурява отлична производителност при натоварвания с...

  • Големи актуализации
  • Прочетения с голям обем
  • Вложки с голям обем
  • Високо използване на системната памет

MMAPv1 архитектура

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

Това беше базата данни по подразбиране за MongoDB за версии по-стари от 3.2 до въвеждането на механизма за съхранение на WiredTiger. Името му идва от факта, че използва картографирани файлове в паметта за достъп до данни. Това става чрез директно зареждане и промяна на съдържанието на файла, което се намира във виртуална памет чрез mmap() методология за системно извикване.

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

Основната архитектура на механизма за съхранение MMAPv1 е показана по-долу.

Както бе споменато по-горе, ако размерът на документа надвишава разпределения размер на запис, това ще доведе до преразпределение, което не е добро. За да избегне това, двигателят MMAPv1 използва мощност от 2 размера, така че всеки документ да се съхранява в запис, който съдържа самия документ (включително малко допълнително пространство, известно като padding). След това подпълването се използва, за да се даде възможност за растеж на документа, който може да е резултат от актуализации, като същевременно намалява шансовете за преразпределение. В противен случай, ако възникнат преразпределения, може да имате фрагментация на хранилището. Padding търгува допълнително пространство за подобряване на ефективността, като по този начин намалява фрагментацията. За работни натоварвания с голям обем вмъквания, актуализации или изтривания, силата на 2 разпределение трябва да бъде най-предпочитана, докато точното разпределение е идеално за колекции, които не включват натоварвания за актуализиране или изтриване.

Мощност на разпределение на 2 размера

За плавен растеж на документи тази стратегия се използва в MMAPv1 механизма за съхранение. Всеки запис има размер в байтове, който е степен 2, т.е. (32, 64, 128, 256, 512...2MB). 2MB е по-голямо ограничение по подразбиране за всеки документ, който надхвърля това, неговата памет се закръглява до най-близкото кратно на 2MB. Например, ако документът е 200 MB, този размер ще бъде закръглен до 256 MB и 56 MB пространство ще бъде достъпно за всеки допълнителен растеж. Това позволява на документите да се увеличават, вместо да задейства преразпределение, което системата ще трябва да направи, когато документите достигнат своите ограничения на наличното пространство.

Предимства на разпределението на мощност 2 с размер

  1. Повторно използване на освободени записи за намаляване на фрагментацията: С тази концепция записите се квантизират в паметта, за да имат фиксиран размер, който е достатъчно голям, за да побере нови документи, които биха се побрали в разпределеното пространство, създадено от по-ранно изтриване или преместване на документ.
  2. Намалява преместванията на документи: Както споменахме по-горе, по подразбиране вмъкванията и актуализациите на MongoDB, които правят размера на документа по-голям от зададения размер на запис, също ще доведат до актуализиране на индексите. Това просто означава, че документите са преместени. Въпреки това, когато има достатъчно място за растеж в документа, документът няма да бъде преместен, следователно по-малко актуализации на индекси.

Използване на паметта

Цялата свободна памет на машината в механизма за съхранение MMAPv1 се използва като кеш. Правилно оразмерените работни комплекти и оптималната производителност се постигат чрез работен комплект, който се вписва в паметта. Освен това на всеки 60 секунди MMAPv1 изтрива промените в данните на диск, като по този начин спестява в кеш паметта. Тази стойност може да бъде променена, така че промиването да може да се извършва често. Тъй като цялата свободна памет се използва като кеш, не се шокирайте, че инструментите за наблюдение на системните ресурси ще покажат, че MongoDB използва много памет, тъй като това използване е динамично.

Предимства на MMAPv1 Storage Engine

  1. Намалена фрагментация на диска при използване на стратегията за предварително разпределение.
  2. Много ефективно четене, когато работният комплект е конфигуриран да се побере в паметта.
  3. Актуализациите на място, т.е. актуализациите на отделни полета, могат да доведат до съхраняване на повече данни, като по този начин се подобрява актуализацията на големи документи с минимални едновременни записващи.
  4. С малък брой едновременно записващи, производителността на запис може да бъде подобрена чрез концепцията за често изхвърляне на данни на диск.
  5. Заключването на ниво колекция улеснява операциите по запис. Схемата за заключване е един от най-важните фактори за производителността на базата данни. В този случай само 1 клиент може да има достъп до базата данни наведнъж. Това създава сценарий, при който операциите протичат по-бързо, отколкото когато са представени по сериен начин от механизма за съхранение.
Severalnines Станете DBA на MongoDB – Пренасяне на MongoDB в Производството Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате MongoDB Изтеглете безплатно

Ограничения на MMAPv1 Storage Engine

  1. Високо използване на пространството при извършване на повторения. MMAPv1 няма стратегия за компресиране на файловата система, поради което има прекомерно разпределение на пространство за записи.
  2. Ограничение за достъп до колекция за много клиенти при извършване на операция за запис. MMAPv1 използва стратегия за заключване на ниво колекция, което означава, че 2 или повече клиенти нямат достъп до една и съща колекция по едно и също време, следователно запис блокира всички четения на тази колекция. Това води до груб паралелизъм, който прави невъзможно мащабирането на MMAPv1 двигателя.
  3. Сривът на системата може потенциално да доведе до загуба на данни, ако опцията за водене не е активирана. Въпреки това, дори и да е, прозорецът е твърде малък, но поне може да ви предпази от голяма загуба на данни.
  4. Неефективно използване на хранилището. Когато използвате стратегията за предварително разпределение, някои документи ще заемат повече място на диска, отколкото самите данни.
  5. Ако размерът на работния набор надвишава разпределената памет, производителността спада до голяма степен. Освен това значителният ръст на документите след първоначалното съхранение може да задейства допълнителен I/O, следователно да причини проблеми с производителността.

Сравняване на MMAPv1 и WiredTiger Storage Engines

Ключова функция MMAPv1 WiredTiger
Производство на процесора Добавянето на повече ядра на процесора за съжаление не повишава производителността Ефективността се подобрява с многоядрени системи
Криптиране Поради това, че се използват картирани в паметта файлове, той не поддържа никакво криптиране Криптиране както за данни в транзит, така и за почивка е достъпно както в MongoDB корпоративна, така и в бета инсталация
Мащабируемост Едновременните записи, които са резултат от заключването на ниво колекция, правят невъзможно мащабирането. Високи шансове за намаляване на мащаба, тъй като най-малкото ниво на заключване е самият документ.
Настройка Много малки шансове за настройка на този двигател за съхранение Може да се направи много настройки около променливи като размер на кеша, интервали на контролни точки и билети за четене/запис
Компресиране на данни Без компресиране на данни, следователно може да се използва повече пространство Налични са Snappy и zlib методи за компресиране, следователно документите може да заемат по-малко място, отколкото в MMAPv1
Атомни транзакции Приложимо само за един документ От версия 4.0 се поддържа атомна транзакция за множество документи.
Памет Цялата свободна памет на машината се използва като неин кеш Кешът на файловата система и вътрешният кеш се използват
Актуализации Поддържа актуализации на място, следователно се отличава при натоварвания с големи обеми вмъквания, четения и актуализации на място Не поддържа актуализации на място. Целият документ трябва да бъде пренаписан.

Заключение

Когато стигат до избор на двигател за съхранение на база данни, много хора не знаят коя да изберат. Изборът обикновено зависи от натоварването, на което ще бъде подложено. Като цяло, MMAPv1 би направил лош избор и затова MongoDB направи много напредък в опцията WiredTiger. Въпреки това, той все още може да надмине някои други механизми за съхранение в зависимост от случая на използване, например когато трябва да изпълнявате само работни натоварвания за четене или трябва да съхранявате много отделни колекции с големи документи, при което 1 или 2 полета се актуализират често.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Актуализиране на вложени масиви в mongoDB чрез mongo shell

  2. Mongodb обобщава (брои) в множество полета едновременно

  3. Пагинация на монго с пролетни данни

  4. Архитектура за сигурност:Ръководство за MongoDB

  5. DynamoDB срещу MongoDB NoSQL