HyperDex

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:44, 10 декабря 2017.
HyperDex
fraimed
Создатели: Robert Escriva, Bernard Wong, Emin Gün Sirer
Разработчики: Cornell University
Выпущена: 2011
Написана на: C,C++
Операционная система: UNIX-like, Windows,OS X
Тип ПО: NoSQL хранилище
Лицензия: Лицензия BSD
Веб-сайт hyperdex.org

HyperDex - это распределённое, отказоустойчивое, легко-маcштабируемое хранилище данных с открытым исходным кодом [1]. В хранилище данных NoSQL HyperDex отличается тем, что предлагает высокую производительность, богатый API, транзакции ACID, которые охватывают несколько объектов, а также надежные гарантии совместимости и отказоустойчивости. Он был разработан системной командой в Корнельском Университете [2] [3]. Главное преимущество — новый принцип хранения объектов в многомерном эвклидовом пространстве (см. рис.1), используя гиперпространственное хэширование (hyperspace hashing), которое позволяет выполнять большинство типичных задач от 2 до 13 раз быстрее, чем в MongoDB, Redis, Cassandra.

О проекте

  • HyperDex появился в недрах факультета компьютерных наук Корнелльского Университета силами 3-х авторов.
  • Написан на C++; 39,750 LoC;
  • HyperDex представляет каждую таблицу в качестве независимого многомерного пространства, где оси — атрибуты таблицы.

На примере 1-го рисунка, мы имеем таблицу, содержащую информацию о пользователе с атрибутами «First Name» (ось X), «Last Name» (Y) и «Phone Number» (Z). HyperDex присваивает каждому объекту соответствующие координаты на основе его атрибутов. Далее, объект мэпится к оным координатам методом хэширования каждого его атрибута по соответствующим осям. В случае, когда атрибутов много, пространство разбивается на подпространства (subspaces).

Рисунок 1. Атрибуты пользователя
Рисунок 2. Структура хранения атрибутов

Поддерживаемые языки

HyperDex поддерживает C, C ++, Go, Java, Python, Ruby,Node.js.

Производительность

Тест производительности, который измеряет производительность HyperDex, используя идентичную настройку для независимого исследования, которое оценивает производительность Apache Cassandra , MongoDB и HBase бок о бок, показывает, что HyperDex обладает превосходной пропускной способностью и латентностью. Многомерное хеширование достигается с помощью другого механизма, называемого гиперпространственным хешированием, чем многоколоночный подход BigTable . Гарантия согласованности обеспечивается с помощью нового протокола цепочки.

Основные функции

Распределенность
Данные распределяются по кластеру без единой точки отказа.
Гибкая модель данных
HyperDex может действовать и как ключ-значение хранилища данных и хранилище документов , поддержки неструктурированных данных (основанный на схеме / без схемы), полуструктурированная и структурировано.
Высокая производительность
Протоколы репликации и запросов нового поколения позволяют HyperDex обрабатывать операции с минимальными издержками.
Масштабируемость
Производительность чтения и записи также увеличивается линейно по мере добавления новых машин без простоя или прерывания приложений.
Отказоустойчивой
Данные автоматически реплицируются на нескольких серверах, чтобы выдержать определенное количество одновременных сбоев. Неудачные узлы могут быть заменены без простоя.
Согласованность
HyperDex гарантирует, что каждый GET возвращает результат последнего PUT. Не существует сложных моделей согласованности для изучения или программирования причуд, таких как разрешение конфликтов, для освоения.
Многопользовательские транзакции
HyperDex поддерживает транзакции ACID, которые охватывают любое количество объектов.

Пример использования

Хранение документов

  • Настройка

Первым шагом является развертывание кластера и подключение клиента. Сначала мы запускаем и инициализируем координатора:

 hyperdex coordinator -f -l 127.0.0.1 -p 1982

Затем давайте запустим процесс демона для хранения данных. Выполните следующую команду:

hyperdex daemon -f --listen=127.0.0.1 --listen-port=2012 /
                          --coordinator=127.0.0.1 --coordinator-port=1982 --data=/path/to/data
Инициализация координатора

Теперь у нас есть кластер HyperDex, готовый обслуживать наши данные. Наконец, мы создаем пространство, которое использует кластер. В этом примере давайте создадим пространство, которое может быть подходящим для хранения профилей социальных сетей.

  >>> import hyperdex.admin
  >>> a = hyperdex.admin.Admin(’127.0.0.1’, 1982)
  >>> a.add_space(’’’
  ... space profiles
  ... key username
  ... attributes
  ... document profile
  ... ’’’)
  True
  >>> import hyperdex.client
  >>> c = hyperdex.client.Client(’127.0.0.1’, 1982)
Формирование полей для базы данных
Заполнение полей данными
  • Работа с документами

Документы позволяют использовать широкий спектр приложений. Рассмотрим приложение для социальных сетей, в котором хранится профиль каждого пользователя в виде документа в HyperDex. Пользователи, которые предоставляют очень мало информации в социальной сети, будут иметь относительно редкий профиль:

{ "name" : "John  Smith" }

Можно сохранить этот простой документ почти так же, как и хранить любые другие данные в HyperDex.

  >>> Document = hyperdex.client.Document
  >>> c.put(’profiles’, ’jsmith1’, {’profile’: Document({"name": "John Smith"})})
  True

Вы можете выполнять поиск по документам так же, как вы можете выполнять поиск по обычным атрибутам HyperDex. Например, чтобы получить объекты для всех людей с именем John Doe, вы можете выполнить поиск по профилю.name для извлечения всех таких объектов:

  >>> print [x for x in c.search(’profiles’, {’profile.name’: ’John Doe’})]
  [{’username’: ’jd’, ’profile’: Document({"www": "http://example.org", "friends":
  ["John Smith"], "name": "John Doe", "email": "doe@example.org"})}]

Установка

Установка HyperDex на Ubuntu 14.04 Trusty Tahr:

Для установки файлов вам необходимо иметь root-права.

$ wget -O - http://ubuntu.hyperdex.org/hyperdex.gpg.key | apt-key add - 
 at >> /etc/apt/sources.list.d/hyperdex.list << EOF 
$ deb [arch=amd64] http://ubuntu.hyperdex.org trusty main
$ EOF

Обновляем файлы и устанавливаем серверную часть HyperDex

$ apt-get update
$ apt-get install -y hyperdex python-hyperdex-admin python-hyperdex-client

Источники

  1. HyperDex [Электронный ресурс] :Материал из https://en.wikipedia.org - Режим доступа: https://en.wikipedia.org/wiki/HyperDex (дата обращения: 15.10.2017)
  2. Информация о HyperDex [Электронный ресурс] :Материал из http://hyperdex.org - Режим доступа: http://hyperdex.org/ (дата обращения: 14.10.2017)
  3. Документация по использованию [Электронный ресурс] :Материал из http://hyperdex.org - Режим доступа:http://hyperdex.org/doc/latest/ (дата обращения: 14.10.2017)