アプリケーションに適したデータベースを選択することが肝要です。特にデータベースと直接連携するバックエンドアプリケーションにとって、その重要性は計り知れません。実際には多くの選択肢があり、それぞれが特定の状況で強さを発揮し、価格、速度、スケーリング性能といった特徴は千差万別です。

Pythonはデータ操作に便利な機能を多数誇り、一般的にデータを多用するアプリケーションで使用されることが多く、Pythonアプリケーションで使用するデータベースは非常に重要です。

今回の記事では、MariaDBをMySQLやPostgreSQLといった他のデータベースと比較し、Pythonを使用する際に最適な選択肢となる理由についてご説明します。

MariaDBとPythonの相性

Pythonは、強力なデータ操作と機械学習ライブラリを武器にした、データ実務者(特にデータエンジニアリングやデータサイエンス)に人気のあるプログラミング言語です。どちらの分野も大量のデータを扱うため、必要なストレージが増え、メモリや処理能力が重要視されています。

ライセンス費用がデータサイズに応じて増加することが多いため、オープンソースのデータベースを使用するのが堅実です。また、これによりハードウェアのコストも節約することができます。アプリケーションの導入場所を完全にコントロールできるため、クラウドでもオンプレミスでも、安価なソリューションを見つけることが可能になります。

リレーショナルデータベース、NoSQLデータベース、グラフデータベースなど、多くのオープンソースデータベースが存在します。一般的にリレーショナルデータベースは構造や一貫性に優れているのに対し、NoSQLデータベースは迅速な開発が可能で、より柔軟な設計となっています。

PythonはNoSQLデータベースでも全く問題なく機能しますが、Pythonの一般的な用途である分析や大規模データ処理にはリレーショナルデータベースの方が向いています。

MariaDBと他の一般的なオープンソースリレーショナルデータベースを比較してみましょう。

MariaDB、MySQL、PostgreSQLの比較

人気のあるオープンソースのリレーショナルデータベースとしてよく名前が挙がるのが、MariaDB、SQLite、MySQL、そしてPostgreSQLです。それぞれコアとなる技術は似ていますが、MariaDBにはPythonアプリケーションと相性のいい特徴がいくつかあります。

さらに、MariaDBはオープンソースであるため、その機能は、現在Oracleが所有しているMySQLのような外部の存在に依存することはありません。オープンソースのコミュニティからMySQLに提案したり機能を追加したりすることは可能ですが、(競合するデータベースを持つ)実質的にはOracleがその行く末を決めることになります。

一方、MariaDBには、OracleがMySQLを買収した後、コミュニティ主導の開発アプローチを継続するために作られたという経緯があります。その結果、MariaDBはMySQLよりもクエリやレプリケーションの性能を確保するストレージエンジンの数を増やすなど、豊富な機能を備えています。この性能向上は、大規模なデータセットを扱う際に重要です。

PostgreSQLもコミュニティ主導であるため、PostgreSQLよりMariaDBを使う理由となると、少し視点が異なります。PostgreSQLは独自のBSDライクなライセンスであるPostgreSQL Licenseを使用しており、MariaDBのGNUライセンスよりも寛容で、利用者がクローズドソースの拡張を行えるようになっています。

拡張機能を作成した人にはメリットがありますが、その機能がPostgreSQLのコアデータベースで常に使用されるとは限らず、開発者は拡張機能の利用に対して課金することも可能です。MariaDBとMySQLのGNUライセンスでは、新しい機能を「私物化」することはできません。すべての新しい機能が自由に利用できる状態になります。

MariaDBとPostgreSQLの機能はともに豊富です。しかし、MariaDBはPythonバックエンドにとって特に便利な機能を搭載しています。例えば、MariaDBは1つの言語を使って、すべてのストレージエンジンとの相互接続を実現しています。OLAPとOLTPシステムが同じ構文で制御されるため、開発者の負担が軽減できます。

Pythonバックエンドは、トランザクションのようなデータをMariaDBに書き込み、そのデータを分析クエリにより適したストレージエンジンにコピーできます。開発者としては、同じ構文を使ってレプリカに対して分析クエリを書くことができ、パフォーマンスの向上が期待できます。

また、MariaDBは最近、Pythonと同様に文字列の書式設定にf-Stringを導入しました。これにより、MariaDBとPythonを併用する際には、言語間の切り替えに煩わされずに済みます。

MariaDB Pythonコネクタ

2020年以前、Pythonのプログラミングの際には、MySQL Pythonパッケージを通してMariaDBに接続するのが一般的でした。これはMariaDBがMySQLのフォークであるため可能でしたが、同時にMariaDB接続がMySQLと同じような挙動になることを意味しました。

2020年、MySQLへの依存を取り除き、MariaDBに柔軟性を確保するため、ネイティブMariaDBコネクタがリリースされました。Pythonのパッケージマネージャであるpipでコネクタをインストールし、すべての一般的なCRUD操作に使用することができます。

すべてのステートメントは、カーソルオブジェクトを通し管理します。デフォルトでは、MariaDBカーソルはクエリをプリペアドステートメントとして受け付けますので、クエリの動的な部分をサニタイズすることができます。これは、文字列をフォーマットしてクエリを構築する(SQLインジェクション攻撃に対して脆弱)よりも安全な手法です。

コネクタの仕組み

このコネクタの使い方は簡単です。まず、MariaDBコネクタライブラリをアプリケーションにインポートし、以下の関数を使用してMariaDBデータベースサーバーに接続します。

import mariadb

try:
    connection = mariadb.connect(
        user=username,
        password=password,
        host=mariadb_host,
        port=3306,
        database="sales"

    )
except mariadb.Error as err:
    print(f"An error occurred whilst connecting to MariaDB: {err}")

接続すると、すべてのクエリがカーソルオブジェクトを通じて実行されます。カーソルオブジェクトを取得し、それを使ってクエリを実行します。

cursor = conn.cursor() 

クエリをプリペアドステートメントとして送信するには、クエリテキストのプレースホルダーとして疑問符を使用し、必要な値をタプルとして渡します。

ur.execute( "SELECT * FROM sales WHERE sale_date >= ? and price > ?", (sale_date_val, price_val)) 

タプルからの入力値が、左から右の順に疑問符を置き換えることになります。この入力値もSQLインジェクションを防ぐためにサニタイズされます。Pythonのように初心者のプログラマーを意識して設計された言語では特に、SQLインジェクション対策のような機能が組み込まれているのは有り難いものです。

WordPressサイトでPythonとMariaDBを活用する

PythonアプリケーションのバックエンドとしてMariaDBを使用するもう一つの利点をご紹介します。特にKinstaを使用する場合では顕著ですが、データベースをWordPressのフロントエンドに接続するのが簡単になります。

KinstaはバックエンドデータベースとしてMariaDBをサポートしており、即座に互換性を持たせることができます。つまりWordPressサイトから、Pythonで処理したデータセットに簡単にアクセス可能です。例えば、Pythonで何らかの分析を行い、その結果をMariaDBに保存し、WordPressのページでグラフとして表示するといった操作ができます。

ちなみにKinstaでは、エンドツーエンドのソリューション開発を支援するツール「DevKinsta」を提供中です。DevKinstaを使用すると、ローカルマシンを使用して、MariaDBをバックエンドに持つWordPressサイトをセットアップし、準備ができたら即座にKinstaにプッシュすることができます。この統合により、MariaDBデータベースを持つサイトのセットアップが簡単になり、ものの数回のクリックでウェブサイトを公開可能です。

まとめ

MariaDB、MySQL、Postgresなど、複数のオープンソースリレーショナルデータベースが、Pythonのバックエンドとして機能することができます。しかし、MariaDBは、そのオープンソースの性質により、中でも特に柔軟で機能豊富な選択肢となっています。

大規模なデータセットを扱う場合、MariaDBは多くのストレージエンジンを誇るため、他のデータベースよりも高速で、トランザクション処理から分析クエリまで、複数のユースケースをサポートします。柔軟性、スピード、そしてMariaDB PythonコネクタによるネイティブなPythonとの統合により、大規模なデータセットを処理するPythonアプリケーションのバックエンドとしておすすめです。

さらに、MariaDBはWordPressのフロントエンドに直接接続することができ、ウェブサイトからデータに楽々アクセス可能です。KinstaはMariaDBをサポートしており、この統合がさらにスムーズになります。DevKinstaを使用すると、ローカルマシンでMariaDBを使用しWordPressサイトを構成してから、Kinsta経由でソリューションをデプロイすることができます。

データベースホスティングを今すぐお試しください。

Jeremy Holcombe Kinsta

Kinstaのコンテンツ&マーケティングエディター、WordPress開発者、コンテンツライター。WordPress以外の趣味は、ビーチでのんびりすること、ゴルフ、映画。高身長が特徴。