2012-01-11 3 views
8

Я просто хочу понять лучше, в том, что я узнал годами, решение на основе документов медленное и требует много ввода-вывода. Например, в проекте PHP обычно говорят, что гораздо лучше использовать кеш памяти, такой как Redis, Memecache или APC, потому что они основаны на памяти вместо кэширования данных в реальном FILE.Как DB на основе документов так быстро?

Теперь все эти базы данных NoSQL прибыли, и я прочитал, как они намного быстрее, чем MySQl и другие, и они основаны на документах. Может ли кто-нибудь помочь мне понять эту теорию? Если каждая запись является документом (ФАЙЛ), то как это хорошо по производительности? Недавно я прочитал про парня, который использовал Редис в проекте, и сказал, что он переключился на MongoDB и получил лучшие результаты, чем с Редисом (я понимаю, что сравниваю Кэш с БД, но это не настоящий вопрос, я хотите знать, как решение на основе документов быстрее, чем решения, основанные на документах?)

ответ

4

Документ не обязательно означает, что они полностью хранятся в файловой системе. Некоторые части могут храниться в памяти как индекс.

Документ основан только на том, что база данных хранит данные в пакетах (например, листы бумаги, где каждый лист представляет собой набор данных, и вы можете свободно писать на нем) вместо очень конкретной структуры, такой как таблица.

http://en.wikipedia.org/wiki/Document-oriented_database

Ах, и почему они могут быть быстрее, чем Redis:
Допустим, вам нужно хранить некоторую нелинейную информацию в наборе (то есть не каждый набор данных выглядит так же, и вы получили различные типы данных в одном наборе. В Redis вы можете хранить только пары ключ-значение, поэтому вам нужно будет связать их вместе с набором в вашем собственном коде/реализации. В базе данных NoSQL это обрабатывается для вас базой данных в (возможно) гораздо более оптимизированный способ:

+0

Redis не просто хранит пары ключ/значение, он может хранить гораздо больше типов данных (см. Http://redis.io/topics/data-types) – Carpetsmoker

0

Первое, что вы можете сравнить с базами данных NoSQL с базами данных в памяти , Базы данных NoSQL предназначены для данных, которые не помещаются в память.

Теперь, что касается NoSQL DB, это не просто файлы, они имеют индексы, которые обеспечивают быстрый доступ к смещениям в файлах, и именно там, где скорость действительно.

+4

'NoSQL DB - это данные для данных, которые не будут поместиться в память'. Это неправильно. Почему вы говорите, что? – jgauffin

+0

Хорошо, я исправляю себя, * большую часть времени * они используются для структур, которые будут превосходить размер, который может поместиться в памяти. Они также могут использоваться в качестве хранилища в памяти и могут обеспечить лучшую производительность, чем реляционные таблицы в памяти, поскольку они более просты в реализации. Тем не менее, вы можете получить еще лучшую производительность, самостоятельно внедряя структуры данных в свою программу. – thedrs

+1

'большую часть времени' по-прежнему не так. Они являются просто альтернативой РСУБД, но схематичны и имеют лучшее решение для совокупных корней. – jgauffin

2

NoSQL говорит может быть склонны к недоразумениям, так как некоторые из концепций будут использовать имена, которые имеют разное значение для традиционного:

  • файла на основе не (обязательно) означает, что Datastore будет записывать каждую запись в файл - это означает, что записи в хранилище данных не должны соответствовать схеме предопределений полей, если определенный тип данных. Подумайте о «файле» как о XML, JSON или друзьях.
  • Победители производительности (большинства) хранилищ данных NoSQL выпускаются по цене: обычно хорошо понятные обещания ACID торгуются против более простой модели согласованности.
  • Сила реляционных баз данных SQL в значительной степени зависит от факта, что и каждый запрос может быть написан против существующей схемы. Это не всегда верно для хранилищ данных NoSQL: в самой экстремальной версии доступ к записи возможен только с помощью идентификатора записи.
  • Большинство NoSQL датасторы масштабируется намного лучше, чем типичные реляционная база данных - они являются ответом на вопрос: «Что мы должны пожертвовать от хорошо изученной реляционной БД», чтобы преодолеть ограничение масштабирования»
0

для того, чтобы получить представление о том, считают это:

  • с MongoDB вы бы спроектировать схему таким образом, что один документ имеет все, что нужно, чтобы отобразить страницу
  • с MySQL (или любой другой СУБД) вы. нормализовать данные и разделить их на многие таблицы. страницы, вам нужно будет сделать много SQL-запросов.

Хотя этот один запрос mongo может быть медленнее, чем один запрос mysql, сравнение 1 запроса mongo с 100 запросами mysql будет намного быстрее.

0

Волшебный ингредиент не обязательно является «быстрой» базой данных, это база данных, которая позволяет создавать и внедрять «более быстрые» системы. Вот почему база данных NoSQL считается игровым устройством.

В течение нескольких десятилетий реляционные базы данных были единственной игрой в городе. Многие системы на базе SQL платят двойной налог на эффективность: один раз для полного набора функций ACID (который, вероятно, им не нужен), а затем снова для того, чтобы обучать данные своего домена в модель реляционной таблицы.

Кроме того, одной из основных черт большинства баз данных NoSQL является то, что они являются более простым из-за их более специализированного подхода, чем подход «общего случая» базы данных SQL. Это означает, что для каждой операции требуется меньше логики/кода, которые должны выполняться на каждой операции, более простые структуры данных (что может потребовать меньше IO) и вообще - меньше накладных расходов, более высокая производительность.

Смежные вопросы