- Inleiding
- Welke opties zijn er die gebruikt kunnen worden voor ontwikkelwerk?
- Wat willen ontwikkelaars?
- Hoe verschillend zijn de edities
- Heeft de keuze invloed op de tools die gebruikt worden?
- LocalDB
- Voordelen van LocalDb voor ontwikkeling
- Negatieven van LocalDb voor ontwikkeling
- Welke andere edities zijn er?
- Express Edition
- Developer Edition
- Web, Standard, en Enterprise Editions
- Azure SQL Database
- Gekontaineriseerde versie van elke editie
- Conclusie
- Inleiding
- Welke opties zijn er die gebruikt zouden kunnen worden voor ontwikkelingswerk?
- Wat willen ontwikkelaars?
- Hoe verschillend zijn de edities?
- Heeft de keuze invloed op de tools die worden gebruikt?
- LocalDb
- Voordelen van LocalDb voor ontwikkeling:
- Negatieven van LocalDb voor ontwikkeling:
- Welke edities zijn er nog meer?
- Express Edition
- Voordelen van Express voor ontwikkeling:
- Negatieven van Express voor ontwikkeling:
- Developer Edition
- Voordelen van de Developer-editie voor ontwikkeling:
- Negatieven van de Developer-editie voor ontwikkeling:
- Web, Standard en Enterprise edities
- Voordelen van productie-edities voor ontwikkeling:
- Negatieven van productie-edities voor ontwikkeling:
- Azure SQL Database
- Voordelen van Azure SQL Database voor ontwikkeling:
- Negatieven van Azure SQL Database voor ontwikkeling:
- Containerized versie van elke editie
- Conclusie
Inleiding
Als ontwikkelaar heb ik een SQL Server-database nodig waarmee ik code kan ontwikkelen en testen. Er zijn verschillende opties om uit te kiezen, en verschillende zaken waar je rekening mee moet houden. In dit artikel zullen we kijken naar de keuzes, en de beslissingen die u moet nemen. De LocalDb editie van SQL Server is gemaakt om de voor de hand liggende editie voor ontwikkelaars te zijn; Is dat idee praktisch zinvol en welke alternatieve voordelen hebben de andere edities voor ontwikkelaars?
Ontwikkelingswerk zal meestal een aantal server instances vereisen. Moeten deze worden gedeeld op een server, of verdeeld over een aantal servers of virtuele machines? Moeten alle ontwikkelingsservers van dezelfde editie zijn? Is het verstandig om te vertrouwen op een internetverbinding om al uw ontwikkelservers in de cloud te baseren, of is er een plaats voor de traditionele ‘SQL Server op de laptop’.
Vóór SQL Server 2005 was het niet moeilijk om de editie te kiezen die u zou gebruiken om mee te ontwikkelen. Behalve het product zelf, was er alleen een gratis ontwikkelaarseditie. Het werd toen ingewikkelder, en blijft dat doen, met een aantal interessante permutaties op komst voor ontwikkelaars met de introductie van containers in Windows 2016 en SQL Server 2016.
Welke opties zijn er die gebruikt zouden kunnen worden voor ontwikkelingswerk?
Op dit moment is er:
- Express Edition
- Developer Edition
- Web Edition
- Standard Edition
- Enterprise Edition
- LocalDb
- Azure database + Amazon RDS
- Gekontaineriseerde versie van elke editie
Er is ook een editie genaamd Compact Edition die is afgeschreven maar nog steeds beschikbaar is. Het heeft enkele overeenkomsten met SQL Server, maar heeft een zeer kleine voetafdruk en draait in-proces. Compact Edition draait een SQL-dialect, maar het is geen editie van SQL Server. Het is echt geen geschikte ontwikkelinstantie voor het ontwikkelen en testen van code die in SQL Server zal worden geïmplementeerd.
Wat willen ontwikkelaars?
- Productiviteit
Ik ben het meest productief als database-ontwikkelaar wanneer ik mijn eigen instantie op mijn eigen machine heb die ik naar believen kan stoppen, starten, neerzetten en creëren. Wanneer de database of instantie op een gedeelde server staat, vind ik dat de ontwikkeling langzamer gaat – of andere mensen veranderen dingen waar ik mee bezig ben of doen andere dingen om te onderbreken, wat een snelle ontwikkel, implementeer en test cyclus zou moeten zijn. - Eenvoud
Een ontwikkelaar moet zijn tijd kunnen besteden aan het schrijven, testen en debuggen van code en alle tijd die besteed wordt aan het beheren van bronnen zoals SQL Server databases betekent dat ze minder tijd hebben om de dingen te doen die echt nuttig zijn, en waarde leveren aan het bedrijf. - Nauwkeurigheid
In een ideale wereld zou elke ontwikkelaar een snelle, lokale, exacte replica van de productie hebben met gegevens die zo dicht mogelijk bij de productie gegevens staan. Hiermee kunnen ze testen of hun wijzigingen zich in productie hetzelfde zullen gedragen als in hun ontwikkelomgeving. Er zijn vast talloze applicaties die supersnel werken op een ontwikkelmachine, maar trager zijn wanneer ze worden ingezet in een 3-tier architectuur met veel latency en netwerk calls tussen de services. Het is ook belangrijk om te verifiëren dat de code die je schrijft voor de ene database ook echt zal draaien op een andere database. Als u SQL Server 2008 R2 in productie had, zou het geen zin hebben om te ontwikkelen met SQL 2016 met behulp van in-memory tabellen.
Hoe verschillend zijn de edities?
Bij het ontwikkelen en testen van een databasetoepassing is het vaak belangrijk om te weten dat, wanneer we code schrijven en we kunnen zien hoe het zich gedraagt in ontwikkeling, we een vergelijkbaar gedrag in productie zullen krijgen. De edities worden bepaald door de functies die zijn geïnstalleerd en ingeschakeld; de code in de core engine is hetzelfde of je nu een van de gratis edities of de enterprise editie gebruikt. Het probleem ontstaat wanneer je, bijvoorbeeld, een enterprise-only feature gebruikt in ontwikkeling maar alleen een Standard-edition instance in productie hebt. De volledige vergelijking van deze edities is door Microsoft hier gepubliceerd ‘Features Supported by the Editions of SQL Server 2016’
Heeft de keuze invloed op de tools die worden gebruikt?
Alle instanties gedragen zich hetzelfde in termen van de core engine en taal; als u dus een tool hebt die de Enterprise-editie kan beheren, dan kan deze in principe ook elke andere editie beheren. Niet alle tools hielden zich in het verleden aan dit principe: er was ooit een versie van SQL Management Studio voor SQL Express die beperkt was tot het niet kunnen beheren van de functies van de volledige editie. Nu is SQL Server Management Studio achterwaarts compatibel met eerdere versies en zijdelings compatibel met alle edities. Het is momenteel beschikbaar als gratis download, zodat u elke instance kunt beheren zonder dat u een volledige licentie nodig hebt.
De tweede beperking is dat u, om LocalDb te kunnen gebruiken, de SQL client library moet wijzigen en dat oudere versies van SQLOLEDB en .Net dus geen verbinding kunnen maken – als u een applicatie hebt die is geschreven in .net dat eerder is dan versie 4 dan kan het geen verbinding maken.
Welke keuze van edities hebben we om op te ontwikkelen?
LocalDb
Tenzij je een specifieke eis hebt waaraan LocalDb niet kan voldoen, dan moet het de eerste keuze zijn voor ontwikkelaars. Laten we eens kijken wat het is en welke voordelen het biedt.
LocalDb is een afgeslankte versie van SQL Server die speciaal is ontworpen om licht van gewicht te zijn en eenvoudig en snel te starten en te stoppen. Dit betekent een compromis, dus er zijn enkele beperkingen voor, maar het is echt een geweldige keuze voor de meeste ontwikkelaars, omdat je snel kunt maken, gebruiken en vernietigen instanties die specifiek zijn voor een bepaalde gebruiker.
LocalDb heeft een aantal extra voordelen: Het deelt dezelfde binaries voor elke instantie, zodat u niet veel schijfruimte hoeft te gebruiken voor elke instantie die u nodig hebt. Dit betekent dat het heel eenvoudig is om er een op te starten als je tijdens een ontwikkelingssessie een nieuwe instantie nodig hebt.
Het aanmaken van een nieuwe LocalDb is eenvoudig: Je typt gewoon het volgende in de commandoregel:
1
|
sqllocaldb create “instance name”
|
Dit maakt een nieuwe instantie aan die je kunt gebruiken met de naam “instance name”, Op mijn machine duurt het ongeveer 4 seconden om een nieuwe instantie te creëren en dan nog eens ongeveer 2 seconden om de instantie te starten. Het installeren van een nieuwe instance van een van de andere types van SQL Server wordt gemeten in minuten tot uren.
Als je meerdere versies van LocalDb hebt geïnstalleerd, kun je elk van die versies heel gemakkelijk maken, gewoon door deze code in een command shell uit te voeren:
1
|
Sqllocaldb versies
|
U krijgt dan een lijst zoals:
Als u dan een instantie voor 2012 nodig hebt, typt u:
1
|
sqllocaldb create “instance name” 11.3
|
U krijgt dan een nieuwe SQL Server 2012-instantie waarmee u verbinding kunt maken.
Verbinding maken met LocalDb is een beetje anders dan verbinding maken met een standaardinstantie: In plaats van verbinding te maken met de machinenaam en ofwel een poort of een instance-naam door te geven, geeft u het woord “(localdb)” door en vervolgens de instance-naam, dus als de instance “test-instance” heet, zou u dit doorgeven als uw servernaam:
1
|
(localdb)\test-instance
|
Om uit te zoeken welke instanties je hebt kun je het volgende gebruiken:
1
|
sqllocaldb info
|
Dit zal de LocalDb instanties oplijsten, om er een verder te onderzoeken geef de naam van de instantie door aan het laatste commando, zoals:
1
|
sqllocaldb info “instance name”
|
De uitvoer zal zijn
- de naam
- versie
- van welke gebruiker hij is
- of hij is opgestart of niet
- de laatste starttijd
Als hij is opgestart, geeft het ook het pad aan van de genoemde pijp waar het op draait. Als je een client hebt die de (localdb) servernaam niet begrijpt, dan kun je misschien via named pipes verbinding maken met de instantie.
LocalDb is geweldig om tegen te ontwikkelen omdat het zo snel is om instanties te maken en te starten, als je vaak aan verschillende projecten werkt, kun je instanties stoppen en starten en veel verschillende instanties beschikbaar hebben zonder de overhead om ze te onderhouden en op schijf op te slaan. Ze hebben natuurlijk dezelfde keerzijde van Express in die zin dat het verkorte versies van SQL Server zijn. Er is, bijvoorbeeld, geen volledige tekst indexering, waardoor ze niet kunnen worden gebruikt in sommige toepassingen.
Voordelen van LocalDb voor ontwikkeling:
- Snelle ontwikkeling, het is eenvoudig om nieuwe instanties voor ontwikkeling en testen te maken.
- Deelt binaries tussen alle instanties van dezelfde versie, zodat je niet veel schijfruimte in beslag neemt of veel verschillende versies moet onderhouden
Negatieven van LocalDb voor ontwikkeling:
- Bevat niet enkele fundamentele functies zoals SQL Agent
- ondersteunt geen FILESTREAM
- kan geen subscriber voor samenvoegingsreplicatie zijn,
- staat alleen lokale wachtrijen toe voor Service Broker.
- draait altijd onder de gebruikers beveiligingscontext;
Welke edities zijn er nog meer?
Express Edition
De Express editie is een gratis versie van SQL Server die bedoeld is voor kleine databases met een laag aantal gebruikers. In de 2016-versie is Express beperkt tot vier cores, 1GB ram per instance en een maximale databasegrootte van 10 GB. Hoewel dit een redelijke grootte is, is het niet groot genoeg voor de meeste productiedatabasetoepassingen, maar het is handig voor ontwikkelingswerk als uw ontwikkelinstantie niet veel resources vereist en klein is, en als u geen functionaliteit ontwikkelt die afhankelijk is van Standard- of Enterprise-only-functies.
Voordelen van Express voor ontwikkeling:
- Prestatieproblemen zullen meer opvallen bij ontwikkeling
- Er zijn geen licentiecomplicaties voor ontwikkelingswerk
- Het is geschikt voor zowel individuele als gedeelde ontwikkeling.
- Netwerk services kunnen worden geconfigureerd net als bij de volledige edities, zodat u verbinding kunt maken met tcp vanaf machines op afstand en kan worden gebruikt door de SQL Browser service om verbindingen toe te staan met behulp van instance name
- Het kan vrij worden gedownload en geïnstalleerd
Negatieven van Express voor ontwikkeling:
- Bevat niet de volledige feature set van een van de productie versies
- Vereist een volledige standaard installatie om een nieuwe instance te maken, dit kost tijd om te installeren en te upgraden en vrij veel schijfruimte per instance
- Dient niet gebruikt te worden voor load of performance testing
Developer Edition
Developer edition is een volledig functionele Enterprise editie van SQL Server waar alle beperkingen uit zijn gehaald. Dit is geweldig als u een applicatie ontwikkelt die Enterprise editie gebruikt, maar als u een applicatie ontwikkelt die Standard editie gebruikt dan kan het zijn dat u betere prestaties krijgt dan in productie of dat u een functie gebruikt die alleen voor enterprise is. Het kan een kostbare vergissing zijn om code te ontwikkelen, om er vervolgens achter te komen dat deze niet kan worden uitgevoerd wanneer u deze implementeert.
Als u werkt aan een enkele databasetoepassing en deze gaat implementeren op een bestaande server die de Enterprise-editie gebruikt, dan kan het niet ver mis gaan als u de ontwikkelaarseditie van SQL Server gebruikt.
Licenties voor SQL Server 2000 hielden in dat ontwikkelaarseditie gratis was zolang het gebruik voor ontwikkeling en testen was en niet als een productiedatabase. Als u had besloten om de ontwikkelaarseditie voor productie te gebruiken, dan zou deze zijn geprijsd als de enterprise-editie. Toen SQL 2005 werd uitgebracht, betekende een wijziging in de licentie dat er een kleine vergoeding van $50 per ontwikkelaar moest worden betaald om de ontwikkelaarseditie te mogen gebruiken. Dit betekende dat heel wat mensen de ontwikkelingsversie niet konden gebruiken, vooral in teams waar de ontwikkelaars SQL slechts sporadisch gebruikten of waar zij geen MSDN-abonnement hadden dat ontwikkelaars een licentie voor de ontwikkelaarseditie leverde. Dit was vooral merkbaar in niet .net-teams die toevallig SQL Server gebruikten.
Volgens de SQL Server 2016-licentiegids mag “SQL Server Developer Edition niet worden gebruikt in een productieomgeving of met productgegevens” – ervan uitgaande dat “productgegevens” “productiegegevens” betekent, dan lijkt het erop dat het niet mogelijk is om een productiedatabase te back-uppen en te herstellen om tegen te testen, tenzij u de server als een productieserver licenseert. In de gids staat ook dat de ontwikkelaarseditie gratis kan worden gebruikt als je meedoet aan het “Dev Essentials”-programma – als je een andere editie zoals Enterprise of Standard nodig hebt om tegen te ontwikkelen/te testen, dan heb je daar toegang toe via een “Visual Studio”-abonnement.
Voordelen van de Developer-editie voor ontwikkeling:
- Developer-editie is een volwaardige Enterprise-editie, dus als u aan het testen bent en het werkt op Developer, dan zou de code zich hetzelfde moeten gedragen als uw productie Enterprise-server.
Negatieven van de Developer-editie voor ontwikkeling:
- Alleen geschikt voor het ontwikkelen van een database voor Enterprise Edition. Omdat sommige functies en gedragingen van de Developer editie ontbreken op Web of Standard Edition, zal uw productiesysteem minder functies hebben dan uw ontwikkelomgeving en dat is nooit een goed idee.
- Het gebruikt vrij veel schijfruimte per instantie
- Licenties zijn niet duidelijk, dus vereist een controle met uw Microsoft licentievertegenwoordiger
Web, Standard en Enterprise edities
Deze versies hebben allemaal een licentie nodig om in productie te worden gebruikt. U kunt de web-editie alleen kopen via aanbieders van applicatiehosting. Het is vaak het veiligst om te ontwikkelen tegen de editie van SQL Server die u gaat gebruiken, zeker voor prestatie- of schaalbaarheidstesten, maar niet voor alledaagse ontwikkeling. Zoals besproken met de Development editie, de licenties zijn een beetje onduidelijk en je kan mogelijk moeten betalen voor een licentie om een van deze edities te gebruiken in een dev of test omgeving.
De web editie is niet algemeen beschikbaar en je normaal gesproken moet licenties te kopen voor het via een hosting provider die voegt wat extra complexiteit.
Voordelen van productie-edities voor ontwikkeling:
- U ontwikkelt en test in een omgeving die vergelijkbaar is met de productie-omgeving, wat bijna altijd een goede zaak is voor ontwikkelaars.
Negatieven van productie-edities voor ontwikkeling:
- U hebt een volledige standaardinstallatie nodig om een nieuwe instance te maken: Dit kost tijd om te installeren en te upgraden, en vrij veel schijfruimte per instance
- Licenties zijn niet duidelijk en vereisen controle met uw Microsoft licentievertegenwoordiger
Azure SQL Database
Het gebruik van cloud providers om databases voor u te hosten kan echt zinvol zijn bij het ontwikkelen en testen, maar ze hebben wel een aantal nadelen. Afgezien van de prijs die u moet betalen om ze te gebruiken, moet u ook begrijpen dat de latency tussen uw machine en de database meestal aanzienlijk hoger zal zijn dan een lokale of zelfs LAN-lokale instantie. U moet ook een persistente verbinding met de database, zodat die ‘s avonds woon-werkverkeer afwerking van een stuk van het werk in de trein is onwaarschijnlijk.
Het gebruik van deze voor pure ontwikkeling werk waar je voortdurend implementeren van wijzigingen en het uitvoeren van scripts is waarschijnlijk niet ideaal, maar ze kunnen echt komen in hun eigen voor het testen, vooral als onderdeel van geautomatiseerde test suites die worden uitgevoerd in gehoste providers zoals Appveyor of VSTS.
Het hebben van de mogelijkheid om een nieuwe instantie te maken, uw code te implementeren en uw tests uit te voeren is geweldig voor een continu integratieproces (ci), zodat u meerdere builds tegelijk kunt uitvoeren zonder dat u een specifieke instantie of database voor elke build hoeft te onderhouden – zodra u overgaat op het hebben van een enkele build als onderdeel van uw ci-proces, helpt deze eenvoudige benadering voor het implementeren van databases echt.
Voordelen van Azure SQL Database voor ontwikkeling:
- Eenvoud in het opzetten van nieuwe databases, vooral omdat dit kan worden geautomatiseerd
- Geen onderhoud van uw ontwikkeling instances dus geen patches, geen back-ups, enz.
Negatieven van Azure SQL Database voor ontwikkeling:
- Meer geschikt voor testen dan voor ontwikkeling omdat een persistente verbinding nodig is en langzamer zal zijn dan lokaal ontwikkelen
- U moet betalen per minuut databasegebruik
Containerized versie van elke editie
Windows 2016 en SQL Server 2016 hebben beide ondersteuning voor het uitvoeren van SQL Server in een container. Dit geeft ons alle flexibiliteit die we krijgen met LocalDb en Azure+AWS voor het snel starten en stoppen van instances. We zouden ook de voordelen moeten zien van het feit dat we niet elke instantie afzonderlijk hoeven te patchen, zolang we gemeenschappelijke images gebruiken voor onze instanties.
Windows 2016 is nu uitgebracht, dus we kunnen nu mogelijk vrij eenvoudig instanties van SQL Server (zeker SQL Server 2016) maken en weggooien als we Windows 10 of Windows 2016 hebben. Als we gebonden zijn aan een eerdere versie van Windows of versie van SQL Server dan is het misschien niet zo eenvoudig om een image te maken die werkt.
Zodra we wijdverspreide adoptie van containers in Windows krijgen, zou dat moeten betekenen dat we nieuwe instanties kunnen maken en instanties kunnen starten en stoppen zonder het langdurige installatieproces. In dit stadium lijkt het erop dat het langzamer zal zijn om instances te starten en te stoppen dan het geval is met LocalDb.
Als u uw databases test in een cloud-achtige omgeving, zoals de Microsoft VSTS-service, vindt u misschien ook dat het starten van een LocalDb-instance haalbaar is omdat deze al is geïnstalleerd. Daarentegen zou het downloaden van de SQL Server 2016 database image en het vervolgens starten ervan te veel van uw build minuten in beslag kunnen nemen.
Conclusie
Bij het ontwikkelen van code voor SQL Server-databases hebben we, als ontwikkelaars, drie belangrijke vereisten:
- we willen zo snel mogelijk productief zijn;
- we willen dat onze omgeving zo eenvoudig mogelijk is;
- we willen niet in het bijzonder afhankelijk zijn van een goede internetconnectiviteit;
- we willen een testversie gebruiken die de echte wereld simuleert vanuit het oogpunt van functionaliteit (niet noodzakelijkerwijs prestaties voor dagelijkse ontwikkeling)
LocalDb is typisch het antwoord voor de meeste SQL Server ontwikkelaars en, tenzij u een specifieke eis hebt die betekent dat u het niet kunt gebruiken, zou ik het ten zeerste aanbevelen.