воскресенье, 7 февраля 2016 г.

Установка MemSQL на Ubuntu 14.04

MemSQL - это типичная база данных в памяти, которая может читать и писать данные быстрее традиционных баз данных.
Использует MySQL протокол.
MemSQL владеет новейшими возможностями MySQL, такие, как поддержка JSON. Одно из самых больших преимуществ MemSQL над MySQL - он умеет отдельный запрос распределять по нескольким серверам, известный как параллельная обработка запроса, что приводит к гораздо быстрому чтению данных.
В этой заметке мы установим MemSQL на Ubuntu 14.04. Проведем тестирование нагрузки и попробуем работу с JSON из MySQL клиента.



Установка MemSQL


Скачиваем исходники:
# wget http://download.memsql.com/memsql-ops-4.0.35/memsql-ops-4.0.35.tar.gz

Разархивируем файлы:
# tar -xzf memsql-ops-4.0.35.tar.gz
# cd memsql-ops-4.0.35

Установим сам MemSQL:
# ./install.sh
Installing MemSQL Ops in /var/lib/memsql-ops
Creating a memsql user
Setting up permissions
Creating an init script so that MemSQL Ops runs on startup
Creating a symlink to MemSQL Ops at /usr/bin/memsql-ops

Successfully installed MemSQL Ops!

--------------------------------------------------------------------------------

You can install MemSQL across multiple machines
using the MemSQL Ops Web UI.

For quick testing, you can also install a simple MemSQL
deployment on this host.

Do you want to install MemSQL on this host only? [y/N] y
2016-02-07 16:47:18: J83f9ba [INFO] Deploying MemSQL to IP_ADDR:3306
2016-02-07 16:47:18: J9f318d [INFO] Deploying MemSQL to IP_ADDR:3307
2016-02-07 16:48:35: J83f9ba [INFO] Downloading MemSQL: 100.00%          
2016-02-07 16:48:35: J83f9ba [INFO] Installing MemSQL
2016-02-07 16:48:36: J9f318d [INFO] Downloading MemSQL: 100.00%          
2016-02-07 16:48:36: J9f318d [INFO] Installing MemSQL
2016-02-07 16:48:48: J83f9ba [INFO] Finishing MemSQL Install
2016-02-07 16:49:00: J9f318d [INFO] Finishing MemSQL Install
Waiting for MemSQL to start...

A MemSQL cluster is now deployed to your local host. Run the command
below to connect to MemSQL with the mysql client:

  $ mysql -u root -h 127.0.0.1 -P 3306 --prompt="memsql> "

You can setup, manage and monitor MemSQL with the MemSQL Ops
web UI on port 9000. Make sure that port 9000 is open in your
firewall or security group.

Обновим MemSQL:
# memsql-ops agent-upgrade

Перейдем в Веб панель:
http://IP_address:9000

Запустим тест производительности




Общение с MemSQL с помощью MySQL клиента


Обновим кеш:
# apt-get update

Установим MySQL клиент:
# apt-get install mysql-client-core-5.6

Подключимся к MemSQL:
# mysql -uroot -h 127.0.0.1 -P 3306 --prompt="memsql> "

Посмотрим доступные базы данных:
memsql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| memsql             |
| sharding           |
+--------------------+
3 rows in set (0.00 sec)

Создадим новую базу данных:
memsql> create database tutorial;
memsql> use tutorial;

Создадим таблицу users с полями id и email:
memsql> create table users (id bigint auto_increment primary key, email varchar(255) not null);

Посмотрим описание только что созданной таблицы:
memsql> describe users;
+-------+--------------+------+------+---------+----------------+
| Field | Type         | Null | Key  | Default | Extra          |
+-------+--------------+------+------+---------+----------------+
| id    | bigint(20)   | NO   | PRI  | NULL    | auto_increment |
| email | varchar(255) | NO   |      | NULL    |                |
+-------+--------------+------+------+---------+----------------+
2 rows in set (0.00 sec)

Добавим несколько значений:
memsql> insert into users (email) values ('one@example.com'), ('two@example.com'), ('three@example.com');
Query OK, 3 rows affected (1.67 sec)
Records: 3  Duplicates: 0  Warnings: 0

Посмотрим все записи в таблице users:
memsql> SELECT * FROM users;
+----+-------------------+
| id | email             |
+----+-------------------+
|  2 | two@example.com   |
|  1 | one@example.com   |
|  3 | three@example.com |
+----+-------------------+
3 rows in set (0.00 sec)

MemSQL так же поддерживает JSON тип. Создадим таблицу events с полями id и event (json):
memsql> create table events (id bigint auto_increment primary key, event json not null);

Добавим несколько значений:
memsql> insert into events (event) values ('{"name": "sent email", "email": "one@example.com"}'), ('{"name": "received email", "email": "two@example.com"}');

Посмотрим добавленные значения:
memsql> select * FROM events;
+----+-----------------------------------------------------+
| id | event                                               |
+----+-----------------------------------------------------+
|  2 | {"email":"two@example.com","name":"received email"} |
|  1 | {"email":"one@example.com","name":"sent email"}     |
+----+-----------------------------------------------------+
2 rows in set (2.93 sec)

Теперь вытащим все данные из таблицы, где name равняется recieved email:
memsql> select * from events where event::$name = 'received email';
+----+-----------------------------------------------------+
| id | event                                               |
+----+-----------------------------------------------------+
|  2 | {"email":"two@example.com","name":"received email"} |
+----+-----------------------------------------------------+
1 row in set (3.45 sec)

Так же поступим и с sent email:
memsql> select * from events where event::$name = 'sent email';
+----+-------------------------------------------------+
| id | event                                           |
+----+-------------------------------------------------+
|  1 | {"email":"one@example.com","name":"sent email"} |
+----+-------------------------------------------------+
1 row in set (0.00 sec)

А теперь пример объедененного запросы к таблицам, что бы вытащить данные, где в таблице events name равняется recieved email и по полю email из полученных данных вытащим данные из таблицы users:
memsql> select * from users left join events on users.email = events.event::$email where events.event::$name = 'received email';
+----+-----------------+------+-----------------------------------------------------+
| id | email           | id   | event                                               |
+----+-----------------+------+-----------------------------------------------------+
|  2 | two@example.com |    2 | {"email":"two@example.com","name":"received email"} |
+----+-----------------+------+-----------------------------------------------------+
1 row in set (12.31 sec)

Аналогично:
memsql> select * from users left join events on users.email = events.event::$email where events.event::$name = 'sent email';
+----+-----------------+------+-------------------------------------------------+
| id | email           | id   | event                                           |
+----+-----------------+------+-------------------------------------------------+
|  1 | one@example.com |    1 | {"email":"one@example.com","name":"sent email"} |
+----+-----------------+------+-------------------------------------------------+
1 row in set (0.00 sec)


Полезные ссылки:
https://www.digitalocean.com/community/tutorials/how-to-install-memsql-on-ubuntu-14-04



Комментариев нет:

Отправить комментарий