SQL Server on Linux って?(第 1 回目)
Microsoft Japan Data Platform Tech Sales Team
坂本 禎尚
そうです。タイトルに on Linux って書いてあります。今まで、お客さんから「SQL Server って Linux で動かないの?」と聞かれて、「それはないっすわー」と答えていましたが、SQL Server が Linux で動く(既に動いてますが)日がついにやって来ます。
2016 年 3 月に SQL Server を Linux で動かすぞーという最初のアナウンス(対外的な)が行われ、2016 年 11 月の Microsoft Connect(); で最初のパブリック プレビューのリリースが発表されました。その後、約 2 週間で 21,000 を超えるダウンロードが行われたという事実からも皆様の関心の高さが伺えます。
既に国内でも MVP の皆さんをはじめ Blog 等で紹介されている部分もありますが、2015 年から本格的に開発が開始された SQL Server on Linux、開発陣がどこにゴールを置き、何が課題で、それをどのようなアーキテクチャーで克服してきているのか、という事のさわりの部分を今回の記事でご紹介します。
on Linux 化にあたって掲げたゴール
SQL Server を Linux に対応させるにあたって開発陣が設定したゴールが下記です。
- 品質とセキュリティは、Windows 上の SQL Server で実現しているものと同水準を満たす
- 機能性、性能、および拡張性に関しても同様に同じ水準を提供する
- Windows および Linux 上の SQL Server 間のアプリケーションの互換性を維持する
- SQL Server のイノベーションのペースを複数プラットフォームにしたからといって落とさない
- 将来的に SQL Server のその他のサービス(SSIS 等)を動かす為の基盤とする
とはいえ、長い間単一の OS に向けて開発を続けてきたわけですから、コードベース全体に OS 固有の依存関係が数多く存在します。しかも、そのコードのボリュームたるや、C++ のソース コードで約 4,000 万行以上(データベース以外も含んでです)になる規模感です。
最も大きな課題
具体的に、SQL Server のコードはどんなものと依存関係を持っているのか?
大別すると、下記 3 つに集約されます。
- Win32(例えば、user32.dll)
- NT Kernel(ntdll.dll)
- Windows Application Libraries(MSXML 等)
このうち最も複雑でやっかいな依存関係を持ってしまっているのが、Windows Application Library でした。
一例をあげるとすると、SQL Server では XML をサポートしていますが、XML 文書を解析して処理する為に MSXML を使っています。また、VDI によるバックアップをサポートする為に、COM ベースで書かれたコンポーネントが存在しています。
こういった依存関係を Linux 上で再実装しようとするならば、その開発には膨大な時間が必要になりそうであることは想像に難くないでしょう。また、場合によっては、Windows と Linux 間の根本的なギャップにより、完全に同一の機能を実装することが不可能である可能性もあるでしょう。
よって、これらの解決にはプラットフォーム抽象化層(PAL:Platform Abstraction Layer)が必要であるという結論に至り、SQLPAL なるものを作り上げました。
次回は、この SQLPAL に関してご紹介します。
お楽しみに。