Быстрый и простой способ шардирования MySQL
с помощью CUBRID SHARD




Эсен Сагынов
22 апреля 2013 г.
План на сегодня
                                              2




1.   Об NHN
2.   Шардирование в производственных средах
3.   Почему CUBRID SHARD
4.   Как шардировать базы данных MySQL
5.   Демо
6.   CUBRID SHARD в Ndrive
Обо мне
                             3




• Эсен Сагынов (NHN Corp.)

  – @CUBRID
  – fb.com/cubrid

    esen@cubrid.org
Об NHN
Шардирование в производстве

            •    Использует реляционное СУБД с шардированием
            •    Данные хранятся в виде ключ-значение

             •
             •

             •
             •


             •
             •

             •
             •

             •
             •

             •

             •
Существующие решения шардирования
     Название                   Тип                 Требования             Интерфейс

                                            СУБД         Другие

                                            СУБД с
                                                         -   Hibernate
Hibernate shards    Фреймворк, библиотека   поддержкой                   Java
                                                         -   JVM
                                            Hibernate
                                                         -   Hibernate
HiveDB              Фреймворк, библиотека   MySQL                        Java
                                                         -   JVM
                    Промежуточное ПО и                                   Java, C, PHP,
dbShards                                    MySQL
                    библиотека                                           Python, Ruby
Gizzard (Twitter)   Промежуточное ПО        Любая        -   JVM         Java
                    Промежуточное ПО и
Spider for MySQL                            MySQL                        Любой
                    хранилище для MySQL
Spock Proxy         Промежуточное ПО        MySQL                        Любой

Shard-Query         Промежуточное ПО        MySQL                        PHP, RESTful API
                                            -   CUBRID
CUBRID SHARD        Промежуточное ПО                                     Любой
                                            -   MySQL
Категории решений шардирования

•   Библиотека
•   Хранилище
•   Тяжеловесное промежуточное ПО
•   Легковесное промежуточное ПО
Библиотеки и хранилища
                                                             8



Библиотеки           Недостатки
                     •   Требует библиотеку Hibernate/Java
• Hibernate Shards   •   Конфигурация с помощью многих
• HiveDB                 XML файлов
                     •   Не для действующих сервисов


Хранилища            Недостатки
• Spider for MySQL   • Требует изменения
                       хранилища
                     • Не для действующих
                       сервисов
Тяжеловесные промежуточные ПО
                                                 9



dbShards                          Gizzard
• Требует изменения кода          • Неактивный
  приложения
• Необходимо установить агентов
  на каждый сервер СУБД
• Не для действующих сервисов
Легковесное промежуточное ПО
                               10



• Spock Proxy
  – Активный проект
  – Легковесный
  – Гибкий
  – Легко
    настраиваемый
  – Не требует
    изменения кода
    приложения
Блог: http://www.cubrid.org/blog/dev-

Spock Proxy                             platform/database-sharding-platform-at-nhn/


                                                                                      11



                          Spock Proxy
Хранилище для             База данных MySQL
конфигураций
шардирования
Правила шардирования      По модулю
Определение ключа шарда   Полный разбор SQL
Преимущества              Не требует изменения кода программы
Недостатки                • Деградация производительности:
                             • Дополнительный разбор SQL
                             • Слияние результатов
                          • Поддерживает не весь SQL синтаксис
                            MySQL
                          • Однопоточный
Производительность Spock Proxy
                                                                            12



                   • Однопоточный
                   • Разбирает и переписывает SQL
Время выполнения
   500

   400
                                                    Шардинг на уровне
   300                                              приложения
                                                    Spock Proxy
   200

   100                                              CUBRID SHARD

     0
         1   5   10 20 30 50 70 100 200 400          Параллельные клиенты
Spock Proxy

 Активный проект
 Легковесный
 Гибкий
 Легко настраиваемый
 Не требует изменения кода программы
✕Ведет к деградации производительности
14




         CUBRID SHARD

    Легковесное и легко настраиваемое
промежуточное ПО для шардирования MySQL
Блог: http://www.cubrid.org/blog/dev-
                                                       platform/database-sharding-platform-at-nhn/
 Spock Proxy и CUBRID SHARD
                                                                                                     15


                    Spock Proxy                   CUBRID SHARD

Хранилище для       База данных MySQL             Конфигурационный файл
конфигураций
Правила             По модулю                     •   По модулю
шардирования                                      •   Хэш-функции пользователя
Определения ключа   Полный разбор SQL             Поиск SQL подсказки
шарда
                    Преимущества                  Преимущества
                    • Не требует изменения        • Поддерживает CUBRID и MySQL
                       программы                  • Полная поддержка MySQL синтаксиса
                                                  • Высокая производительность
                    Недостатки                        • Нет разбора SQL
                    • Деградация                      • Многопоточность
                       производительности:            • Пул соединения
                         • Дополнительный             • Балансировка нагрузки
                            разбор SQL            • Пользовательские правила шардирования
                         • Слияние результатов    • Легкость конфигураций
                    • Поддерживает только MySQL
                    • Поддерживает не весь SQL    Недостатки
                       синтаксис MySQL            • Требует изменения SQL запросов для
                    • Однопоточный                   вставки SQL подсказок
Факты о CUBRID

 Реляционное СУБД
 ПО с открытым кодом (www.cubrid.org)
 Оптимизирован для веб сервисов
 Высокая производительность
 Поддержка больших баз данных
 Высокая доступность
 Шардирование баз данных
 Более 90% совместимости с синтаксисом MySQL, а также
  аналитические функции Oracle
 ACID транзакции
 Онлайн резервное копирование
 Разрабатывается NHN Corp.
Архитектура CUBRID SHARD



        Единое представление базы данных




              …                  …




         …           или             …
Шардированная среда




                      …




         …     …          …
Установить CUBRID SHARD очень легко!
Страница в документации:

Легкая установка           http://www.cubrid.org/wiki_tutorials/entry/cubrid
                           -installation-instructions




       http://www.cubrid.org/downloads

                   apt-get
                    yum
                     chef ⭐
                     VM
                  EC2 AMI
                cloud service
Настройка очень легкая и интуитивная!
Шаги конфигурирования
                                                     23



1.   Создать шарды
2.   Добавить пользователей в шарды
3.   Создать единую схему в шардах
4.   Настроить CUBRID SHARD
     – Информацию о единой
       шардированной базе данных, к
       которой подключается клиент
     – Информацию о подключениях к
       шардам
     – Правила шардирования           CUBRID SHARD
5.   Запустить CUBRID SHARD
6.   Изменить код программы
     – URL подключения
     – SQL подсказки
# 1. Создать шарды
• Хост 1..N:

  $> mysql –ushard -ppassword –hnode1
  mysql> CREATE DATABASE sharddb;
# 2. Добавить пользователей
• Хост 1..N:

  $> mysql –ushard -ppassword –hnode1
  mysql> USE mysql;
  mysql> GRANT ALL PRIVILEGES ON
  sharddb@localhost TO shard@localhost
  IDENTIFIED BY ‘shard123’
  mysql> GRANT ALL PRIVILEGES ON
  sharddb@localhost TO
  shard@shardBrokerNode IDENTIFIED BY
  ‘shard123’
# 3. Создать единую схему
• Хост 1..N:

  $> mysql –ushard -ppassword –hnode1
  mysql> USE sharddb;
  mysql> CREATE TABLE tbl_users (id BIGINT
  PRIMARY KEY, name VARCHAR(20), age
  SMALLINT)

  $> mysql –ushard -ppassword –hnode2
  …
Страница в документации:
                                   http://www.cubrid.org/manual/91/en/sha
# 4. Легкая настройка              rd.html#configuration-and-setup




• shard.conf
  – Основной файл для конфигурации CUBRID SHARD.
• shard_connection.txt
  – Список шард ID (shard_id) с названиями баз данных
    и хостов, к которым указывает тот или иной шард
    ID.
• shard_keys.txt
  – Список названий колонок шардированной таблицы
    с их правилами шардирования.
Страница в документации:

 shard.conf                         http://www.cubrid.org/manual/91/en/shard.html#
                                    default-configuration-file-shard-conf




Задать:
1. SHARD_DB_NAME
2. SHARD_DB_USER
3. SHARD_DB_PASSWORD
4. APPL_SERVER

…
SHARD_DB_NAME       =   sharddb
SHARD_DB_USER       =   shard
SHARD_DB_PASSWORD   =   shard123
APPL_SERVER         =   CAS_MYSQL
…
Страница в документации:

 shard_connection.txt                       http://www.cubrid.org/manual/91/en/shard.html#
                                            setting-shard-metadata




Задать:
1. Шард ID
2. Настоящее имя базы данных на хосте
3. Название удаленного/локального хоста


# shard-id     real-db-name     connection-info
0              sharddb          mysqlA:3306
1              sharddb          mysqlB:3306
2              sharddb          mysqlC:3306
…

   ** Название хостов обязательно должно быть идентичным
      выводу команды hostname на каждом из хостов.
Страница в документации:

 shard_keys.txt                    http://www.cubrid.org/manual/91/en/shard.html#
                                   setting-shard-metadata




Задать:
1. Нижний предел шард ключа
2. Верхний предел шард ключа
3. Шард ID

[%student_no]
# min   max     shard_id
0       63      0          ** По умолчанию правило
64      127     1             шардирования - по
128     191     2             модулю 256
192     255     3             (SHARD_KEY_MODULAR в
                              shard.conf ).
Страница в документации:

 Пользовательская библиотека                            http://www.cubrid.org/manual/9
                                                        1/en/shard.html#setting-user-
                                                        defined-hash-function


                                   int fn_shard_key_udf(int type, void *val)
shard.conf                         {
                                       int mod = 2;
1. SHARD_KEY_LIBRARY_NAME
                                       if (val == NULL)
2. SHARD_KEY_FUNCTION_NAME             {
                                              return ERROR_ON_ARGUMENT;
                                       }
[%student_no]
SHARD_KEY_LIBRARY_NAME=$CUBRID/c       switch(type)
                                       {
onf/shard_key_udf.so                          case SHARD_U_TYPE_INT:
SHARD_KEY_FUNCTION_NAME                       {
=fn_shard_key_udf                                 int ival;
                                                  ival = (int) (*(int *)val);
                                                  return ival % 2;
                                              }
                                                  break;
                                              case SHARD_U_TYPE_STRING:
                                                  return ERROR_ON_MAKE_SHARD_KEY;
                                              default:
                                                  return ERROR_ON_ARGUMENT;
                                       }
                                       return ERROR_ON_MAKE_SHARD_KEY;
                                   }
# 5. Запустить CUBRID SHARD



 $> cubrid shard start
 @ cubrid shard start ++
 cubrid shard start: success
# 6. URL подключения




 connectionURL   =
 "jdbc:cubrid:node1:45511:sharddb:shard:shard123:
 ?althosts=node2:port2,node3:port3
 &loadBalance=true";
Шардированные запросы




 SELECT name FROM student WHERE
 student_no = /*+ shard_key */ ?;

                                •

                                •
Типы SQL подсказок
String query = "SELECT name FROM student WHERE student_no = /*+ shard_key */ ?; ";
PrepareStatement query_stmt = connection.prepareStatement(query);
query_stmt.setInt(1,100);
ResultSet rs = query_stmt.executeQuery();
// получить результат




                                                 range
                                key_column    (hash result)   shard_id
                                             min        max
                                student_no    0          63      0
                                student_no   64         127      1
                                student_no   128        191      2
                                student_no   192        255      3
MySQL Sharding DEMO

      Требования:

      •   1ГБ свободного RAM
      •   3ГБ свободного места для 2 VM
      •   VirtualBox
      •   Vagrant
MySQL Sharding DEMO
                                    39




https://github.com/kadishmal/cubr
           id-shard-demo
CUBRID SHARD

• Легко
  – Конфигурация без хлопот!
  – Без сюрпризов
• Надежный
  – Высокая производительность
  – Нет SPOF
• Open source
  – Разрабатывается NHN Corp.
Недостатки CUBRID SHARD

Необходимо вставлять SQL подсказку во все
 запросы
Пока нет автоматической балансировки
 данных
  Что требует тщательного планирования
   стратегии шардирования.
Нет графического инструмента для
 мониторинга. Только инструменты для
 командной строки.
CUBRID SHARD лучше всего подойдет…
                                           43




•   для действующих Веб сервисов
•   с быстрорастущим объемом данных,
•   которым необходим стабильное решение
•   с возможностью легкой настройки
•   в рамках ограниченного времени
Облачное хранилище Ndrive
                                                          44



• Мета данные файлов пользователей
• Шардирование по ID пользователя
• 24 мастер шардов
  – Intel(R) Xeon(R) L5640 @ 2.27GHz * 8, 16G RAM, 820G
    HDD
• 10ТБ данных
• Характеристика нагрузки:
  – 75~80% SELECT vs. 20~25% INSERT
  – Avg. ~3000 QPS/шард
  – Avg. ~5% CPU нагрузки на шард
Облачное хранилище Ndrive
                                                          45


• 1 SHARD Брокер               • Нет деградации
• 4 Прокси на Брокер             производительности
• 50 CAS на Прокси               после установки CUBRID
                                 SHARD




     64       128      192       256     320
                       Vuser
CUBRID SHARD Next

Балансировка данных
Мониторинг шардов
Функции агрегации
Спасибо!
                             47




• Сагынов Эсен (NHN Corp.)

  – @CUBRID
  – fb.com/cubrid

    esen@cubrid.org

Быстрый и простой способ шардирования MySQL с помощью CUBRID SHARD - 2013 RIT++, Москва

  • 1.
    Быстрый и простойспособ шардирования MySQL с помощью CUBRID SHARD Эсен Сагынов 22 апреля 2013 г.
  • 2.
    План на сегодня 2 1. Об NHN 2. Шардирование в производственных средах 3. Почему CUBRID SHARD 4. Как шардировать базы данных MySQL 5. Демо 6. CUBRID SHARD в Ndrive
  • 3.
    Обо мне 3 • Эсен Сагынов (NHN Corp.) – @CUBRID – fb.com/cubrid esen@cubrid.org
  • 4.
  • 5.
    Шардирование в производстве • Использует реляционное СУБД с шардированием • Данные хранятся в виде ключ-значение • • • • • • • • • • • •
  • 6.
    Существующие решения шардирования Название Тип Требования Интерфейс СУБД Другие СУБД с - Hibernate Hibernate shards Фреймворк, библиотека поддержкой Java - JVM Hibernate - Hibernate HiveDB Фреймворк, библиотека MySQL Java - JVM Промежуточное ПО и Java, C, PHP, dbShards MySQL библиотека Python, Ruby Gizzard (Twitter) Промежуточное ПО Любая - JVM Java Промежуточное ПО и Spider for MySQL MySQL Любой хранилище для MySQL Spock Proxy Промежуточное ПО MySQL Любой Shard-Query Промежуточное ПО MySQL PHP, RESTful API - CUBRID CUBRID SHARD Промежуточное ПО Любой - MySQL
  • 7.
    Категории решений шардирования • Библиотека • Хранилище • Тяжеловесное промежуточное ПО • Легковесное промежуточное ПО
  • 8.
    Библиотеки и хранилища 8 Библиотеки Недостатки • Требует библиотеку Hibernate/Java • Hibernate Shards • Конфигурация с помощью многих • HiveDB XML файлов • Не для действующих сервисов Хранилища Недостатки • Spider for MySQL • Требует изменения хранилища • Не для действующих сервисов
  • 9.
    Тяжеловесные промежуточные ПО 9 dbShards Gizzard • Требует изменения кода • Неактивный приложения • Необходимо установить агентов на каждый сервер СУБД • Не для действующих сервисов
  • 10.
    Легковесное промежуточное ПО 10 • Spock Proxy – Активный проект – Легковесный – Гибкий – Легко настраиваемый – Не требует изменения кода приложения
  • 11.
    Блог: http://www.cubrid.org/blog/dev- Spock Proxy platform/database-sharding-platform-at-nhn/ 11 Spock Proxy Хранилище для База данных MySQL конфигураций шардирования Правила шардирования По модулю Определение ключа шарда Полный разбор SQL Преимущества Не требует изменения кода программы Недостатки • Деградация производительности: • Дополнительный разбор SQL • Слияние результатов • Поддерживает не весь SQL синтаксис MySQL • Однопоточный
  • 12.
    Производительность Spock Proxy 12 • Однопоточный • Разбирает и переписывает SQL Время выполнения 500 400 Шардинг на уровне 300 приложения Spock Proxy 200 100 CUBRID SHARD 0 1 5 10 20 30 50 70 100 200 400 Параллельные клиенты
  • 13.
    Spock Proxy  Активныйпроект  Легковесный  Гибкий  Легко настраиваемый  Не требует изменения кода программы ✕Ведет к деградации производительности
  • 14.
    14 CUBRID SHARD Легковесное и легко настраиваемое промежуточное ПО для шардирования MySQL
  • 15.
    Блог: http://www.cubrid.org/blog/dev- platform/database-sharding-platform-at-nhn/ Spock Proxy и CUBRID SHARD 15 Spock Proxy CUBRID SHARD Хранилище для База данных MySQL Конфигурационный файл конфигураций Правила По модулю • По модулю шардирования • Хэш-функции пользователя Определения ключа Полный разбор SQL Поиск SQL подсказки шарда Преимущества Преимущества • Не требует изменения • Поддерживает CUBRID и MySQL программы • Полная поддержка MySQL синтаксиса • Высокая производительность Недостатки • Нет разбора SQL • Деградация • Многопоточность производительности: • Пул соединения • Дополнительный • Балансировка нагрузки разбор SQL • Пользовательские правила шардирования • Слияние результатов • Легкость конфигураций • Поддерживает только MySQL • Поддерживает не весь SQL Недостатки синтаксис MySQL • Требует изменения SQL запросов для • Однопоточный вставки SQL подсказок
  • 16.
    Факты о CUBRID Реляционное СУБД  ПО с открытым кодом (www.cubrid.org)  Оптимизирован для веб сервисов  Высокая производительность  Поддержка больших баз данных  Высокая доступность  Шардирование баз данных  Более 90% совместимости с синтаксисом MySQL, а также аналитические функции Oracle  ACID транзакции  Онлайн резервное копирование  Разрабатывается NHN Corp.
  • 17.
    Архитектура CUBRID SHARD Единое представление базы данных … … … или …
  • 18.
  • 19.
    Установить CUBRID SHARDочень легко!
  • 20.
    Страница в документации: Легкаяустановка http://www.cubrid.org/wiki_tutorials/entry/cubrid -installation-instructions http://www.cubrid.org/downloads apt-get yum chef ⭐ VM EC2 AMI cloud service
  • 21.
  • 22.
    Шаги конфигурирования 23 1. Создать шарды 2. Добавить пользователей в шарды 3. Создать единую схему в шардах 4. Настроить CUBRID SHARD – Информацию о единой шардированной базе данных, к которой подключается клиент – Информацию о подключениях к шардам – Правила шардирования CUBRID SHARD 5. Запустить CUBRID SHARD 6. Изменить код программы – URL подключения – SQL подсказки
  • 23.
    # 1. Создатьшарды • Хост 1..N: $> mysql –ushard -ppassword –hnode1 mysql> CREATE DATABASE sharddb;
  • 24.
    # 2. Добавитьпользователей • Хост 1..N: $> mysql –ushard -ppassword –hnode1 mysql> USE mysql; mysql> GRANT ALL PRIVILEGES ON sharddb@localhost TO shard@localhost IDENTIFIED BY ‘shard123’ mysql> GRANT ALL PRIVILEGES ON sharddb@localhost TO shard@shardBrokerNode IDENTIFIED BY ‘shard123’
  • 25.
    # 3. Создатьединую схему • Хост 1..N: $> mysql –ushard -ppassword –hnode1 mysql> USE sharddb; mysql> CREATE TABLE tbl_users (id BIGINT PRIMARY KEY, name VARCHAR(20), age SMALLINT) $> mysql –ushard -ppassword –hnode2 …
  • 26.
    Страница в документации: http://www.cubrid.org/manual/91/en/sha # 4. Легкая настройка rd.html#configuration-and-setup • shard.conf – Основной файл для конфигурации CUBRID SHARD. • shard_connection.txt – Список шард ID (shard_id) с названиями баз данных и хостов, к которым указывает тот или иной шард ID. • shard_keys.txt – Список названий колонок шардированной таблицы с их правилами шардирования.
  • 27.
    Страница в документации: shard.conf http://www.cubrid.org/manual/91/en/shard.html# default-configuration-file-shard-conf Задать: 1. SHARD_DB_NAME 2. SHARD_DB_USER 3. SHARD_DB_PASSWORD 4. APPL_SERVER … SHARD_DB_NAME = sharddb SHARD_DB_USER = shard SHARD_DB_PASSWORD = shard123 APPL_SERVER = CAS_MYSQL …
  • 28.
    Страница в документации: shard_connection.txt http://www.cubrid.org/manual/91/en/shard.html# setting-shard-metadata Задать: 1. Шард ID 2. Настоящее имя базы данных на хосте 3. Название удаленного/локального хоста # shard-id real-db-name connection-info 0 sharddb mysqlA:3306 1 sharddb mysqlB:3306 2 sharddb mysqlC:3306 … ** Название хостов обязательно должно быть идентичным выводу команды hostname на каждом из хостов.
  • 29.
    Страница в документации: shard_keys.txt http://www.cubrid.org/manual/91/en/shard.html# setting-shard-metadata Задать: 1. Нижний предел шард ключа 2. Верхний предел шард ключа 3. Шард ID [%student_no] # min max shard_id 0 63 0 ** По умолчанию правило 64 127 1 шардирования - по 128 191 2 модулю 256 192 255 3 (SHARD_KEY_MODULAR в shard.conf ).
  • 30.
    Страница в документации: Пользовательская библиотека http://www.cubrid.org/manual/9 1/en/shard.html#setting-user- defined-hash-function int fn_shard_key_udf(int type, void *val) shard.conf { int mod = 2; 1. SHARD_KEY_LIBRARY_NAME if (val == NULL) 2. SHARD_KEY_FUNCTION_NAME { return ERROR_ON_ARGUMENT; } [%student_no] SHARD_KEY_LIBRARY_NAME=$CUBRID/c switch(type) { onf/shard_key_udf.so case SHARD_U_TYPE_INT: SHARD_KEY_FUNCTION_NAME { =fn_shard_key_udf int ival; ival = (int) (*(int *)val); return ival % 2; } break; case SHARD_U_TYPE_STRING: return ERROR_ON_MAKE_SHARD_KEY; default: return ERROR_ON_ARGUMENT; } return ERROR_ON_MAKE_SHARD_KEY; }
  • 31.
    # 5. ЗапуститьCUBRID SHARD $> cubrid shard start @ cubrid shard start ++ cubrid shard start: success
  • 32.
    # 6. URLподключения connectionURL = "jdbc:cubrid:node1:45511:sharddb:shard:shard123: ?althosts=node2:port2,node3:port3 &loadBalance=true";
  • 33.
    Шардированные запросы SELECTname FROM student WHERE student_no = /*+ shard_key */ ?; • •
  • 34.
  • 35.
    String query ="SELECT name FROM student WHERE student_no = /*+ shard_key */ ?; "; PrepareStatement query_stmt = connection.prepareStatement(query); query_stmt.setInt(1,100); ResultSet rs = query_stmt.executeQuery(); // получить результат range key_column (hash result) shard_id min max student_no 0 63 0 student_no 64 127 1 student_no 128 191 2 student_no 192 255 3
  • 36.
    MySQL Sharding DEMO Требования: • 1ГБ свободного RAM • 3ГБ свободного места для 2 VM • VirtualBox • Vagrant
  • 37.
    MySQL Sharding DEMO 39 https://github.com/kadishmal/cubr id-shard-demo
  • 38.
    CUBRID SHARD • Легко – Конфигурация без хлопот! – Без сюрпризов • Надежный – Высокая производительность – Нет SPOF • Open source – Разрабатывается NHN Corp.
  • 39.
    Недостатки CUBRID SHARD Необходимовставлять SQL подсказку во все запросы Пока нет автоматической балансировки данных Что требует тщательного планирования стратегии шардирования. Нет графического инструмента для мониторинга. Только инструменты для командной строки.
  • 40.
    CUBRID SHARD лучшевсего подойдет… 43 • для действующих Веб сервисов • с быстрорастущим объемом данных, • которым необходим стабильное решение • с возможностью легкой настройки • в рамках ограниченного времени
  • 41.
    Облачное хранилище Ndrive 44 • Мета данные файлов пользователей • Шардирование по ID пользователя • 24 мастер шардов – Intel(R) Xeon(R) L5640 @ 2.27GHz * 8, 16G RAM, 820G HDD • 10ТБ данных • Характеристика нагрузки: – 75~80% SELECT vs. 20~25% INSERT – Avg. ~3000 QPS/шард – Avg. ~5% CPU нагрузки на шард
  • 42.
    Облачное хранилище Ndrive 45 • 1 SHARD Брокер • Нет деградации • 4 Прокси на Брокер производительности • 50 CAS на Прокси после установки CUBRID SHARD 64 128 192 256 320 Vuser
  • 43.
    CUBRID SHARD Next Балансировкаданных Мониторинг шардов Функции агрегации
  • 44.
    Спасибо! 47 • Сагынов Эсен (NHN Corp.) – @CUBRID – fb.com/cubrid esen@cubrid.org

Editor's Notes

  • #3 To keep this presentation simple, I will focus on three main things.
  • #4 Ask your questions as I'm going through presentation.Hold off with longer questions to the endDo not hesitate to talk to me during conferenceFollowup by email.
  • #6 We have researched how other companies manage big data. They still rely on relational databases and manage their data through data sharding. At NHN eventually we do the same.
  • #7 These are the existing sharding solutions.
  • #8 - Talking about the open source RDBMS solutions, MySQL doesn’t provide database sharding out of the box.- Google had to significantly change MySQL replication to make it work similarly. But at the time Sun, the former owner of MySQL didn’t accept Google’s changes, resulting in a fork form mainstream without mainstream support.Twitter has recently opened their MySQL fork.http://www.oracle.com/technetwork/database/features/availability/300461-132370.pdf
  • #9 Spider for MySQL requires to change the storage engine. It’s not an option. We have running service and don’t want to change anything.
  • #10 Application-aware architecture of dbShards is explained here http://www.dbshards.com/blog/2010/09/black-box-vs-application-aware-sharding/.
  • #14 NHN has many large services in production. We don’t want any middleware that we need to add to affect the performance. So this was a critical requirement so that the sharding middleware shouldn’t decrease the overall performance of the service.
  • #15 Spock Proxy and CUBRID SHARD have somewhat similar architecture. Both are lightweight and flexible.
  • #36 No additional SQL parsing because of HINT.