- はじめに
- 開発業務に使用できるオプションには何があるか?
- 開発者は何を望んでいるか?
- エディションの違いは?
- 選択は使用するツールに影響するか?
- LocalDB
- 開発用LocalDbの利点
- 開発用LocalDbの欠点
- 他にどんなエディションがあるのでしょうか?
- Express Edition
- Developer Edition
- Web, Standard, Enterprise Editions
- Azure SQL Database
- Containerized version of any edition
- Conclusion
- はじめに
- 開発業務に使えるようなオプションはありますか?
- 開発者は何を求めているのか?
- エディションはどのように違うのですか?
- 選択は使用するツールに影響するか?
- LocalDb
- 開発における LocalDb の利点:
- What other edition is there?
- Express Edition
- 開発向け Express の利点:
- 開発用 Express の否定点。
- 開発における Developer Edition の利点:
- Web, Standard および Enterprise エディション
- 開発用製品エディションの利点:
- 開発用製品エディションの否定点:
- 開発用 Azure SQL Database の利点:
- 開発用Azure SQL Databaseのマイナス点:
- 任意のエディションのコンテナ化
- まとめ
はじめに
開発者として、コードの開発とテストのための SQL Server データベースは必要です。 選択できるオプションはいくつかあり、心に留めておく必要のあるさまざまな問題があります。 この記事では、その選択肢と、あなたが下すべき決断について見ていきます。 SQL Server の LocalDb エディションは、開発者向けの明白なエディションとして作成されましたが、その考えは実用的ですか、また、開発者向けの他のエディションにはどのような利点がありますか。 これらは 1 台のサーバーで共有すべきでしょうか、それとも複数のサーバーまたは仮想マシンに分散すべきでしょうか? すべての開発サーバーは同じエディションであるべきでしょうか。 クラウド上のすべての開発サーバーをベースとするためにインターネット接続に依存することは賢明なのか、それとも従来の「ラップトップ上の SQL Server」のための場所があるのか。
SQL Server 2005 以前には、開発に使用するエディションを選択することは困難ではありませんでした。 製品そのものは別として、無料の開発者向けエディションがあるだけでした。 その後、より複雑になり、今もそうなっており、Windows 2016とSQL Server 2016へのコンテナの導入により、開発者にとっては興味深い組み合わせがやってきました。
開発業務に使えるようなオプションはありますか?
現状ではありますね。
- Express Edition
- Developer Edition
- Web Edition
- Standard Edition
- Enterprise Edition
- LocalDb
- Azure(アズール データベース + Amazon RDS
- あらゆるエディションのコンテナ版
また、非推奨ですが、Compact Editionというエディションも存在します。 これは、SQL Server と類似していますが、非常に小さなフットプリントで、プロセス内で実行されます。 Compact Edition は SQL の方言を実行しますが、SQL Server のエディションではありません。
開発者は何を求めているのか?
- 生産性
データベース開発者として最も生産性が高いのは、自分のマシンに自分のインスタンスがあり、自由に停止、起動、削除、作成できるときです。 データベースやインスタンスが共有サーバー上にある場合、開発が遅くなります。他の人が私が作業しているものを変更したり、他のことをしたりして、高速な開発、展開、テストサイクルが中断されるからです。 - 単純性
開発者はコードを書き、テストし、デバッグすることに自由に時間を使うべきで、SQL Server データベースなどのリソースの管理に費やす時間は、実際に有用でビジネスに価値を提供するための時間を減らすことを意味します。 これによって、開発者は自分の変更が開発環境と同じように実運用環境で動作することをテストすることができます。 開発機では超高速で動作していても、サービス間の遅延やネットワーク呼び出しが多い3層アーキテクチャで展開すると遅くなるアプリケーションは無数にあるはずです。 また、あるデータベース用に書いたコードが、実際に別のデータベースで動くかどうかを検証することも重要です。 SQL Server 2008 R2 を実運用している場合、インメモリ テーブルを使用して SQL 2016 で開発する意味はないでしょう。
エディションはどのように違うのですか?
データベース アプリケーションを開発およびテストする場合、コードを書いていて開発時にどのように動作するかを確認できた場合、実運用でも同様の動作になることを知ることが重要である場合が多くあります。 エディションは、インストールされて有効になっている機能によって定義されます。コアエンジンのコードは、フリーエディションでもエンタープライズエディションでも同じものです。 問題は、例えば、開発環境ではエンタープライズ版のみの機能を使用し、本番環境ではスタンダード版のインスタンスのみを使用する場合に発生します。 これらのエディションの完全な比較は、マイクロソフトによって、「SQL Server 2016 のエディションでサポートされる機能」
選択は使用するツールに影響するか?
すべてのインスタンスは、コア エンジンと言語の点で同じ動作をします。したがって、もし Enterprise エディションを管理できるツールがあれば、原則として、他のすべてのエディションを管理できます。 過去にすべてのツールがこの原則を守っていたわけではありません。かつてSQL Express用のSQL Management Studioには、フルエディションの機能を管理できないように制限されたバージョンがありました。 現在、SQL Server Management Studioは、以前のバージョンとの後方互換性と、すべてのエディションとの横並び互換性を持っています。
2 つ目の制限は、LocalDb を使用するには SQL クライアント ライブラリを変更する必要があるため、古いバージョンの SQLOLEDB と .Net は接続できないということです。
開発するエディションの選択肢は?
LocalDb
LocalDb が満たせない特定の要件がない限り、開発者の最初の選択肢になるはずです。 LocalDb とは何か、そしてどのような利点があるのかを見ていきましょう。
LocalDb は SQL Server の縮小版で、特に軽量で簡単に素早く起動・停止できるように設計されています。 これは妥協を意味するので、いくつかの制限がありますが、1 つの特定のユーザーに固有のインスタンスをすばやく作成、使用、破棄できるので、ほとんどの開発者にとって本当に素晴らしい選択です。 各インスタンスで同じバイナリを共有するので、必要な各インスタンスのために多くのディスク領域を使用する必要はありません。 つまり、開発セッションの最中に新しいインスタンスが必要になった場合、簡単に 1 つを起動することができます。 コマンド シェルで次のように入力するだけです。
1
|
sqllocaldb create “instance name”
|
これは “instance name” という使用する新しいインスタンスを作成するものです。 私のマシンでは、新しいインスタンスを作成するのに約4秒かかり、その後インスタンスを起動するのに約2秒かかりました。 他の種類のSQL Serverの新しいインスタンスのインストールは、数分から数時間で完了します。
LocalDb の複数のバージョンをインストールしている場合、コマンド シェルでこのコードを実行するだけで、それらのバージョンのいずれかを本当に簡単に作成することができます。
1
|
Sqllocaldb versions
|
このようにリストを得ることができるだろう。
次に、2012年のインスタンスが必要な場合、次のように入力します:
1
|
sqllocaldb create “instance name” 11.インスタンスが必要です。3
|
接続可能な新しい SQL Server 2012 インスタンスを取得します。
LocalDb への接続は、標準インスタンスへの接続とは少し異なります。 マシン名に接続し、ポートまたはインスタンス名を渡す代わりに、「(localdb)」という単語とインスタンス名を渡すので、インスタンスが「test-instance」と呼ばれる場合、サーバー名としてこれを渡します。
1
|
(localdb)\test-instance
|
自分がどのインスタンスを所有しているか確認するには、このようにすることも可能です。
1
|
sqllocaldb info
|
これは、LocalDbインスタンスのリストを示します、さらに1つは最後のコマンドで、次のように、その名前を渡すことによって調査するために、インスタンスがあります。
1
|
sqllocaldb info “instance name”
|
the output will be
- 名前
- バージョン
- 所属ユーザ
- 起動したかどうか
- 最終起動時刻
起動した場合です。 また、実行中の名前付きパイプのパスも表示されます。 (localdb) サーバー名を理解できないクライアントがある場合、おそらくインスタンスに名前付きパイプで接続できます。
LocalDb は、インスタンスの作成と起動が非常に高速なので、開発対象として最適です。 もちろん、Expressと同様、SQL Serverの縮小版というデメリットもあります。 たとえば、フルテキストインデックスはないので、一部のアプリケーションでは使用できません。
開発における LocalDb の利点:
- 高速開発、開発およびテスト用に新しいインスタンスを作成するのは簡単です。
- 同じバージョンのすべてのインスタンス間でバイナリを共有するので、多くのディスク領域を占有したり、多くの異なるバージョンを維持する必要がない。
- SQL Agent などの基本的な機能は含まれていません。
- FILESTREAM をサポートしていません。
- マージ レプリケーション サブスクライバーにはなれません。
- always runs under the users security context;
What other edition is there?
Express Edition
The Express edition is a free version of SQL Server that intended for small databases with low number of users. 2016年版のExpressでは、1インスタンスあたり4コア、1GBのram、最大データベースサイズは10GBに制限されています。 妥当なサイズではありますが、ほとんどの本番データベースアプリケーションには十分なサイズではありませんが、開発用インスタンスが多くのリソースを必要とせず小規模で、スタンダードやエンタープライズ専用の機能に依存するような機能を開発していない場合は、開発作業にも有効です。.
開発向け Express の利点:
- パフォーマンスの問題は開発時に顕著に現れます
- 開発作業にはライセンスの複雑さはありません
- 個人開発および共有開発の両方に適しています。
- ネットワークサービスはフルエディションと同様に設定できるので、リモートマシンから tcp で接続でき、SQL Browser サービスでインスタンス名を使って接続できるようにすることができます
- 自由にダウンロードしてインストールできます
開発用 Express の否定点。
- 製品版の全機能は含まれていません。
- 新しいインスタンスを作成するには、完全な標準インストールが必要で、インストールとアップグレードに時間がかかり、インスタンスごとにかなりのディスク容量が必要です。
- 負荷やパフォーマンスのテストに使用すべきではありません。 Enterprise Edition を使用するアプリケーションを開発する場合は良いのですが、Standard Edition を使用するアプリケーションを開発する場合は、実稼働時よりも良いパフォーマンスが得られたり、Enterprise Edition だけの機能を使用することになったりする可能性があります。 5427>
SQL Server 2000 のライセンスでは、開発者版は、運用データベースとしてではなく、開発およびテストのために使用する限り、無料でした。 もし、開発者版を本番で使用することになれば、エンタープライズ版と同じ値段になります。 SQL 2005がリリースされたとき、ライセンスが変更され、Developer Editionを使用するためには、開発者一人あたり50ドルというわずかな費用が発生することになったのです。 このため、特に開発者がSQLをほとんど使わないチームや、開発者に開発者版のライセンスを提供するMSDNを購読していないチームでは、多くの人が開発版を使えないという事態に陥りました。 これは、SQL Server を使用している .net 以外のチームで特に顕著でした。
SQL Server 2016 ライセンス ガイドによると、「SQL Server Developer Edition は本番環境または製品データで使用できません」 – 「製品データ」が「本番データ」を意味するとすると、本番サーバーとしてライセンスを取得しなければ、テスト用に本番データベースをバックアップおよび復元することはできないように思われます。 また、「Dev Essentials」プログラムに参加すれば、開発者用エディションを無料で使用できると案内されています。開発/テスト用にEnterpriseやStandardなどの別のエディションが必要な場合は、「Visual Studio」サブスクリプションを使用してアクセスすることができます。
開発における Developer Edition の利点:
- Developer Edition は完全な Enterprise Edition なので、もしテストをしていて Developer Edition で動作するなら、コードは本番 Enterprise サーバーと同じ動きをするはずです。 Web または Standard Edition では、Developer Edition の機能および動作の一部が欠落しているため、実稼働システムでは、開発環境よりも機能が少なくなり、これは決して良いアイデアではありません。
- インスタンスごとにかなり多くのディスク領域を使用します。
- ライセンスが明確ではないので、Microsoft ライセンス担当者への確認が必要です
Web, Standard および Enterprise エディション
これらのバージョンを実地で使用するためには、すべてライセンスが必要です。 Web エディションは、アプリケーション ホスティング プロバイダーを通じてのみ購入できます。 日常的な開発でなくとも、パフォーマンスやスケーラビリティのテストでは、展開先の SQL Server のエディションに対して開発するのが最も安全であることが多いのです。 開発版で説明したように、ライセンスは少し不明確で、開発またはテスト環境でこれらのエディションのいずれかを使用するためにライセンスを支払わなければならない可能性があります。
Web エディションは一般に利用可能ではなく、通常はホスティング プロバイダを通じてライセンスを購入しなければならず、さらに複雑さを伴います。
開発用製品エディションの利点:
- 本番環境に近い環境で開発およびテストを行うことになり、これは開発者にとってほぼ常に良いことです。
開発用製品エディションの否定点:
- 新しいインスタンスを作成するのに完全な標準インストールが必要であること。 インストールとアップグレードに時間がかかり、インスタンスごとにかなりのディスク容量が必要。 クラウド プロバイダーを使用するために支払う必要がある価格は別として、マシンとデータベース間のレイテンシは、ローカルまたは LAN ローカル インスタンスよりもかなり高くなることを理解する必要があります。
常に変更をデプロイしスクリプトを実行する純粋な開発作業にこれらを使用することは、おそらく理想的ではありませんが、特に Appveyor や VSTS などのホスト プロバイダーで実行する自動テスト スイートの一部として、テスト用に本領を発揮することができます。
新しいインスタンスを作成し、コードをデプロイし、テストを実行する能力を持つことは、継続的インテグレーション (CI) プロセスにとって素晴らしいことです。
開発用 Azure SQL Database の利点:
- 新しいデータベースのセットアップがシンプルで、特に自動化できること
- 開発インスタンスのメンテナンスが不要で、パッチやバックアップなどが不要である。
開発用Azure SQL Databaseのマイナス点:
- 持続的接続が必要で、ローカルで開発するより遅くなるため、開発よりテストに向いている
- データベース使用分ごとに支払う必要がある
任意のエディションのコンテナ化
Windows2016とSQL Server2016は、どちらもコンテナでSQL Serverを動かすことをサポートしている。 Th-sでは、LocalDbやAzure+AWSで得られるような、インスタンスの起動や停止を迅速に行うための柔軟性が得られます。
Windows 2016 がリリースされたので、Windows 10 または Windows 2016 があれば、SQL Server (もちろん SQL Server 2016) のインスタンスを非常に簡単に作成および破棄できるようになる可能性があります。 Windows の以前のバージョンまたは SQL Server のバージョンに縛られている場合、動作するイメージを作成するのはそれほど簡単ではないかもしれません。
Windows でコンテナーが広く採用されれば、長いインストール プロセスなしに新しいインスタンスを作成し、インスタンスを起動および停止できるようになるはずです。 現段階では、LocalDbの場合よりもインスタンスの開始と停止に時間がかかりそうです。
MicrosoftのVSTSサービスのようなクラウド的な環境でデータベースをテストする場合、LocalDbインスタンスはすでにインストールされているので、開始も可能だと思われます。 それに対して、SQL Server 2016 のデータベース イメージをダウンロードしてから起動すると、ビルド時間がかかりすぎてしまうかもしれません。
まとめ
SQL Server データベース用のコードを開発する場合、私たち開発者は主に 3 つの要件を備えています。
- できるだけ早く生産性を上げたい、
- できるだけシンプルな環境にしたい、
- 特に優れたインターネット接続に依存したくない、です。
- 機能的な観点から現実世界をシミュレートしたテスト版を使用したい (必ずしも日々の開発におけるパフォーマンスではない)
LocalDb は、ほとんどの SQL Server 開発者にとって一般的で、これを使用できないような特定の要件がなければ、非常にお勧めできるものです。