HyperDex — новое опенсорсное NoSQL key-value хранилище, заточенное на очень быстрый поиск


    Авторы позиционируют HyperDex как распределённое, отказоустойчивое, легко-маштабируемое, заточенное на очень быстрый поиск NoSQL key-value хранилище.

    Главная фича — новый принцип хранения объектов в многомерном эвклидовом пространстве (рис. слева), используя гиперпространственное хэширование (hyperspace hashing) (на который, кстати, авторы сейчас получают патент), которое позволяет выполнять большинство типичных задач от 2 до 13 раз быстрее, чем в MongoDB, Redis, Cassandra.





    О проекте



    HyperDex появился в недрах факультета компьютерных наук Корнелльского Университета силами 3-х авторов.

    Один из авторов заявил о проекте на Hacker News & Slashdot лишь вчера, 22 февраля.
    Судя по сайту и описанию проекта — инфы пока ещё мало. Характер этого топика — вводный, я решил перевести вступительную инфу о проекте, доступную на их сайте и в документации. Если проект заинтересовал — советую ознакомиться с более подробным 15-ти страничным описанием (ссылка ниже)

    Написан на 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 Number» (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

    UPD: Сейчас, спустя несколько суток после публикации на HN & Slashdot, видно что эти бенчмарки — основная тема дебатов, в которых участвуют авторы как самого проекта, так и Редиса (antirez) и другие спецы по сравниваемымм продуктам. Очевидно, что каждая БД лучше всего работает по своему фронту задач и «универсальные» бенчы не дают картины для объективного сравнения.

    Описание нагрузочных сценариев на графиках (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

                              


    Линейная маштабируемость. на 32-х нодах HyperDex обрабатывает 3.2 млн. операций в секунду
                              

    Сравнение с Redis. Workload E — поиск.
    Обсуждение этого бенча в рассылке Redis (agladysh)




    Обсуждение с одним из авторов (rescrv) на Hacker News | Slashdot
    Поделиться публикацией

    Похожие публикации

    Комментарии 50
      +1
      А какие у него требования к памяти? Может ли работать со своим пространством, не загружая его целиком в память?
        0
        По потреблению памяти инфы нет. По поводу работы, не загружая в память, — может. Это on-disk storage.
          +1
          Отлично, сейчас попробую.
            0
            Пока разбирался с установкой (а у нее есть подводные камни), вышла MariaDB 5.3 release, OLAP средствами которой меня устраивает по скорости и не требует особых плясок с бубном.
        0
        Статья мутно-маркетинговая. Кто понял, расскажите, в
        чем отличие от известных приемов запихивания атрибутов
        в биты ключа, как это делает instagram, например.
          +7
          Олег, уж с вашей специализацей, опытом и, наверняка, знанием английской технической терминологии -, уверен, не составит труда прочитать всего 15 страниц полного описания + есть ссылка на патент + доступны исходники. И, вместо проявления неуважения к чужому труду, могли бы дать оценку проекту как специалист по базам данных.

          Топик — вводный. Авторы заявили о проекте в широкие массы только вчера.
            0
            Упаси бог, какое неуважение?! Я высказался о статье, которую мусолил еще неделю назад.
          +1
          А с массивами оно работать умеет? перерыл сайт их инфы не нашёл.
            +4
            Странное сравнение HyperDex с Cassandra и MongoDB — они же все три разные.
              +1
              Кассандра при этом древнейшая
                0
                Тоже удивило, учитывая количество оптимизаций по производительности в 1.x версиях очень это подозрительно. Один только read repair убивает в ванильной 0.7.3 производительность по чтению сильно.

                И вообще Cassandra оптимизирована на быструю запись, не понятно зачем с ней сравнивать решение оптимизированное на быстрое чтение…
              0
              База где хранится, в RAM или на диске?
              Каково потребление RAM и процессора в сравнении с конкурентами?
              Как происходит работа с процессором, атомарно как в редис(из чего вытекает что 1 инстанс — 1 ядро), или многопоточно?
                –3
                Mongodb то же грешит одним инстанцом на ядро.
                0
                А клиенты увы, пока только под C++, Java, Python…
                  0
                  На сколько я видел у них на сайте пока что только есть для c,c++ и python
                    0
                    На гитхабе у них под java лежит.
                      +2
                      Клиент на C легко используется из любого языка с вменяемой поддержкой сишных либ.
                    0
                    правильнее было бы с редисом сравнивать, а не с монгой
                      +5
                      Они считают раз NoSQl значит можно всех сравнивать
                        0
                        У них есть на сайте чуть-чуть про redis vs hyperdex:

                        There's new performance numbers comparing HyperDex to Redis. In every workload, HyperDex is faster than Redis. This is especially true for the SEARCH workload where HyperDex is a full 14 times faster than Redis!


                        Тем не менее они не включили редис в красивые бенчмарки с картинками :(
                          +1
                          что-то скрывают)))))
                          0
                          HyperDex — on-disk storage как и монга, к примеру. Redis — in-memory storage с фичей дампа данных на диск.

                          С редисом сравнили на операциях досутпа к кэшированным в памяти данным лишь, чтобы показать преимущество в задачах поиска по неиндексным значениям атрибутов объектов (что редис не умеет делать)

                          С сайта:
                          Redis offers advanced datastructures, but this comes at a cost: all data must fit in memory, and the system must be deployed in a single-master configuration. HyperDex does not suffer these limitations, and also provides higher performance.
                          +3
                          Очень круто! Редис быстрый, но за это заплачено отсутствием поиска по value (можно только по key), а в Resque очень хотелось бы иметь команду find_or_enqueue, чтобы не дублировать таски, но это невозможно сделать с текущим решением (используется структура List Redis-а).

                          В HyperDex value-поиск есть и я не удивлюсь, если Resque или подобное решение скоро переедет на него.

                            +4
                            youporn переедет :) Они тоже на редисе
                              +1
                              Порно — ещё быстрее!
                              +2
                              Я, надеюсь, вы понимаете, что Redis не позиционирует себя как универсальную базу? Используете его для задач, где не нужен поиск по value, и этот «минус» сразу исчезнет.
                                +1
                                Конечно) Не универсальный, но быстрый, в этом и идея.

                                Поэтому я и привел пример, где классно было бы иметь поиск по value — find_or_enqueue для Resque (библиотека для выполнения задач в фоне, написанная на Ruby) который использует Redis в качестве хранилища.
                              +2
                              Господи, нет термина субпространство, бывает подпространство.
                                +5
                                Пространства господни неисповедимы сын мой! :)
                                  +2
                                  Хорошо, хорошо, не надо больше минусовать. В следующий раз напишу в личку автору.
                                  Чесслово, раньше в статье фигурировало субпространство :-)
                                  0
                                  Нет информации о протоколе, транзакциях, реакцию на сбой в сети.
                                  Нет версии под Windows.

                                  Клиентские библиотеки только под C, C + + и Python.

                                  Я просто сейчас ищу себе NoSQL базу и эти моменты мне важны, буду смотреть за этой базой но сейчас использовать не буду.
                                    +15
                                    Очень жаль, что вы не сможете использовать эту базу. Но очень хорошо, что вы описали причины вашего решения. Я уверен, разработчики обязательно зайдут на хабрахабр и сделают всё, чтобы исправить описанные вами проблемы и недостатки.
                                      +4
                                      ИМХО любая база данных должна пройти стадию созревания в несколько лет. Молодые базы могут быть очень нестабильны
                                        0
                                        Плохой подход. Вы своему коду тоже даёте полежать несколько лет перед тем, как отправить его в продакшен?
                                        Потестите у себя — если минусов больше, то не используйте.
                                        Или хотите сказать MySQL и ничего больше сейчас? Если да, то назову несколько задач, с которыми Redis справится на несколько порядков эффективнее, хотя этой базе нет нескольких лет.
                                          +3
                                          Вы все воспринимаете буквально? Оптимальное решение задач это только одна причина. Еще есть:
                                          • наличие вменяемой документацией
                                          • консистентность данных
                                          • наличие 3rd-party тулзов
                                          • комьюнити саппорт
                                          • цикл релизов
                                          • поддержка различных языков


                                          У успешных продуктов это появляется со временем, а плохие просто умирают. Цикл времени может быть разным, но я для себя вывел несколько лет.
                                      0
                                      По статье непонятно чем это отличается от разряженных многомерных массивов.
                                        0
                                        Как бы даже не название :)
                                          0
                                          Я имел в виду старый добрый M/MUMPS: MSM, Cache, GT.M.
                                          Уже перечитал и хабрастатью и часть сайта, а разницу в подходе не понял, чувствую, что чем-то отличается, но конкретно понять не могу.
                                        +1
                                        Странно, что в обсуждении ни разу не упоминается OLAP.
                                          0
                                          Призываю в топик Костю Осипова :-)
                                            +3
                                            Обсуждение и критика бенчмарков в рассылке Redis: groups.google.com/group/redis-db/browse_thread/thread/378a32de50a782c5 (на английском)
                                              0
                                              Судя по алгоритму работы, на запросах с полнотекстовым поиском HyperDex подпросядет до уровня остальных БД, если не ниже, следовательно круг использования сужается, до фаст-фуд-сервисов, а-ля тумблер, твиттер.
                                                +1
                                                Вам не кажется, что вы сильно завышаете необходимость полнотекста?
                                                А ещё мне кажется, что ошиблись в примерах. Как раз на том же твиттере и тумблере полнотекст может быть необходим.
                                                  0
                                                  Нет, не сильно завышаю. Если бы вы сталкивались с системами документооборота, то не задавали бы таких вопросов.
                                                  И опять же для сервисов использующих модель быстро устаревающего контента полнотекстовый поиск заменяется рубрикацией, тегами и тематической группировкой, чаще всего этого более чем достаточно. Тумблер, например, не использует полнотекстовый поиск как таковой.
                                                  Я лишь уточнил, что не стоит смотреть на синтетические бенчмарки, приведенные без детального описания правил тестирования. Лучше проанализировать поведение и на основании этого делать выводы в какую нишу метит новичок. А сравнивать теплое с мягким знаете ли…
                                                    +1
                                                    А я вот знанимаюсь не документооборотом, а аналитикой и статистикой. И анализ текста в 95% случаев мне совершенно не нужен, а вот к распределённым хранилищам у меня есть большой интерес. Так что ваша классификация «круг использования сужается, до фаст-фуд-сервисов» мне кажется неверной.

                                                    Неужели вы считаете, что например, астрономы обрабатывающие полученные данные — «фастфуд»?
                                                      0
                                                      Если вы обрабатываете однотипные данные, то для этого был создан SQL. А распределенные хранилища не самоцель: вы их хоть на файлах можете организовать.
                                                        +1
                                                        Предложите мне пожалуйста распределённое SQL хранилище для сбора и анализа различных статистических срезов по пользователям и их активности. В хранилище, допустим, я положу сущность profile и click. Profile — суть таблица Users, click — суть access_log. И вот я хочу найти самое активное время для американцев возрастом 36-48 лет.

                                                        Сейчас обработка данных идёт в колоночной SQL БД на одном мощном сервере. Производительность не устраивает (упирается в диск). Предложите мне пожалуйста масштабируемое SQL решение для моей задачи.
                                                0
                                                По-моему, очень странное решение — гиперпространственное хэширование. Подходит для узкого круга задач (когда нужно уметь быстро искать по любому атрибуту). При этом, т.к. это хэширование, то нельзя делать JOIN по диапазону нескольких атрибутов эффективно (т.е. получить, скажем, все марки автомобилей на рынке с колёсной базой в дипапазоне от 2.5 до 2.7 м и ценой в диапазоне от 750 до 900 тысяч). То есть, хочу быть понят правильно, в Редис этого тоже нельзя, но если индексирование изначально заявлено как *многомерное* то именно такие запросы, на мой взгляд, интересны.

                                                Сравнение в этом ключе со всеми остальными базами мне кажется мало уместным, т.к. у конкурентов будет профиль по потреблению памяти совсем другой (индексы по каждому атрибуту таки требуют памяти).

                                                Интересно, что они при этом сразу сделали кластер. Их кластерное решение мне кажется любопытным, т.к. они обеспечивают атомарность за счёт записи изменений на несколько узлов кластера. Это правильно, быстрее чем диск, так поступает NDBCluster. Но и памяти это потребляет, по моим представлениям, соответственно.

                                                Всё что происходит очень похоже на способ маркетинга стартапа, т.к сразу готов сайт, бенчмарки, списки рассылки и т.п., о преимуществах они говорят, а о недостатках и ограничениях предоставляют сообществу сделать вывод самостоятельно.

                                                Возможно, я не прав в своих оценках, т.к. потратил на продукт только 30 минут и ушёл пилить Tarantool.

                                                Open Source мир так не живёт, community строится не сразу, особенно в такой насыщенной поляне как NoSQL.

                                                  0
                                                  Установил эту базу для тестов по сравнению с Redis. Тесты писал под Python. Итого Hyperdex вставка скачет от 1.5 до 8-10 тысяч операций, redis 23 тысячи операций. Чтение Hyperdex 2300 операций в секунду, redis 23 тысячи. Т.е. redis значительно быстрее.

                                                  В целом база интересная, но есть куда развиваться… А тесты судя по всему намеренно завышены.

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                Самое читаемое