|
|
|||||||||||||||||||||||||||||
|
Обеспечение масштабируемости данных облачного уровня с помощью баз данных типа NoSQLИсточник: IBM
Относительно недорогие и высокопроизводительные базы данных типа NoSQL (Not Only SQL) обладают некоторыми особенностями, которые весьма полезны применительно к масштабируемости данных: горизонтальная масштабируемость; поддержка более слабых моделей согласованности, более гибких схем и моделей данных; поддержка простых низкоуровневых интерфейсов для запросов. В статье описываются возможности и функции нескольких баз данных типа NoSQL, в том числе HBase, MongoDB и SimpleDB. Кроме того, в статье рассматриваются основы проектирования облачных баз данных и баз данных типа NoSQL. Быстрое распространение основанных на Интернете сервисов - таких как электронная почта, блоги, социальные сети, поисковые механизмы и электронная коммерция - существенно изменило поведение и склонности веб-пользователей в отношении создания, передачи и получения контента, обмена информацией и покупки товаров. ИТ-специалисты отмечают быстрый рост масштабов генерируемых и потребляемых данных в результате распространения вышеупомянутых систем; постоянно растущая потребность в масштабируемости и новые требования к приложениям породили новые проблемы для традиционных систем управления реляционными базами данных (реляционных СУБД). Здесь на сцену выходят недорогое и высокопроизводительное программное обеспечение баз данных типа NoSQL. Основные особенности программного обеспечения баз данных типа NoSQL:
В статье рассматриваются современные достижения в области систем управления базами данных, обеспечивающие поддержку управление данными веб-масштаба. В статье содержится обзор возможностей и особенностей нескольких разновидностей NoSQL-систем - HBase, MongoDB и SimpleDB - и рассматривается пригодность каждой из этих систем для поддержки веб-приложений различных типов. Основы проектирования облачных баз данныхИтак, каким образом облачные вычисления изменили способ взаимодействия пользователей с данными? Простые транзакции данных для каждогоБлагодаря современным достижениям в области веб-технологий любой пользователь может легко предоставлять и потреблять контент, представленный в любой форме. Примеры.
Эти возможности предоставляются "потребительскими", массовыми инструментами, которые позволили более широкому кругу людей с легкостью создавать, потреблять и передавать (осуществлять т. н. "транзакции") больше данных, представленных в более разнообразных формах (сообщений в блогах, твитов, взаимодействий в социальных сетях, видео, аудио, фотографий - т. е. структурированных и неструктурированных данных). Приложения превращаются в распределенные масштабируемые сервисыОчевидно, что следующая цель производителей систем и инструментов состоит в облегчении превращения приложений в распределенные, масштабируемые и широко доступные через Интернет-сервисы (см. соответствующие сервисы Facebook, Flickr, YouTube, Zoho, LinkedIn). Характерными особенностями приложений, отвечающих этим критериям, являются высокая интенсивность обработки данных и высокая степень интерактивности. Например, на момент написания этой статьи сеть Facebook заявляла о наличии 800 млн. активных пользователей в месяц (а сейчас их, скорее всего, уже больше миллиарда). Каждый пользователь Facebook в среднем имеет 130 т. н. "дружеских связей" (friendship relation). Кроме того, имеется примерно 900 млн. объектов, с которыми взаимодействуют зарегистрированные пользователи Facebook (таких как страницы, группы, события и страницы сообществ). Другие социальные сети имеют несколько меньший масштаб, например, сеть LinkedIn, которая используется преимущественно специалистами, недавно достигла уровня в 200 млн. зарегистрированных пользователей. Сеть Twitter заявила о наличии более 100 млн. активных пользователей в месяц. Общепризнанная конечная цель состоит в том, чтобы облегчить каждому желающему достижение столь высокого уровня масштабируемости и доступности; проблема состоит в том, как сделать это с минимальными усилиями и ресурсами. Облачные модели облегчают развертывание сервисовТехнология облачных вычислений - это относительно новая модель хостинга приложений (хотя облачные среды настолько интегрированы, что сейчас уже практически неотделимы от остальной инфраструктуры обработки транзакций в Интернете). Облачная модель упрощает трудоемкие процессы приобретения и инициализации аппаратных средств и развертывания программного обеспечения. Это открывает новые революционные возможности для коммерциализации и доставки клиентам вычислительных ресурсов и сервисов. В частности, эта модель переносит инфраструктуру в сеть с целью уменьшения затрат, связанных с управлением аппаратными и программными ресурсами. Другими словами, облако воплощает давнюю мечту о превращении вычислительных средств в общедоступный ресурс, позволяя за счет экономии на масштабе эффективно снизить стоимость вычислительной инфраструктуры. Применительно к развертыванию приложений облачные вычисления сулят такие преимущества, как оплата по фактическому использованию, высокая скорость выхода на рынок, а также (практическая) неограниченность ресурсов и бесконечная масштабируемость с точки зрения потребителя. Новая модель дистрибуции - больше новых данных и больше типов данныхНа практике преимущества модели облачных вычислений состоят в том, что она открывает новые способы развертывания инновационных приложения, которые не были экономически реализуемы при традиционной организации корпоративной инфраструктуры. Поэтому облако становится все более популярной платформой для хостинга приложений в самых разных областях, включая электронную розничную торговлю, финансы, новости и социальные сети. Кроме того, быстрое увеличение количества приложений порождает огромное увеличение масштабов данных, генерируемых и используемых этими приложениями. Вот почему размещенная в облаке система управления базами данных, поддерживающая эти приложения, является критически важным компонентом в стеке программного обеспечения этих приложений. Облачные модели порождают модель облачной базы данныхЧтобы справиться с проблемами размещения баз данных в средах облачных вычислений, предложено множество систем и подходов. На практике существуют три основные технологии, которые обычно используются для развертывания уровня баз данных в стеке программных приложений на облачных платформах.
Роль виртуализацииВиртуализация является ключевым компонентом технологий облачных вычислений; она позволяет абстрагироваться от физических деталей аппаратных средств и предоставляет виртуализированные ресурсы для высокоуровневых приложений. Виртуализированный сервер обычно называется виртуальной машиной. Виртуальные машины позволяют изолировать приложения от обеспечивающих аппаратных средств и от других виртуальных машин. В идеальном случае любая виртуальная машина не воспринимается и не затрагивается другими виртуальными машинами, функционирующими на той же физической машине. В принципе технологии виртуализации ресурсов добавляют гибкий перестраиваемый уровень программного обеспечения между приложениями и ресурсами, которые используются этими приложениями. Концепция, описывающая виртуализированный сервер баз данных, использует эти преимущества, особенно когда уровень базы данных существующего приложения, спроектированного для применения в обычном центре обработки данных, можно непосредственно портировать на виртуальные машины в публичном облаке. Как правило, подобный процесс миграции требует лишь минимальных изменений в архитектуре и программном коде развернутого приложения. В подходе, основанном на виртуализированной базе данных, серверы баз данных (как и любые другие программные компоненты) для исполнения перемещаются на виртуальные машины. Хотя инициализация виртуальной машины для каждой копии базы данных порождает определенные издержки с точки зрения производительности, эти издержки оцениваются величиной менее 10%. На практике одно из основных преимуществ подхода на основе виртуализированной базы данных заключается в том, что при необходимости приложение может иметь полный контроль над динамическим выделением и конфигурированием физических ресурсов уровня баз данных (серверов баз данных). В результате приложения способны полностью использовать свойство эластичности облачной среды для достижения заранее заданных или настраиваемых целевых показателей масштабируемости или снижения затрат; однако для достижения этих целей требуется компонент для управления доступом, который отвечал бы за мониторинг состояния системы и за выполнение соответствующих действий (например, за выделение увеличенного/уменьшенного объема вычислительных ресурсов) согласно заданным требованиям приложений и стратегиям. Основные обязанности этого компонента состоят в принятии решений о том, когда активировать увеличение или уменьшение количества виртуализированных серверов баз данных, выделяемых программному приложению. Роль мультиаренды в центрах обработки данныхВо многих случаях центры обработки данных используются недостаточно вследствие таких причин, как избыточное выделение ресурсов и изменяющиеся по времени потребности в ресурсах со стороны типичных корпоративных приложений. Мультиаренда (Multi-tenancy) - это механизм оптимизации хостинговых сервисов, при котором несколько клиентов консолидируется в рамках одной операционной системы (на сервере исполняется единственный экземпляр программного обеспечения, обслуживающий несколько клиентов), благодаря чему экономия на масштабе помогает эффективно снижать стоимость вычислительной инфраструктуры. В частности мультиаренда позволяет объединять ресурсы в пул, что повышает коэффициент использования ресурсов благодаря избавлению от необходимости выделения ресурсов каждому арендатору в соответствии с его максимальной нагрузкой. Это делает мультиаренду привлекательным механизмом для следующих сторон.
База данных как сервис- это концепция, согласно которой сторонний поставщик осуществляет хостинг реляционной базы данных и предоставляет ее как сервис. Такие сервисы в значительной степени избавляют пользователей от необходимости приобретать дорогие аппаратные и программные средства, заниматься обновлениями программного обеспечения, а также привлекать специалистов для выполнения административных задач и технического обслуживания. Как ожидается, реальная миграция любого приложения на уровне базы данных в сервис реляционной базы данных потребует минимальных усилий, если обеспечивающая реляционная СУБД для существующего приложения будет совместима с предложенным сервисом. Однако поставщик услуг по различным причинам может наложить определенные ограничения или создать те или иные препятствия (например, ограничения по максимальному размеру хостинговой базы данных, максимальному количеству возможных параллельных соединений и т. д.). Кроме того, программные приложения не обладают достаточной гибкостью для управления ресурсами, выделенными другим приложениям (например, для динамического выделения дополнительных ресурсов с целью обслуживания увеличивающейся рабочей нагрузки или для динамического уменьшения выделенных ресурсов с целью уменьшения операционных расходов). Весь процесс управления ресурсами и их распределения контролируется на стороне поставщика сервиса, что требует точного планирования распределяемых вычислительных ресурсов для уровня баз данных и ограничивает способность приложений заказчика в максимальной степени использовать потенциальные преимущества посредством задействования таких особенностей облачной среды, как эластичность и масштабируемость. Почему реляционные базы данных могут оказаться неоптимальнымиВообще говоря, системы управления реляционными базами данных на протяжении нескольких десятилетий рассматривались как универсальное решение для обеспечения сохранения и извлечения данных. Они достигли высокого уровня зрелости в результате обширных научно-исследовательских усилий и породили большой успешный рынок и множество решений для различных областей бизнеса. Постоянно растущая потребность в масштабируемости и в новых приложениях породила новые проблемы для традиционных реляционных СУБД, в т. ч. определенную неудовлетворенность результатами применения такого универсального решения в некоторых приложениях веб-масштаба. Ответом на эту проблему было новое поколение недорогого высокопроизводительного программного обеспечения управления базами данных, призванного преодолеть доминирование систем управления реляционными базами данных. Одна из причин перехода к NoSQL-решениям состоит в том, что различные реализации веб-приложений, корпоративных приложений и облачных приложений предъявляют различные требования к своим базам данных, - например, не каждому приложению требуется жесткая согласованность данных. Еще один пример. Для веб-сайтов с большим объемом трафика, таких как eBay, Amazon, Twitter и Facebook, масштабируемость и высокая доступность - это важнейшие требования, которые должны соблюдаться в обязательном порядке. Для этих приложений даже малейшая остановка может иметь существенные финансовые последствия и отрицательно повлиять на доверие потребителей. Теперь рассмотрим базовые принципы конструирования базы данных типа NoSQL. Известная теорема CAP (Consistency, Availability, Tolerance to Partitions - Согласованность, Доступность, Устойчивость к разделению) показывает, что распределенная система управления базами данных на практике способна обеспечить выполнение не более двух из трех указанных свойств. Большинство подобных систем жертвует требованием строгой согласованности (дополнительная информация по эволюции теоремы CAP приведена на врезке). В частности, в этих системах применяется политика ослабленной согласованности под названием согласованность в конечном счете (eventual consistency), которая гарантирует, что если к реплицированному объекту не будут применяться никакие новые обновления, то в конечном счете каждое обращение к этому объекту будет возвращать последнее обновленное значение. В отсутствие ошибок максимальный размер окна несогласованности может быть определен на основе таких факторов, как коммуникационные задержки, нагрузка на систему и количество копий, затрагиваемых схемой репликации. Новые NoSQL-системы обладают несколькими общими конструктивными особенностями.
Перечисленные конструктивные особенности этих систем ориентированы в первую очередь на достижение следующих системных характеристик.
И действительно, продукты Google BigTable и Amazon Dynamo подтвердили реализуемость этой концепции, что вдохновило и инициировало разработку всех NoSQL-систем.
Сообщество разработчиков ПО с открытым исходным кодом отреагировало на это созданием таких систем, как HBase, Cassandra, Voldemort, Riak, Redis, Hypertable, MongoDB, CouchDB, Neo4j, а также множеством других проектов. Эти проекты отличаются друг от друга преимущественно принятыми в них решениями относительно альтернативных подходов к проектированию.
Теперь рассмотрим возможности и функции основных представителей для различных альтернативных реализаций NoSQL-систем, а именно SimpleDB, HBase и MongoDB. SimpleDBSimpleDB - это коммерческий сервис инфраструктуры AWS (Amazon Web Services), предназначенный для использования в качестве хранилища структурированных данных в облаке и поддерживаемый кластерами серверов баз данных, управление которым осуществляет Amazon. Это высоконадежное и гибкое нереляционное хранилище данных, которое берет на себя работу по администрированию баз данных. На практике SimpleDB представляет собой размещенный в облаке (хостинговый) сервис хранения данных, поддерживающий различные прикладные интерфейсы (такие как REST API), что обеспечивает удобство использования и получение доступа любому приложению, хостинг которого осуществляется сервисом IBM® SmartCloud® Enterprise. Для хранения данных в SimpleDB не требуется никакой информации о заранее заданной схеме. Разработчики просто сохраняют и запрашивают элементы данных посредством запросов к веб-сервисам, а SimpleDB делает все остальное. Не существует никакого правила, которое заставляло бы каждый элемент данных (запись данных) иметь одинаковые поля; однако отсутствие схемы означает также отсутствие типов данных, поскольку все значения данных рассматриваются как символьные данные переменной длины. К недостаткам хранилища данных без схемы также относятся отсутствие автоматической проверки на целостность в базе данных (внешние ключи отсутствуют) и повышение нагрузки на приложение в связи с форматированием и преобразованием типов. Структура калькуляции цен за пользование SimpleDB предусматривает плату за хранение данных, за передачу данных и за использование процессоров; при этом базовая плата и минимальная плата отсутствуют. Подобно большинству AWS-сервисов, SimpleDB предоставляет простой API-интерфейс, который следует правилам и принципам протоколов REST и SOAP, согласно которым для выполнения какой-либо операции пользователь отправляет сообщение с соответствующим запросом. Сервер SimpleDB выполняет операции, если нет ошибки, и возвращает код успеха и данные ответа. Данные ответа представляют собой пакет HTTP-ответа в формате XML, который имеет заголовки, метаданные хранения и определенную полезную нагрузку. Высшим уровнем абстрактного элемента хранения данных в SimpleDB является т. н. домен (domain). В качестве грубой аналогии можно сказать, что домен похож на таблицу базы данных, в которой можно создавать и удалять домены по мере необходимости. Для создания домена не предоставляется никаких проектировочных или конфигурационных опций. Единственным параметром, который можно задать, является имя домена. Все данные, хранящиеся в домене SimpleDB, принимают форму пар атрибутов "значение-ключ". Каждая пара атрибутов связана с элементом, который играет роль строки таблицы. Имя атрибута подобно имени столбца базы данных, однако различные элементы (строки) могут содержать различные имена атрибутов, что позволяет свободно хранить различные атрибуты в некоторых элементах без изменения расположения других элементов, которые не имеют таких же атрибутов. Подобная гибкость позволяет безболезненно добавлять новые поля данных в типичной ситуации изменения схемы или развития схемы. Кроме того, каждый атрибут может иметь не одно значение, а массив значений (многозначные атрибуты). В этом случае разработчику достаточно добавить другой атрибут к элементу и использовать это же имя атрибута, но с иным значением. Каждое значение автоматически индексируется при его добавлении, однако нет никаких явных индексов, подлежащих техническому сопровождению, и соответственно нет необходимости в техническом сопровождении индексов. С другой стороны, разработчик не имеет прямого контроля над созданными индексами. Следующий фрагмент кода на Java™ представляет собой пример создания домена SimpleDB. SimpleDB simpleDB = new SimpleDB(accessKeyID, secretAccessKey); try { simpleDB.createDomain("employee"); System.out.println("create domain succeeded"); } catch (SDBException e) { System.err.printf("create domain failed"); } В этом примере переменные
Следующий фрагмент кода представляет собой пример сохранения данных с помощью операции SimpleDB simpleDB = new SimpleDB(accessKeyID, secretAccessKey); ItemAttribute[] employeeData = new empAttribute[] { new ItemAttribute("empID", "JohnS"), new ItemAttribute("first_name", "John"), new ItemAttribute("last_name", "Smith"), new ItemAttribute("city", "Sydney"), }; try { Domain domain = simpleDB.getDomain("employee"); Item newItem = domain.getItem("E12345"); newItem.putAttributes(Arrays.asList(employeeData)); System.out.println("put attributes succeeded"); } catch (SDBException e) { System.err.printf("put attributes failed"); } В следующем фрагменте Java-кода показано получение ранее сохраненных данных. SimpleDB simpleDB = new SimpleDB(accessKeyID, secretAccessKey); try { Domain domain = simpleDB.getDomain("users"); Item item = domain.getItem("E12345"); String fname = user.get("first_name "); String lname = user.get("last_name "); String city = user.get("city"); System.out.printf("%s %s %s", fname, lname, city); } catch (SDBException e) { System.err.printf("get attributes failed"); } Другие операции манипулирования данными, которые поддерживаются в SimpleDB:
API-интерфейс SimpleDB Select API использует язык запросов, подобный SQL-оператору Select. Благодаря этому операции SimpleDB Select оказываются хорошо знакомыми пользователю, что упрощает его обучение. Необходимо учитывать, что этот язык поддерживает запросы только в масштабе одного домена (т. е. без соединений, без нескольких доменов и без запросов sub-Select). Например, следующий оператор SimpleDB Select выбирает фильмы с самым высоким рейтингом в обеспечивающем домене.
В показанном выше примере В SimpleDB реализованы сложные внутренние механизмы репликации и переключения при отказе, поэтому SimpleDB гарантирует высокую доступность данных за счет автоматической репликации своих данных в различные местоположения. Для достижения целевого уровня высокой доступности пользователю нет необходимости прилагать какие-либо дополнительные усилия или становиться специалистом по обеспечению высокой доступности или по технологиям репликации. Для каждого пользовательского запроса на чтение SimpleDB поддерживает две опции - "согласованность в конечном счете" или "сильная согласованность". В общем случае использование опции согласованного чтения устраняет необходимость в окне согласованности для запроса. Результаты согласованного чтения гарантированно возвращают большинство актуальных значений. В большинстве случаев согласованное чтение происходит не медленнее, чем согласованное чтение в конечном счете, однако согласованные запросы чтения в некоторых случаях могут иметь более высокую задержку и меньшую пропускную способность (например, в случае тяжелых рабочих нагрузок). SimpleDB не предлагает гарантий относительно окна согласованности в конечном счете, однако достаточно часто продолжительность окна составляет менее одной секунды. При работе с сервисом SimpleDB пользователю необходимо учитывать лишь несколько ограничений.
HBaseApache HBase - база данных экосистемы Hadoop - представляет собой распределенную систему хранения структурированных данных, которая спроектирована в расчете на горизонтальное масштабирование до очень больших размеров с использованием массовых компьютеров. Это проект Apache, в котором честно реализован клон архитектуры хранения BigTable (к числу других клонов BigTable относятся проект Apache Cassandra и проект Hypertable). На практике кластеры HBase могут устанавливаться и исполняться на любом облачном IaaS-сервисе поставщика, таком как IBM SmartCloud Enterprise. Построенный поверх Hadoop продукт IBM InfoSphere® BigInsights™ обеспечивает возможности, соответствующие требованиям корпоративных пользователей . Продукт HBase, выпущенный в 2007 г., представляет собой разреженную распределенную персистентную многомерную сортированную таблицу. Эта таблица индексируется по ключу строки, по ключу столбца и по метке времени. Каждое значение в этой таблице представляет собой неинтерпретируемый массив байтов, поэтому клиентам обычно приходится сериализовать различные формы структурированных и полуструктурированных данных в виде соответствующих строк. Рассмотрим конкретный пример, который демонстрирует ряд основных проектировочных решений HBase. В этом сценарии мы хотим сохранить копию большой коллекции веб-страниц в виде единственной таблицы. На рис. 1 показан пример таблицы, в которой URL-адреса используются в качестве ключей строк, а различные аспекты веб-страниц используются в качестве имен столбцов. Содержимое веб-страниц хранится в единственном столбце, который сохраняет несколько версий страницы с метками момента времени, в который они были выбраны. Рисунок 1. Пример записи в таблице HBaseКлючи строк в таблице представляют собой произвольные строки; каждая операция чтения/записи данных с одним ключом строки является атомарной. HBase поддерживает лексикографическое упорядочение данных по ключам строк, при этом диапазон строк для таблицы динамически секционируется. Наличие всегда отсортированных ключей строк может служить аналогом индекса первичного ключа, применяемого в реляционных базах данных. Хотя в исходной реализации BigTable имеется лишь один индекс, в HBase добавлена поддержка вторичных индексов. Каждый диапазон строк в каждой таблице, т.н. таблет (tablet), представляет собой минимальный блок для распределения и выравнивания нагрузки. Операции чтения коротких диапазонов строк являются эффективными и обычно требуют обмена данными лишь с небольшим количеством машин. HBase может иметь неограниченное число столбцов, сгруппированных в наборы под названные column families (семейства столбцов). Семейства столбцов представляют собой базовую единицу управления доступом. Данные хранятся по столбцам, при этом нет необходимости хранить значения, если они равны нулю, поэтому HBase хорошо подходит для разреженных наборов данных. К каждому значению столбца (каждой ячейке) добавляется метка времени - это делает система неявным образом или пользователь явным образом. Это означает, что каждая ячейка в BigTable может содержать несколько версий одних и тех же данных, индексированных своими метками времени. Пользователь может гибко задавать количество версий конкретного значения, подлежащих сохранению. Версии хранятся в порядке уменьшения метки времени, поэтому более новые версии всегда могут быть прочитаны в первую очередь. Таким образом, доступ к данным можно представить следующим образом.
Тот факт, что операции чтения коротких диапазонов строк требуют передачи небольшого объема данных, может повлиять на разработку запросов, чтобы они соответствовали имеющимся сетевым ресурсам. На физическом уровне HBase использует распределенную файловую систему Hadoop вместо файловой системы Google. HBase помещает обновления в память и периодически записывает их в файлы на диск. Базовая единица масштабируемости и выравнивания нагрузки в HBase называется region (регион). По существу регионы - это непрерывные диапазоны строк, хранящихся вместе. Когда регионы становятся слишком большими, система осуществляет их динамическое секционирование; регионы также могут объединяться с целью уменьшения их количества и количества файлов хранения, требующихся для их хранения. Первоначально в таблице имеется лишь один регион; когда вы начинаете добавлять в него данные, система следит за его размером, чтобы исключить превышение заданного максимума. При превышении этого предела регион делится на две части по среднему ключу региона, в результате чего создаются две примерно равные половины. Каждый регион обслуживается ровно одним сервером региона, а каждый из этих серверов в любой момент времени способен обслуживать несколько регионов. Разделение и обслуживание региона может рассматриваться как аналог автоматического шардинга (sharding) - метода, предлагаемого другими системами. Серверы региона можно добавлять и удалять без прекращения работы системы. Мастер-система отвечает за присвоение регионов серверам регионов; для выполнения этой задачи используется Apache ZooKeeper - надежный, обладающий высокой доступностью, персистентный и распределенный координационный сервис. Этот же сервис обрабатывает изменения схемы, такие как создание таблиц и семейств столбцов. В HBase все операции, изменяющие данные, гарантированно являются атомарными на построчной основе. HBase использует т.н. оптимистичное управление параллелизмом, которое прерывает любые операции в случае конфликтов с другими обновлениями. Это затрагивает все остальные параллельные операции чтения/записи в одной и той же строке, поскольку эти операции или читают согласованную последнюю "мутацию", или дожидаются возможности применения своих изменений. Для хранения данных и доступа к ним HBase предоставляет API-интерфейсы Java API, Thrift API, REST API и JDBC/ODBC-соединение. В следующем фрагменте кода показан пример сохранения данных в HBase. Configuration conf = HBaseConfiguration.create(); HTable table = new HTable(conf, "employee"); Put put = new Put(Bytes.toBytes("E12345")); put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("first_name"), Bytes.toBytes("John")); put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("last_name"), Bytes.toBytes("Smith")); put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("city"), Bytes.toBytes("Sydney")); table.put(put); В этом примере создается строка в таблице Configuration conf = HBaseConfiguration.create(); HTable table = new HTable(conf, " employee"); Get get = new Get(Bytes.toBytes("E12345")); get.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("first_name ")); Result result = table.get(get); byte[] val = result.getValue(Bytes.toBytes("colfam1"), Bytes.toBytes("first_name ")); System.out.println("Employee's first name is: " + Bytes.toString(val)); Кроме того, HBase предоставляет обширный набор API-функций, таких как функция MongoDBMongoDB - это распределенная, не имеющая схемы, ориентированная на документы база данных, созданная компанией 10gen. Она хранит двоичные JSON-документы (BSON), которые представляют JSON в двоичном коде, подобно объектам. BSON поддерживает вложенные структуры объектов со встроенными объектами и массивами. Подобно HBase, кластеры MongoDB и CouchDB могут устанавливаться и исполняться на любой IaaS-платформе провайдера, такой как IBM SmartCloud Enterprise. Основой MongoDB является концепция документа (document), который представляется в виде упорядоченного набора ключей с ассоциированными значениями; коллекция (collection) - это группа таких документов. Если документ является MongoDB-аналогом строки в реляционной базе данных, то коллекция может считаться аналогом таблицы. Коллекции не имеют схем. Это означает, что документы в рамках одной коллекции могут иметь любое количество различных форм. Например, оба следующих документа могли бы храниться в одной коллекции. {"empID" : "E12345", "fname" : "John", "lname" : "Smit", "city" : "Sydney", "age": 32} {"postID" : "P1", "postText" : "This is my blog post"} Обратите внимание, что предыдущие документы не только имеют разные структуры и типы своих значений, они также имеют совершенно разные ключи. MongoDB группирует коллекции в базы данных. Один экземпляр MongoDB может поддерживать несколько баз данных, каждая из которых может рассматриваться как практически независимая. Функция post = {"title" : "MongoDB Example", "content" : "Insertion Example ", "author" : :"John Smith"} db.blog.insert(post) После сохранения сообщения блога в базе данных его можно будет получить посредством вызова метода Метод Если вы хотите изменить сообщение, можно использовать метод
В следующем фрагменте кода показан пример обновления содержимого сообщения в блоге: post = {"content" : "Update Example"} blog.update({{title : " MongoDB Example "}, post } Обратите внимание, что MongoDB гарантирует только "согласованность в конечном счете", поэтому процесс может прочитать старую версию документа, даже если другой процесс уже выполнил операции обновления этого документа. Кроме того, MongoDB не предоставляет механизма управления транзакциями, поэтому если процесс читает документ и записывает его измененную версию обратно в базу данных, то другой процесс имеет возможность записать новую версию этого документа в промежутке времени между операцией чтения и операцией записи первого процесса. Метод Можно создать индексы с помощью метода Кроме того, MongoDB поддерживает индексацию документов, состоящих из нескольких файлов. API-интерфейс продукта MongoDB является функционально насыщенным; он поддерживает различные функции пакетной обработки и агрегации. Продукт MongoDB реализован на языке C++; он предоставляет драйверы для многих языков программирования включая C, C#, C++, Erlang, Haskell, Java, JavaScript, Perl, PHP, Python, Ruby и Scala. Кроме того, предусмотрен интерфейс командной строки для JavaScript. Проект Apache CouchDB - это еще один пример ориентированной на документы базы данных, которая подобна MongoDB с точки зрения модели данных и механизма управления данными. Он написан на языке Erlang, но на данный момент не является распределенной базой данных, хотя и может использоваться для приложений, написанных на JavaScript. Хранение и извлечение документов осуществляется как для JSON-объектов. CouchDB не имеет поддержки типов документов или какого-либо эквивалента таблиц, поэтому разработчик должен самостоятельно формировать различия документов по типам. Эта задача может быть решена посредством помещения атрибута Интересная функция CouchDB - поддержка задания функций валидации. Например, при обновлении или при создании документа функции валидации вызываются для утверждения или проверки этих операций. Кроме того, продукт CouchDB может быть настроен на гарантированное поддержание сильной согласованности или согласованности в конечном счете. Полезно знать: шардингШард базы данных (shard) - это горизонтальный сегмент в базе данных или в поисковом механизме. Каждый отдельный раздел трактуется как шард. Строки таблицы базы данных хранятся раздельно, без разбиения на столбцы (т. е. без нормализации), а каждый раздел (шард) может быть размещен в отдельном сервисе базы данных или даже в отдельном физическом местоположении. Преимущества шардинга.
На практике механизм шардинга оказывается довольно сложным. Эндрю Гловер (Andrew Glover), разработчик и технический писатель, предлагает хороший обзор технологии шардинга в статье на веб-сайте developerWorks. Поддержка NoSQL продуктом DB2При стремлении к эффективному управлению данными в облачной среде конечной целью является применение наиболее подходящей модели данных для каждой задачи управления данными. Поэтому имеет смысл упомянуть, что даже традиционные реляционные базы данных поддерживают различные версии NoSQL для достижения этой цели (я поговорю об этом в заключении статьи). Например, IBM DB2 поддерживает хранилище NoSQL-графа с помощью API-интерфейса, который поддерживает множественные вызовы и программный стек NoSQL-решения. Граф хранит данные хранилища лишь в трех столбцах (т.н. triple - тройка), которые представляют данные как существительное/глагол/существительное. Простой запрос может совместно извлекать любые тройки данных, которые имеют совпадающие существительные. DB2 поддерживает функции, повышающие производительность хранилища графа, такие как возможность отображения троек графа на реляционные таблицы (с неограниченным количеством столбцов), сжатие данных, параллельное исполнение и выравнивание нагрузки. Кроме того, благодаря технологии DB2 pureXML продукт DB2 поддерживает NoSQL-подобный тип базы данных, которая способна хранить XML-данные, что упрощает управление веб-данными в их нативном иерархическом формате. Для обработки XML-документов пользователи DB2 могут применять такие языки запросов, как XPath и XQuery. Эта модель данных удобна в сценариях применения, в которых подлежащая управлению информация непрерывно изменяется. ЗаключениеНа протяжении более чем четверти века системы управления реляционными базами данных были основной моделью в области управления базами данных. Эти системы предоставляют чрезвычайно привлекательный интерфейс для доступа к данным и манипулирования ими; они подтвердили свою успешность во многих приложениях для финансового сектора, для ведения бизнеса и для Интернета. После возникновения потребности в управлении данными в веб-масштабе эти системы стали страдать от определенных ограничений. NoSQL-системы обладают следующими основными преимуществами в качестве альтернативной модели для управления базами данных.
Прежде чем базы данных NoSQL станут привлекательными для основной массы корпоративных пользователей, им еще предстоит преодолеть множество препятствий.
По всей вероятности, дебаты между сторонниками NoSQL и реляционных СУБД никогда не дадут однозначного ответа. Наиболее вероятный наилучший ответ будет заключаться в том, что различные решения для управления данными будут сосуществовать в рамках одного приложения. Например, можно представить себе приложение, которое использует разные хранилища данных в разных целях.
Ссылки по теме
|
|