Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL срещу MongoDB 1000 четения

MongoDB не е магически по-бърз. Ако съхранявате едни и същи данни, организирани по принцип по същия начин, и осъществявате достъп до тях по абсолютно същия начин, тогава наистина не бива да очаквате резултатите ви да бъдат изключително различни. В крайна сметка и MySQL, и MongoDB са GPL, така че ако Mongo имаше някакъв магически по-добър IO код в него, тогава екипът на MySQL би могъл просто да го включи в своята кодова база.

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

Например, помислете за дизайн, който запазва много информация за сложен обект по нормализиран начин. Това може лесно да използва десетки таблици в MySQL (или всякакъв релационен db), за да съхранява данните в нормална форма, с много индекси, необходими за осигуряване на релационна цялост между таблиците.

Сега помислете за същия дизайн с магазин за документи. Ако всички тези свързани таблици са подчинени на основната таблица (а често са), тогава може да сте в състояние да моделирате данните така, че целият обект да се съхранява в един документ. В MongoDB можете да съхранявате това като един документ, в една колекция. Тук MongoDB започва да дава възможност за превъзходна производителност.

В MongoDB, за да извлечете целия обект, трябва да изпълните:

  • Едно търсене в индекса на колекцията (ако приемем, че обектът е извлечен по идентификатор)
  • Извличане на съдържанието на една страница на базата данни (действителният двоичен json документ)

Така че търсене в b-дърво и четене на двоична страница. Log(n) + 1 IOs. Ако индексите могат да се намират изцяло в паметта, тогава 1 IO.

В MySQL с 20 таблици трябва да изпълните:

  • Едно търсене на индекс в основната таблица (отново, ако приемем, че обектът е извлечен от идентификатор)
  • С клъстериран индекс можем да приемем, че стойностите за основния ред са в индекса
  • 20+ търсения на диапазон (надявам се в индекс) за pk стойността на обекта
  • Това вероятно не са клъстерирани индекси, така че същите 20+ търсения на данни, след като разберем кои са подходящите дъщерни редове.

Така че общата сума за mysql, дори ако приемем, че всички индекси са в паметта (което е по-трудно, тъй като има 20 пъти повече от тях) е около 20 търсения на диапазон.

Тези търсения на диапазон вероятно се състоят от произволно IO - различни таблици определено ще се намират на различни места на диска и е възможно различни редове в същия диапазон в една и съща таблица за обект да не са съседни (в зависимост от това как обектът е бил актуализирани и др.).

Така че за този пример крайният резултат е около 20 пъти повече IO с MySQL на логически достъп, в сравнение с MongoDB.

Ето как MongoDB може да повиши производителността в някои случаи на употреба .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL динамична централна таблица

  2. конвертирайте php дата във формат mysql

  3. Буболечка? #1146 - Таблица 'xxx.xxxxx' не съществува

  4. AVG() – Изчислете средната стойност на колона в MySQL

  5. Стойности, разделени със запетая, в MySQL IN клауза