Авторы позиционируют HyperDex как распределённое, отказоустойчивое, легко-маштабируемое, заточенное на очень быстрый поиск NoSQL key-value хранилище.
Главная фича — новый принцип хранения объектов в многомерном эвклидовом пространстве (рис. слева), используя гиперпространственное хэширование (hyperspace hashing) (на который, кстати, авторы сейчас получают патент), которое позволяет выполнять большинство типичных задач от 2 до 13 раз быстрее, чем в MongoDB, Redis, Cassandra.
О проекте
HyperDex появился в недрах факультета компьютерных наук Корнелльского Университета силами 3-х авторов.
Написан на C++; 39,750 LoC; Сорсы на гитхабе (лицензия 3-clause BSD license)
Сайт | Полное описание (PDF, 15 стр., англ.)
Мануал по установке (есть пакеты для Debian, Ubuntu, Fedora)
* Важно: HyperDex заводится только на x86_64 платформе.
В двух словах про гиперпространственное хэширование (hyperspace hashing)
HyperDex представляет каждую таблицу в качестве независимого многомерного пространства, где оси — атрибуты таблицы. На примере 1-го рисунка, мы имеем таблицу, содержащую инфу о пользователе с атрибутами «First Name» (ось X), «Last Name» (Y) и «Phone» (Z). HyperDex присваивает каждому объекту соответствующие координаты на основе его атрибутов. Далее, объект мэпится к оным координатам методом хэширования каждого его атрибута по соответствующим осям.
В случае, когда атрибутов много, пространство разбивается на субпространства (subspaces)
Более подробная инфа по принципам хэширования, хранения на диске, а также шардингу и репликации — читайте в полном описании проекта.
Бенчмарки
Бенчмарки проводились тулзой YCSB (Yahoo! Cloud Serving Benchmark) на кластере из 14 нод (конфа каждой — 2х Intel Xeon 2.5 GHz E5420, 16 GB RAM, 500 GB SATA 3 Gbit 7200 RPM. 64-bit Debian 6 Linux 2.6.32 kernel)
MongoDB 2.0.0
Cassandra 0.7.3
Описание нагрузочных сценариев на графиках (Workloads (англ.)):
- A. 50/50 чтение-запись (сессии, пара действий с бд)
- B. 95/5 чтение-запись
- C. Только чтение
- D. Добавление новых записей и чтение последних изменений
- E. Поиск
- F. Чтение объекта / изменение / запись обратно
Вставка 10 000 000 объектов |
Workload B. 95% чтение, 5% запись на 10К сценарных операций |
Поиск. 10К сценарных операций. Важное замечание по этому бенчу: HyperDex ищет не по индексным атрибутам объектов (!) (non-primary), в то время как остальные — только по primary-key |
|
Сравнение с Redis. Workload E — поиск |
Обсуждение на Hacker News | Slashdot
Автор: demark