sql >> Database teknologi >  >> RDS >> MariaDB

Brug af MyRocks Storage Engine med MariaDB Server

MariaDB Server er en af ​​de mest populære open source-databaseservere. Det blev skabt af de oprindelige udviklere af MySQL, og det blev populært for at være hurtigt, skalerbart og robust. MariaDB har et rigt økosystem af lagringsmotorer, plugins og andre værktøjer, der gør det meget alsidigt til en bred vifte af anvendelsestilfælde.

Kravene til diskplads og I/O-effektivitet i vores databaser bliver stadig højere. Dette er så vi er i stand til at styre vores informationsvækst på en korrekt måde.

Hvad angår MariaDB-lagringsmotoren, har vi forskellige typer at vælge imellem, såsom XtraDB, InnoDB, Aria eller MyISAM. Siden MariaDB 10.2.5 version har MyRocks også været tilgængelig. MyRocks er den type lagringsmotor, der virkelig kunne hjælpe os med at opfylde de krav, vi nævnte tidligere.

I denne blog lærer vi mere om den nye MyRocks-motor, og hvordan vi kan bruge den i en MariaDB-server.

Hvad er MyRocks?

MyRocks er en open source-lagringsmotor baseret på RocksDB, som oprindeligt blev udviklet af Facebook.

MyRocks kan være en god opbevaringsløsning, når du har arbejdsbelastninger, der kræver større komprimering og I/O-effektivitet. Den bruger en Log Structured Merge (LSM)-arkitektur, der har bedre komprimering end B-tree-algoritmerne, der bruges af InnoDB-motoren (2x bedre komprimering sammenlignet med data komprimeret af InnoDB). Det er også en skriveoptimeret lagermotor (10x mindre skriveforstærkning sammenlignet med InnoDB), og den har hurtigere dataindlæsning og replikering. MyRocks skriver data direkte til det nederste niveau, hvilket undgår alle komprimeringsomkostninger, når du aktiverer hurtigere dataindlæsning for en session.

En LSM fungerer ved at gemme ændringsoperationer i en buffer (memtable) og sortere og gemme dataene, når denne buffer er fuld.

Som standard er tabeller og databaser gemt i en #rocksdb-mappe inde i MySQL-datafilen. Disse oplysninger gemmes i .sst-filer uden adskillelse pr. tabel.

MyRocks understøtter READ COMMITTED og REPEATABLE READ isolerede niveauer, og den understøtter ikke SERIALIZABLE.

Sådan implementeres MyRocks på en MariaDB-server

Installation

Først skal vi installere MariaDB-serveren. I dette eksempel vil vi bruge CentOS Linux release 7.6 som operativsystem.

Som standard vil denne OS-version forsøge at installere MariaDB 5.5, så vi tilføjer MariaDB-lageret for at installere MariaDB version 10.3.

$ cat > /etc/yum.repos.d/MariaDB.repo <<- EOF
# MariaDB 10.3 CentOS repository
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

Og så installerer vi MariaDB Server-pakken:

$ yum install MariaDB-server

Denne kommando vil installere forskellige pakkeafhængigheder, ikke kun MariaDB Server.

==========================================================================================================================================================================================================
 Package                                                 Arch                                   Version                                                     Repository                               Size
==========================================================================================================================================================================================================
Installing:
 MariaDB-server                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                  24 M
Installing for dependencies:
 MariaDB-client                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                  11 M
 MariaDB-common                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                  78 k
 MariaDB-compat                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                 2.8 M
 boost-program-options                                   x86_64                                 1.53.0-27.el7                                               base                                    156 k
 galera                                                  x86_64                                 25.3.26-1.rhel7.el7.centos                                  mariadb                                 8.1 M
 libaio                                                  x86_64                                 0.3.109-13.el7                                              base                                     24 k
 lsof                                                    x86_64                                 4.87-6.el7                                                  base                                    331 k
 make                                                    x86_64                                 1:3.82-23.el7                                               base                                    420 k
 openssl                                                 x86_64                                 1:1.0.2k-16.el7_6.1                                         updates                                 493 k
 perl-Compress-Raw-Bzip2                                 x86_64                                 2.061-3.el7                                                 base                                     32 k
 perl-Compress-Raw-Zlib                                  x86_64                                 1:2.061-4.el7                                               base                                     57 k
 perl-DBI                                                x86_64                                 1.627-4.el7                                                 base                                    802 k
 perl-Data-Dumper                                        x86_64                                 2.145-3.el7                                                 base                                     47 k
 perl-IO-Compress                                        noarch                                 2.061-2.el7                                                 base                                    260 k
 perl-Net-Daemon                                         noarch                                 0.48-5.el7                                                  base                                     51 k
 perl-PlRPC                                              noarch                                 0.2020-14.el7                                               base                                     36 k

Transaction Summary
==========================================================================================================================================================================================================
Install  1 Package (+16 Dependent packages)

Som standard er MariaDB-serveren installeret med InnoDB-lagringsmotoren, så vi skal installere RocksDB-motoren for at kunne bruge den.

$ yum install MariaDB-rocksdb-engine
==========================================================================================================================================================================================================
 Package                                                  Arch                                     Version                                                Repository                                 Size
==========================================================================================================================================================================================================
Installing:
 MariaDB-rocksdb-engine                                   x86_64                                   10.3.15-1.el7.centos                                   mariadb                                   4.4 M
Installing for dependencies:
 libzstd                                                  x86_64                                   1.3.4-1.el7                                            mariadb                                   211 k
 snappy                                                   x86_64                                   1.1.0-3.el7                                            base                                       40 k

Transaction Summary
==========================================================================================================================================================================================================
Install  1 Package (+2 Dependent packages)

Denne kommando installerer nogle nødvendige afhængigheder, og den aktiverer pluginnet på MariaDB-serveren. Det vil også oprette en konfigurationsfil i /etc/my.cnf.d/rocksdb.cnf:

[mariadb]
plugin-load-add=ha_rocksdb.so

Vi kan bekræfte denne installation ved at køre kommandoen SHOW PLUGINS ind i MariaDB-serveren.

$ MariaDB> SHOW PLUGINS;
+-------------------------------+----------+--------------------+---------------+---------+
| Name                          | Status   | Type               | Library       | License |
+-------------------------------+----------+--------------------+---------------+---------+
...
| ROCKSDB                       | ACTIVE   | STORAGE ENGINE     | ha_rocksdb.so | GPL     |
| ROCKSDB_CFSTATS               | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_DBSTATS               | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_PERF_CONTEXT          | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_PERF_CONTEXT_GLOBAL   | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_CF_OPTIONS            | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_COMPACTION_STATS      | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_GLOBAL_INFO           | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_DDL                   | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_SST_PROPS             | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_INDEX_FILE_MAP        | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_LOCKS                 | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_TRX                   | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_DEADLOCK              | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
+-------------------------------+----------+--------------------+---------------+---------+

Hvis vi af en eller anden grund ikke har pluginnet aktiveret, kan vi installere det dynamisk ved at udføre kommandoen INSTALL SONAME eller INSTALL PLUGIN:

$ MariaDB> INSTALL SONAME 'ha_rocksdb';

En anden mulighed kunne være at genstarte databasetjenesterne. Denne handling skal læse filen /etc/my.cnf.d/rocksdb.cnf og aktivere pluginnet.

$ service mariadb restart

Vi kan finde detaljerede oplysninger om vores RocksDB-motor ved at bruge følgende kommando:

$ SHOW ENGINE ROCKSDB STATUS

Konfiguration

Om konfigurationsfilerne er den vigtigste /etc/my.cnf, som inkluderer mappen /etc/my.cnf.d, hvor vi kan finde resten af ​​konfigurationsfilerne. I denne mappe har vi som standard følgende konfigurationsfiler:

  • enable_encryption.preset:Det vil aktivere data ved hvile kryptering.
  • mysql-clients.cnf:Her er der konfigurationer for forskellige grupper som [mysqladmin], [mysqlcheck], [mysqldump] og mere.
  • rocksdb.cnf:I denne fil tilføjer vi den specifikke konfiguration for MyRocks, såsom default-storage-engine eller rocksdb_block_size.
  • server.cnf:Her har vi konfiguration relateret til databaseserveren som bind-adresse og binlog_format.

Alle MyRocks systemvariabler og statusvariable er indledt med "rocksdb". Lad os tage et kig på dette.

Systemvariable:

$ MariaDB> SHOW VARIABLES LIKE 'rocksdb%';
+-------------------------------------------------+------------------------------------------+
| Variable_name                                   | Value                                    |
+-------------------------------------------------+------------------------------------------+
| rocksdb_access_hint_on_compaction_start         | 1                                        |
| rocksdb_advise_random_on_open                   | ON                                       |
| rocksdb_allow_concurrent_memtable_write         | OFF                                      |
| rocksdb_allow_mmap_reads                        | OFF                                      |
| rocksdb_allow_mmap_writes                       | OFF                                      |
| rocksdb_allow_to_start_after_corruption         | OFF                                      |
| rocksdb_blind_delete_primary_key                | OFF                                      |
| rocksdb_block_cache_size                        | 536870912                                |
| rocksdb_block_restart_interval                  | 16                                       |
| rocksdb_block_size                              | 4096                                     |
…
+-------------------------------------------------+------------------------------------------+

Statusvariabler:

$ MariaDB> SHOW STATUS LIKE 'rocksdb%';
+----------------------------------------------------+-------+
| Variable_name                                      | Value |
+----------------------------------------------------+-------+
| Rocksdb_rows_deleted                               | 0     |
| Rocksdb_rows_inserted                              | 0     |
| Rocksdb_rows_read                                  | 0     |
| Rocksdb_rows_updated                               | 0     |
| Rocksdb_rows_deleted_blind                         | 0     |
| Rocksdb_rows_expired                               | 0     |
| Rocksdb_rows_filtered                              | 0     |
| Rocksdb_system_rows_deleted                        | 0     |
| Rocksdb_system_rows_inserted                       | 0     |
| Rocksdb_system_rows_read                           | 0     |
…
+----------------------------------------------------+-------+

Du kan finde mere information om status og systemvariabler på MariaDB-webstedet.

Sikkerhedskopier til MariaDB ved hjælp af MyRocks

Sikkerhedskopier er et must i alle databasemiljøer. De er afgørende for systemgendannelse, migreringer, revision, test og mere.

Vi kan kategorisere sikkerhedskopierne i to forskellige typer, logiske og fysiske. Den logiske sikkerhedskopi er gemt i et menneskeligt læsbart format som SQL, og den fysiske backup indeholder de ekstra binære data.

For logiske sikkerhedskopier på MariaDB med MyRocks som databasemotor, er det mest almindelige backupværktøj det klassiske mysqldump:

$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL

Og til fysisk backup kan vi bruge Mariabackup som er kompatibel med MyRocks:

$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST

En anden mulighed kan være myrocks_hotbackup, skabt af Facebook. Den kan bruges til at tage en fysisk kopi fra en kørende MyRocks-instans til lokal eller fjernserver uden at stoppe kildeinstansen.

Begrænsninger ved brug af MyRocks til MariaDB

Lad os se på nogle af begrænsningerne ved at bruge MyRocks-motoren...

  • MariaDBs optimistiske parallelle replikering understøttes muligvis ikke
  • MyRocks er ikke tilgængelig for 32-bit platforme
  • MariaDB Cluster (Galera Cluster) virker ikke med MyRocks (kun InnoDB eller XtraDB storage engines)
  • Transaktionen skal passe i hukommelsen
  • Kræver specielle indstillinger for indlæsning af data
  • SERIALIZABLE understøttes ikke
  • Transportable Tablespace, Foreign Key, Spatial Index og Fulltext Index understøttes ikke

Konklusion

MyRocks er tilgængelig i MariaDB fra versioner højere end 10.2.5. Som vi nævnte tidligere, kan denne lagringsmotor være nyttig for dig, når du har arbejdsbelastninger, der kræver høj datakomprimering og højere niveauer af I/O-effektivitet. For at lære mere om MyRocks kan du tjekke dette ud.


  1. hvordan man vælger en liste med 10.000 unikke id'er fra dual i oracle SQL

  2. Sådan fungerer SLEEP() i MariaDB

  3. Trin til at installere MySQL8 på CentOS

  4. Designmønster til brugerdefinerede felter i relationel database