<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> 
<dfn><code>AnyEvent::MySQL::Client</code></dfn>
は、
<code>AnyEvent</code> / <code>Promise</code>
環境用の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MySQLプロトコル</anchor><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perlモジュール</anchor>です。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 
<cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pawjy</anchor>/perl-anyevent-mysql-client: A promise-aware MySQL protocol client for Perl</cite>, <time>2024-01-26T09:22:09.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/pawjy/perl-anyevent-mysql-client">https://github.com/pawjy/perl-anyevent-mysql-client</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 
従来 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perlアプリケーション</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MySQL</anchor> サーバーアクセスには <code>DBI</code>
と <code>DBD::mysql</code> の組み合わせが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">事実上の標準</anchor>として使われてきました。
しかしこの組み合わせでは限定的な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非同期</anchor>処理機能はあるとはいえ、
<code>AnyEvent</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非ブロッキングI/O</anchor>前提の環境に適した実装にはなっていません。
<code>AnyEvent::DBI</code> のような実装もあるものの、
非効率的で不完全な実装にとどまっていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 
また、 <code>DBD::mysql</code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XSモジュール</anchor>で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MySQL</anchor> クライアントライブラリーを直接利用するため、
公式クライアントをそのまま使えるという<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性</anchor>上の大きなメリットがあるものの、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">可搬性</anchor>が大きな課題となっています。特に今般 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MySQL</anchor> 8 以外の版
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MariaDB</anchor> や古い <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MySQL</anchor>) への対応が打ち切られたことで、
これまで以上に制約が厳しくなってしまいました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 
対して <code>AnyEvent::MySQL::Client</code> は <code>AnyEvent</code> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">I/O</anchor>
ライブラリーを活用して <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MySQLプロトコル</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>機能を独自実装しています。
<code>AnyEvent::MySQL::Client</code> 自体は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pure Perl</anchor> です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 
<code>AnyEvent::MySQL::Client</code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MySQLプロトコル</anchor>の
「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">薄い</anchor>ラッパー」
として設計されています。
この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perlモジュール</anchor>を基礎として、任意のデータベースアクセスパラダイムの
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor> を提供する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perlモジュール</anchor>を制作できます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 
従って一般の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perlアプリケーション</anchor>では <code>AnyEvent::MySQL::Client</code>
の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor> をそのまま使って開発するのは得策ではないかもしれません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
現在、 <code>AnyEvent::MySQL::Client</code> を使った<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データベース</anchor>アクセスライブラリーとしては、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Dongry</anchor>
があります。</p><pre> </pre></body></html>