Конец архитектурной эпохи

         

Сравнение производительности


TPC-C выполняется над схемой, показанной на рис. 1, и для этого тестового набора определяются пять классов транзакций (new_order, payment, order status, delivery и stock_level).


Рис. 1. Схема TPC-C (воспроизводится из спецификации TPC-C версии 5.8.0, стр. 10)

По причине ограниченности объема в этой статье не приводится код этих транзакций; читатели отсылаются к спецификации TPC-C [TPCC]. В табл. 1 резюмируется их поведение.

Таблица 1. Классы транзакций TPC-C

new_order Размещает заказ пользователя. 90% всех заказов может быть полностью удовлетворено со складов, находящихся неподалеку от месторасположения пользователей («домашних» складов пользователей); для 10% заказов требуется доступ к удаленным складам. Эта транзакция производит выборки из базы данных и модифицирует данные. Минимальное процентное соотношение таких транзакций в смеси запускаемых транзакций не задается, но их должно быть около 50%.
payment Обновляет остаток средств пользователей и поля sales в таблицах Warehouse и District. 85% обновлений относится к «домашним» складам, 15% – к удаленным складам. Транзакция производит выборки из базы данных и модифицирует данные. В смеси должно присутствовать не менее 43% таких транзакций.
order-status Запрашивает состояние последнего заказа пользователя. Только читающая транзакция. В смеси должно присутствовать не менее 4% таких транзакций.
delivery Выбирает склад и для каждого из 10 районов «доставляет» заказ, что означает удаление записи из таблицы new_order и обновление остаток средств пользователя. Каждая доставка может быть отдельной транзакцией. В смеси должно присутствовать не менее 4% таких транзакций.
stock-level Находит изделия с уровнем запасов, меньшим некоторого порогового значения. Только читающая транзакция. Должна читать зафиксированные данные, но не требует сериализуемости. В смеси должно быть не менее 4% таких транзакций.

Имеются три возможных подхода к эффективной реализации TPC-C на основе H-Store.
Во-первых, этот тестовый набор можно было бы выполнить на компьютере с одним одноядерным процессором. Это автоматически привело бы к тому, что все классы транзакций стали бы одноузловыми, и каждая транзакция могла бы выполняться от начала до завершения в однопотоковой среде. В парном узле, обеспечивающем высокий уровень доступности, будет поддерживаться тот же порядок выполнения. Как будет показано немного ниже, все классы транзакций TPC-C могут быть сделаны строго двухфазными. Поэтому все транзакции в обоих узлах будут либо зафиксированы, либо аварийно прекращены. Следовательно, при работе системы в одном узле при наличии парного узла, обеспечивающего высокий уровень доступности, свойства ACID удается достичь без каких бы то ни было накладных расходов.

Для использования компьютеров с одним или несколькими многоядерными процессорами требуется тщательное кодирование транзакций TPC-C для достижения их свойств стерильности или одноразового использования результатов и обеспечения функционирования без накладных расходов в многоузловой среде. Сначала авторы обсуждают разделение данных.

Схема базы данных TPC-C не является древовидной. Такой ее делает наличие таблицы Item и связи между таблицами Order-line и Stock. Однако таблица Item только читается, и ее можно реплицировать в каждом узле. Таблицу Order-line можно разделить между всеми узлами в соответствии со значениями столбца Order. При проведении таких репликации и разделения схема декомпозируется таким образом, что в каждом узле содержится подмножество кортежей, относящихся к некоторому разделу таблицы складов по районам. Это далее будет называться основной стратегией H-Store для разделения и репликации.


Содержание раздела