Вежливая интерпретация «NoSQL» стала Not Only SQL
. Если у вас есть данные, которые действительно действительно реляционные, или если ваша функциональность зависит от таких вещей, как объединения и ACIDity, то вы должны хранить эти данные реляционным способом. В этом посте я объясню, как я использую MySQL рядом с двумя файлами памяти NoSQL. Современное хранилище данных на веб-уровне - это понимание того, как выбрать лучший инструмент (ы) для работы.
Тем не менее, NoSQL действительно является реакцией на то, что реляционный метод и способ мышления были применены к проблемам, где это на самом деле не очень хорошо подходит (как правило, огромные таблицы с десятками миллионов строк и более). После того, как таблицы становятся такими большими, типичной «лучшей практикой» SQL было вручную shard данные, то есть размещение записей от 1 до 10 000 000 в таблице A, от 10 000,001 до 20 000,001 в таблице B и т. Д. Затем, как правило, на уровне модели приложения, поиск выполняется в соответствии с этой схемой. Это называется масштабированием application-aware
. Это требует много времени и ошибок, но чтобы масштабировать что-то при сохранении MySQL для хранилища больших таблиц, он стал более или менее стандартным MO. NoSQL представляет для меня альтернативу application-unaware
.
Key-Value
Когда я был прототип MySQL начать получать слишком большой для своего собственного блага, лично я переехал столько данных, сколько возможно молниеносной Membase, которая превосходит Memcached и добавляет упорство. Membase - это распределенное хранилище ключей, которое масштабируется более или менее линейно (Zynga использует его для обработки полумиллиона операций в секунду, например), добавляя в кластер больше товарных серверов - поэтому отлично подходит для облачный возраст Amazon EC2, Joyent и т. д.
Хорошо известно, что распределенные хранилища с ключом - лучший способ получить огромный линейный масштаб. Слабость ключевого значения - это вопросность и индексирование. Но даже в реляционном мире наилучшей практикой для масштабируемости является выгрузка как можно больших усилий на серверы приложений, что делает объединение в памяти на серверах товарных приложений вместо того, чтобы просить центральный RDB-кластер обрабатывать всю эту логику. Так как simple select
плюс application logic
действительно лучший способ достичь массового масштаба даже на MySQL, переход на что-то вроде Membase (или его конкурентов вроде Riak) на самом деле не так уж плох.
документов Магазины
Иногда - хотя я бы поспорил реже, чем многие думают - разработать приложения по своей сути требует вторичных индексов, диапазон queryability и т.д. NoSQL подход к этому лежит через document store
как MongoDB. Подобно Membase, Mongo очень хорош в некоторых областях, где реляционные базы данных особенно слабы, например application-unaware
масштабирования, auto-sharding
и maintaining flat response times even as dataset size balloons
. Это значительно медленнее, чем Membase, и немного сложнее делать чистый горизонтальный масштаб, но преимущество в том, что он очень доступен для запросов. Вы можете запрашивать параметры и диапазоны в режиме реального времени, или вы можете использовать Map/Reduce для выполнения сложных пакетных операций на действительно огромных наборах данных.
В том же проекте, о котором я упоминал выше, который использует Membase для обслуживания тонны данных в реальном времени, мы используем MongoDB для хранения данных аналитики/метрик, которые действительно там, где сияет MongoDB.
Почему держать вещи в SQL
я коснулся кратко на том, что «по-настоящему реляционными» информация должна оставаться в реляционных базах данных. Как отмечает комментатор Дэн К., я пропустил ту часть, где я обсуждаю недостатки выхода из РСУБД, или, по крайней мере, оставить его полностью.
Во-первых, есть сам SQL. SQL хорошо известен и уже давно является отраслевым стандартом. Некоторые базы данных «NoSQL», такие как хранилище данных Google App Engine (построено на Big Table), реализуют собственный SQL-подобный язык (Google зовут, аккуратно, GQL для Google Query Language
). MongoDB использует новый подход к проблеме запросов с его восхитительным JSON query objects. Тем не менее, SQL сам по себе является мощным инструментом для получения информации из данных, что часто начинается с баз данных.
Самая важная причина для проживания в СБД: ACID, или Atomicity, Consistency, Isolation, Durability
. Я не буду повторно использовать состояние Acid-NoSQL, так как он хорошо рассмотрен в this post на SO. Достаточно сказать, что есть разумная причина. Oracle's RDBMS имеет такой огромный рынок, который никуда не денется: Некоторым данным требуется чистое соответствие ACID. Если ваши данные (и если да, то вы, вероятно, хорошо знаете об этом факте), то и ваша база данных. Держите это pH низким!
Edit: Заканчивать сообщение Aaronaught в here. Он представляет перспективу бизнес-бизнес гораздо лучше, чем я мог, отчасти потому, что я провел всю свою карьеру в потребительском пространстве.
Хорошее объяснение того, как вы используете SQL против NoSQL, но я бы предложил добавить более подробную информацию о различных компромиссах переключения между ними. Например, вы вообще не говорите об ACID. –
@ Dan K. +1 Спасибо, я отредактирую с этим как можно скорее –
Это фантастика – Dlongnecker