MemSQL — влияние на производительность большого количества баз данных

Я ищу некоторые рекомендации по любым последствиям создания большого количества баз данных в MemSQL.

Мой вариант использования требует, чтобы каждый пользователь в моем приложении имел доступ к n таблицам. Один из вариантов - создать БД для каждого пользователя (чтобы листинг таблиц и т. д. был простым с помощью «SHOW TABLES», а также его хорошего уровня абстракции для администратора и безопасности). Вариант 2 состоит в том, чтобы иметь единую базу данных, содержащую всех пользователей и таблицы, но это усложняет логику управления.

Вопросы:

Каковы последствия для производительности (если таковые имеются) при использовании подхода со многими БД, а не с одной БД?

Цените любое руководство.


person Ben    schedule 09.03.2016    source источник


Ответы (1)


Каждая база данных в memsql имеет собственный буфер транзакций, размер которого задается переменной transaction-buffer в memsql.cnf. Для одиночного ящика размер по умолчанию составляет 128 м, т.е. каждая новая база данных будет потреблять дополнительно 128 мегабайт оперативной памяти. Это накладывает жесткое ограничение на количество баз данных, которые вы можете создать: сколько у вас оперативной памяти.

В распределенном memsql и агрегатор, и конечные узлы по умолчанию используют 64 м на базу данных. Но у листьев есть одна база данных на раздел, и у каждого листа обычно есть один раздел на ядро ​​ЦП. Это означает, что каждая база данных, созданная в кластере memsql, по умолчанию будет использовать CORES * 64m на каждом листе, например. 512 м на базу данных на 8-ядерном листовом узле.

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

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

person Peter Faiman    schedule 10.03.2016
comment
Спасибо @Peter Fairman - это действительно очень полезно; именно то, что я был после. - person Ben; 10.03.2016