YCSB для VoltDB

Кто-нибудь знает, есть ли какая-либо реализация клиента/драйвера YCSB для тестирования VoltDB? Или даже какие-либо справочные публикации/блог/статья/исследовательский проект?

Можем ли мы использовать рабочие нагрузки TPC для сравнительного анализа VoltDB?

Большое спасибо всем.


person Joarder Kamal    schedule 02.09.2012    source источник


Ответы (2)


Разработчик VoltDB здесь.

Официального драйвера YCSB нет, хотя несколько пользователей провели бенчмаркинг с использованием среды YCSB. Между YCSB и VoltDB есть небольшое несоответствие импеданса. YCSB предназначен для работы с хранилищами столбцов с разбивкой по диапазонам. VoltDB — это реляционное хранилище, разделенное хэшем, с богатой поддержкой логики на стороне сервера.

Это проявляется как проблема тремя способами.

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

Это не непреодолимо, но требует некоторого размышления.

Вторая проблема заключается в том, что модель хранилища столбцов плохо соответствует реляционной модели данных. Я могу значительно повысить скорость и эффективность использования памяти, упаковав небольшие карты в одну строку с помощью большого двоичного объекта и перезаписав его при добавлении/обновлении пар k/v. Вот как Redis обрабатывает маленькие карты.

Для больших ключей со многими/большими парами k/v имеет смысл денормализовать и позволить базе данных управлять памятью. Немного поработав, вы могли бы создать API хранимой процедуры, который делает это прозрачно.

Опять же, это не непреодолимо, но и не тривиально.

Третья проблема заключается в том, что YCSB написан в предположении, что вся логика существует на клиенте и что сервер должен материализовать все данные для клиента. Это означает, что ваше реальное приложение, написанное для VoltDB, может быть в несколько раз быстрее и эффективнее. Быстрее, потому что логика на стороне сервера может исключить несколько обращений к клиенту и более эффективно использовать пространство, потому что поддержка транзакций позволяет вам избежать написания вашего приложения в виде структурированного журнала.

YCSB даст вам общее представление о том, как VoltDB работает и масштабируется, но есть нетривиальные преимущества, которые можно получить, написав приложение таким образом, который подходит для реляционной модели данных и акцента Volt на логике на стороне сервера.

По поводу ТПК-С. VoltDB был создан специально для тестов, подобных TPC-C. Я говорю «нравится», потому что это неофициально и несколько отличается от TPC-C. Наиболее существенное отличие заключается в том, что транзакции новых заказов используют только один склад (а не требуемые 1-10 складов для некоторого процента новых заказов). Это важно, потому что позволяет тесту идеально выполнять сегментацию без каких-либо распределенных транзакций.

Тест VoltDB TPC-C не входит в состав дистрибутива, но доступен на гитхаб.

person aweisberg    schedule 05.09.2012

Еще один разработчик VoltDB, который только что завершил процесс реализации драйвера YCSB. Исходный код этого драйвера можно найти на GitHub по адресу https://github.com/VoltDB/voltdb/tree/master/tests/test_apps/ycsb.

Немного подробностей о нашей реализации:

YCSB работает с широким форматом столбцов, сопоставляя строковые ключи с рядом сопоставлений строковых и двоичных полей k/v. Создание драйвера, который гибко справляется с этим, т. е. такого, который будет обрабатывать произвольные конфигурации YCSB, не позволяет напрямую использовать фиксированную реляционную схему. Чтобы решить эту проблему, мы использовали подход типа «маленькой карты», то есть для каждого ключа мы сжимаем все поля в один большой двоичный объект, так что все строки YCSB обрабатываются парами k/v. Это делает неявное (мягкое) предположение, что количество полей для каждой строки будет относительно небольшим (скажем, ‹=50), что кажется разумным, учитывая существующие опубликованные результаты YCSB. Можно добавить дополнительную логику на уровне хранимой процедуры, чтобы иметь дело с большим количеством полей в строке, но с учетом существующего использования эталонного теста это кажется ненужной сложностью.

В качестве дальнейшего примечания мы интерпретировали операцию «сканирование» как означающую «пролистывание данных в некотором детерминированном порядке, начиная с этого ключа». В реальном мире данные что-то значат и могут иметь (или не иметь) осмысленный порядок. В мире YCSB нет особой причины предпочитать один порядок другому. Поэтому мы накладываем искусственный порядок на разделы VoltDB; в сочетании с упорядочением внутри раздела, налагаемым индексом первичного ключа, это приводит к полному упорядочению набора данных. Для заинтересованных читателей: реализация этой операции на стороне клиента использует несколько новый вариант шаблона «запускать везде», который использовался в некоторых наших примерах.

Опубликованные результаты наших тестов можно увидеть по адресу https://voltdb.com/blog/voltdb-in-memory-database-achieves-best-in-class-results-running-in-the-cloud.-on-the-ycsb-benchmark-3/. Как предположил мой коллега выше, результаты этого теста, хотя и достаточно сильные, на самом деле занижают производительность VoltDB, поскольку он не использует преимущества оптимизации, доступные за счет объединения логики вместе в вызовах хранимых процедур.

person afrogers    schedule 07.05.2014