MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Verwendung der MyRocks Storage Engine mit MariaDB Server

MariaDB Server ist einer der beliebtesten Open-Source-Datenbankserver. Es wurde von den ursprünglichen Entwicklern von MySQL erstellt und wurde bekannt, weil es schnell, skalierbar und robust ist. MariaDB verfügt über ein reichhaltiges Ökosystem aus Speicher-Engines, Plugins und anderen Tools, die es für eine Vielzahl von Anwendungsfällen sehr vielseitig machen.

Die Anforderungen an Speicherplatz und E/A-Effizienz unserer Datenbanken werden immer höher. Auf diese Weise können wir unser Informationswachstum richtig verwalten.

Was die MariaDB-Speicher-Engine betrifft, so haben wir verschiedene Typen zur Auswahl, wie z. B. XtraDB, InnoDB, Aria oder MyISAM. Seit MariaDB Version 10.2.5 ist auch MyRocks verfügbar. MyRocks ist die Art von Speicher-Engine, die uns wirklich dabei helfen könnte, die zuvor erwähnten Anforderungen zu erfüllen.

In diesem Blog erfahren wir mehr über die neue MyRocks-Engine und wie wir sie in einem MariaDB-Server verwenden können.

Was ist MyRocks?

MyRocks ist eine Open-Source-Speicher-Engine, die auf RocksDB basiert, das ursprünglich von Facebook entwickelt wurde.

MyRocks kann eine gute Speicherlösung sein, wenn Sie Workloads haben, die eine höhere Komprimierung und E/A-Effizienz erfordern. Es verwendet eine Log Structured Merge (LSM)-Architektur, die eine bessere Komprimierung aufweist als die B-Tree-Algorithmen, die von der InnoDB-Engine verwendet werden (2x bessere Komprimierung im Vergleich zu von InnoDB komprimierten Daten). Es ist auch eine schreiboptimierte Speicher-Engine (10-mal weniger Schreibverstärkung im Vergleich zu InnoDB) und hat ein schnelleres Laden und Replizieren von Daten. MyRocks schreibt Daten direkt auf die unterste Ebene, wodurch alle Komprimierungs-Overheads vermieden werden, wenn Sie das schnellere Laden von Daten für eine Sitzung aktivieren.

Ein LSM funktioniert, indem es Änderungsoperationen in einem Puffer (memtable) speichert und die Daten sortiert und speichert, wenn dieser Puffer voll ist.

Standardmäßig werden Tabellen und Datenbanken in einem #rocksdb-Verzeichnis innerhalb des MySQL-Datenverzeichnisses gespeichert. Diese Informationen werden in .sst-Dateien ohne Trennung pro Tabelle gespeichert.

MyRocks unterstützt die isolierten Ebenen READ COMMITTED und REPEATABLE READ und unterstützt SERIALIZABLE nicht.

So implementieren Sie MyRocks auf einem MariaDB-Server

Installation

Zuerst müssen wir den MariaDB-Server installieren. In diesem Beispiel verwenden wir CentOS Linux Version 7.6 als Betriebssystem.

Standardmäßig versucht diese Betriebssystemversion, MariaDB 5.5 zu installieren, also fügen wir das MariaDB-Repository hinzu, um die MariaDB-Version 10.3 zu installieren.

$ 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

Und dann installieren wir das MariaDB Server-Paket:

$ yum install MariaDB-server

Dieser Befehl installiert verschiedene Paketabhängigkeiten, nicht nur 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)

Standardmäßig wird der MariaDB-Server mit der InnoDB-Speicher-Engine installiert, also müssen wir die RocksDB-Engine installieren, um sie nutzen zu können.

$ 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)

Dieser Befehl installiert einige erforderliche Abhängigkeiten und aktiviert das Plugin auf dem MariaDB-Server. Außerdem wird eine Konfigurationsdatei in /etc/my.cnf.d/rocksdb.cnf erstellt:

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

Wir können diese Installation überprüfen, indem wir den Befehl SHOW PLUGINS auf dem MariaDB-Server ausführen.

$ 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     |
+-------------------------------+----------+--------------------+---------------+---------+

Wenn wir das Plugin aus irgendeinem Grund nicht aktiviert haben, können wir es dynamisch installieren, indem wir den Befehl INSTALL SONAME oder INSTALL PLUGIN ausführen:

$ MariaDB> INSTALL SONAME 'ha_rocksdb';

Eine andere Möglichkeit könnte der Neustart der Datenbankdienste sein. Diese Aktion sollte die Datei /etc/my.cnf.d/rocksdb.cnf lesen und das Plugin aktivieren.

$ service mariadb restart

Detaillierte Informationen zu unserer RocksDB-Engine finden Sie mit dem folgenden Befehl:

$ SHOW ENGINE ROCKSDB STATUS

Konfiguration

Bei den Konfigurationsdateien ist die Hauptdatei /etc/my.cnf, die das Verzeichnis /etc/my.cnf.d enthält, in dem wir den Rest der Konfigurationsdateien finden können. In diesem Verzeichnis haben wir standardmäßig die folgenden Konfigurationsdateien:

  • enable_encryption.preset:Aktiviert die Verschlüsselung von ruhenden Daten.
  • mysql-clients.cnf:Hier gibt es Konfigurationen für verschiedene Gruppen wie [mysqladmin], [mysqlcheck], [mysqldump] und mehr.
  • rocksdb.cnf:In dieser Datei fügen wir die spezifische Konfiguration für MyRocks hinzu, wie default-storage-engine oder rocksdb_block_size.
  • server.cnf:Hier haben wir Konfigurationen, die sich auf den Datenbankserver beziehen, wie bind-address und binlog_format.

Allen MyRocks-Systemvariablen und Statusvariablen ist „rocksdb“ vorangestellt. Werfen wir einen Blick darauf.

Systemvariablen:

$ 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                                     |
…
+-------------------------------------------------+------------------------------------------+

Statusvariablen:

$ 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     |
…
+----------------------------------------------------+-------+

Weitere Informationen zu den Status- und Systemvariablen finden Sie auf der MariaDB-Website.

Backups für MariaDB mit MyRocks

Backups sind ein Muss in allen Datenbankumgebungen. Sie sind unerlässlich für Systemwiederherstellung, Migrationen, Audits, Tests und mehr.

Wir können die Backups in zwei verschiedene Typen einteilen, logisch und physisch. Die logische Sicherung wird in einem für Menschen lesbaren Format wie SQL gespeichert, und die physische Sicherung enthält die zusätzlichen Binärdaten.

Für logische Backups auf MariaDB mit MyRocks als Datenbank-Engine ist das gängigste Backup-Tool der Klassiker mysqldump:

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

Und für die physische Sicherung können wir Mariabackup verwenden, das mit MyRocks kompatibel ist:

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

Eine andere Option kann myrocks_hotbackup sein, erstellt von Facebook. Es kann verwendet werden, um eine physische Kopie von einer laufenden MyRocks-Instanz auf einen lokalen oder entfernten Server zu bringen, ohne die Quellinstanz zu stoppen.

Einschränkungen bei der Verwendung von MyRocks für MariaDB

Schauen wir uns einige der Einschränkungen bei der Verwendung der MyRocks-Engine an...

  • Die optimistische parallele Replikation von MariaDB wird möglicherweise nicht unterstützt
  • MyRocks ist für 32-Bit-Plattformen nicht verfügbar
  • MariaDB-Cluster (Galera-Cluster) funktioniert nicht mit MyRocks (nur InnoDB- oder XtraDB-Speicher-Engines)
  • Die Transaktion muss in den Speicher passen
  • Erfordert spezielle Einstellungen zum Laden von Daten
  • SERIALIZABLE wird nicht unterstützt
  • Transportierbarer Tablespace, Fremdschlüssel, räumlicher Index und Volltextindex werden nicht unterstützt

Schlussfolgerung

MyRocks ist in MariaDB ab Version 10.2.5 verfügbar. Wie bereits erwähnt, kann diese Speicher-Engine für Sie nützlich sein, wenn Sie Workloads haben, die eine hohe Datenkomprimierung und eine höhere E/A-Effizienz erfordern. Um mehr über MyRocks zu erfahren, kannst du dir dies ansehen.