Оглавление:
Видео: SQL или noSQL разница 2024
После правильного управления ключами вы готовы разработать, как хранить данные с помощью NoSQL, и гарантировать, что он безопасен и всегда доступен для работы вам нужно сделать.
Типы данных в хранилищах с ключом
Хранилища с ключом обычно действуют как & ldquo; ведра и Rdquo; для двоичных данных. Некоторые базы данных обеспечивают надежную внутреннюю печать данных и даже поддержку схемы. Другие просто предоставляют удобные вспомогательные функции в своих клиентских драйверах для сериализации общих структур данных приложений в хранилище значений ключа. Примеры включают карты, списки и отсортированные наборы.
Oracle NoSQL может работать в двух режимах:
-
Простой двоичный файл
-
Высокоструктурированная поддержка схемы Avro
Схема Avro сродни схеме реляционной базы данных - обеспечивает очень строгий набор правил форматирования данных JavaScript Object Notation (JSON), хранящихся в базе данных, как показано здесь:
{имя пользователя: & ldquo; afowler & Rdquo;, sessionid: 13452673, с: 1408318745, тема: & ldquo; bluesky & rdquo;}
Вы определяете схему Avro с использованием документа JSON. Это пример схемы Avro для сохраненных данных, показанных ранее:
{& ldquo; Тип & Rdquo;: & ldquo; запись & Rdquo;, & ldquo; Пространство имен & Rdquo;: & ldquo; ком. Пример & Rdquo;, & ldquo; имя & Rdquo;: & ldquo; UserSession & Rdquo;, & ldquo; поля и Rdquo;: [{& ldquo; имя & Rdquo;: & ldquo; имя пользователя и Rdquo;, & ldquo; Тип & Rdquo;: [& ldquo; Строка & Rdquo;, & rdquo; null & rdquo;]}, {& ldquo; имя & Rdquo;: & ldquo; SessionID & Rdquo;, & ldquo; Тип & Rdquo;: & ldquo; int & rdquo;}, {& ldquo; имя & Rdquo;: & ldquo; так как & Rdquo;, & ldquo; Тип & Rdquo;: & ldquo; long & rdquo;}, {& ldquo; имя & Rdquo;: & ldquo; Тема & Rdquo;, & ldquo; Тип & Rdquo;: [& ldquo; Строка & Rdquo;, & rdquo; null & rdquo;]}]}
Схема Avro обеспечивает очень сильную типизацию в базе данных, когда важна схема. В предыдущем примере вы видите строковые данные, числовой идентификатор сеанса, дату (миллисекунды, начиная с Unix Time Epoch, как длинное целое число) и настройку персонализации темы для использования на веб-сайте.
Также обратите внимание, что тип имени пользователя и темы имеет две опции - строку и нуль, то есть как вы указываете Oracle NoSQL, что допустимы пустые значения. Вы могли оставить тему в виде строки и предоставить дополнительный параметр конфигурации & ldquo; по умолчанию & Rdquo;: & ldquo; Bluesky & Rdquo;, Другие базы данных NoSQL предоставляют вторичные индексы для любого произвольного свойства значения, содержащего контент JSON. Riak, например, предоставляет вторичные индексы на основе разбиения на разделы - в основном, известное свойство в документе JSON индексируется с типом.Это позволяет запросам диапазона (меньше или больше) в дополнение к простым равным и не равным сравнениям. Riak позволяет предоставлять запросы диапазона без строгой схемы - просто определение индекса. Если данные есть, они добавляются в индекс.
Репликация данных
Сохранение нескольких копий одних и тех же данных на других серверах или даже стеллажах серверов помогает обеспечить доступность данных, если один из серверов выходит из строя. Сбой сервера происходит в основном в одном кластере.
Вы можете управлять репликами двумя основными способами:
- Master-slave: Все чтения и записи происходят с мастером. Подчиненные подчиняются и получают запросы только в случае сбоя мастера.
Репликация master-slave обычно используется в хранилищах значений ключевого значения, соответствующих ACID. Чтобы обеспечить максимальную согласованность, первичный хранилище записывается и все реплики обновляются до завершения транзакции. Этот механизм называется двухфазным фиксацией и создает дополнительную сеть и время обработки на репликах.
- Мастер-мастер: Чтение и запись могут выполняться на всех узлах, управляющих ключом. Нет понятия о & ldquo; первичный & Rdquo; владелец раздела.
Реплика мастер-мастера, как правило, в конечном итоге согласуется с тем, что кластер выполняет автоматическую операцию, чтобы определить последнее значение для ключа и удалить старые устаревшие значения.
В большинстве магазинов с ключевыми значениями это происходит медленно - во время чтения. Riak является исключением здесь, потому что у него есть анти-энтропийная служба, проверяющая согласованность во время обычных операций.
Данные для версий
Чтобы включить автоматическое разрешение конфликтов, вам нужен механизм для указания последней версии данных. В конечном итоге последовательные магазины с ключевыми значениями достигают разрешения конфликтов по-разному.
Riak использует механизм векторных часов для предсказания, какая копия является самой последней. Другие хранилища ключевых значений используют простые временные метки для указания на тотальность. Когда конфликты не могут быть разрешены автоматически, обе копии данных отправляются клиенту. Конфликтующие данные, отправляемые клиенту, могут возникать в следующей ситуации:
-
Клиент 1 пишет в реплику A 'Adam: {likes: Cheese}'.
-
Replica A копирует данные в реплику B.
-
Клиент 1 обновляет данные на реплике A до 'Adam: {likes: Cheese, hates: sunlight}'.
На этом этапе копия A не имеет достаточного времени для копирования последних данных в реплику B.
-
Клиент 2 обновляет данные на реплике B до «Адам: {любит: Собаки, ненавидит: кенгуру»).
В этот момент копия A и реплика B находятся в конфликте, и кластер базы данных не может автоматически разрешить различия.
Альтернативный механизм - использовать временные метки и доверять им, чтобы указать последние данные. В такой ситуации для приложения достаточно здраво, чтобы отметки времени считывали последнее значение перед обновлением значения.
Они проверяют флажок и устанавливают механизм,, который в основном означает. Если последняя версия все еще является версией 2, сохраните мою версию 3 ', Этот механизм иногда называют read match update (RMU) или read match write (RMW). Этот механизм является механизмом по умолчанию, используемым Oracle NoSQL, Redis, Riak и Voldemort.