Google Cloudは最近、SQLAlchemyアプリケーションを分散SQLデータベース管理およびストレージサービスで実行できるようにするSpanner方言の一般向け提供を発表した。
DropBoxやRedditなどの企業で使用されているSQLAlchemyはPython SQLツールキットである。これによりアプリケーション開発者がSQLを使用できるようになる。オブジェクトリレーショナルマッパー(ORM)で知られている。これは、データマッパーパターンを提供するコンポーネントであり、クラスがデータベースと、それとは分離した形でマッピングされる。そのためベースとなるSQLとオブジェクトリレーションの詳細を透過的に保つことができる。
Spanner DB APIの上に構築されたSQLAlchemy向けのCloud Spanner方言は、オープンソースプロジェクトであり、Alembicを通して移行をサポートする。GoogleのシニアソフトウェアエンジニアShanika Kuruppu氏は、次のように注意を促す。
移行スクリプトは多くのDDLステートメントを生成する可能性があります。各ステートメントを個別に実行すると、移行が遅くなります。そのため、Alembicバッチコンテキスト機能を使って、DDLステートメントをステートメントのグループにパックすることを強くお勧めします。
Cloud Spannerは、インターリーブされたテーブル、生成カラム、クエリヒント、Stale Readをサポートする。すべてが読み取り専用トランザクションではデフォルトで強力な読み取りとなるが、明示的なタイムスタンプの境界を使ってStale Readを実行できる。パフォーマンスを向上させるために、Kuruppu氏は次のことを提案している。
明示的な接続を使用し、複数のクエリ間で接続を再利用してください。暗黙的な接続を使用することもできますが、方言がConnection.execute()呼び出しごとにデータベースへの新しい接続を確立する必要が出てくるため、お勧めしません。
Cloud SpannerでSQLAlchemyを実行する際の制限の中で、分散データベースは一意の制約の作成をサポートせず、トランザクションでのDDLステートメントを許しておらず、ミューテーションをサポートしない。自動インクリメントIDがないなどの、すべての機能と制限は、GitHubページで説明されている。
当クラウドプロバイダーは、Ruby on RailsにバンドルされるORMライブラリであるRuby Active Record Adapter for Google Cloud Spannerの一般向け提供も発表した。GoogleのエンジニアリングディレクターであるPritam Shah氏は、さまざまなORMフレームワークをサポートすることの重要性について次のように説明している。
Spannerを民主化したいです。大企業だけでなく、すべての開発者が利用できるようにしたいです。RubyとPythonの開発者向けに、Cloud Spanner Adapter for Active RecordとSQLAlchemy用のSpanner方言をリリースしました。
Cloud Spanner用のPythonクライアントとSQLAlchemy 1.3のドキュメントには、SQLAlchemyを使ってGoogle Spannerデータをクエリおよび変更する方法の詳細が記載されている。