Если вы посмотрите на блокировку читателей-писателей, вы обнаружите, что это совершенно другой тип животных, чем блокировка базы данных, на которую ссылается MySQL, когда вы используете фразу «блокировка уровня строки».
Readers-writer lock защищает доступ к общей памяти и поэтому чрезвычайно короткий (порядка микросекунд). Поскольку в MongoDB операции только атомарны на уровне документа, эти блокировки (в традиционных базах данных они sometimes referred to as latches и используются to guard index access) сохраняются только до тех пор, пока один документ берет для обновления в памяти.
Обычная «блокировка базы данных» обычно существует до тех пор, пока транзакция, которая выполняется, не была зафиксирована или не откатна. Поскольку транзакции RDBMS могут охватывать несколько операций во многих таблицах, эти блокировки обычно намного более долговечны, и поэтому должен быть намного более гранулированным, чтобы позволить другой совместной работе выполнять параллелизм.
Это не значит, теоретически, mongodb на 2 уровня медленнее, чем MySQL для одновременного доступа?
Нет, это действительно так, и в зависимости от вашей точной рабочей нагрузки может быть намного быстрее или немного быстрее или медленнее - все зависит от типов операций, которые вы делаете, от имеющихся физических ресурсов, от структуры ваших данных, а также потребностей вашего приложения.
Приложения, которые записывают много данных в базу данных в MongoDB, как правило, ограничены в основном доступной пропускной способностью ввода-вывода IO. Только когда доступная полоса пропускания диска превышает количество записей, сделанных приложением в базе данных, вы увидите, что параллелизм становится фактором с MongoDB.С реляционными базами данных, из-за более длительного срока службы блокировок, параллелизм может стать фактором намного раньше даже при относительно небольшом количестве всех записываемых данных.
Блокировка не где-то рядом с плохим или худшим, чем у MySQL, поскольку один замок MongoDBs является мьютексом, ваш ps просто ошибочен в распространенном заблуждении – Sammaye
@Sammaye Можете ли вы более подробно объяснить разницу? – zavg
, так как он не имеет изолированного замка, на самом деле единственное, что он имеет для блокировки, это то, что он удерживает его, пока операция на самом деле записывается в файлы данных, в отличие от MySQL, который имеет изолированную блокировку на время транзакции, это является I в ACID и одной из причин, по которым MySQL и другие технические специалисты SQL нуждаются в блокировке на уровне строк. – Sammaye