
Microsoft SQL Server 2016 Express - itaysk
https://hub.docker.com/r/microsoft/mssql-server-2016-express-windows/
======
slmyers
Why would I use this (windows server 2k16 + Microsoft SQL) vs a linux image +
Postgres? Does anyone have any insight in this comparison? It seems to me that
this stack is expensive and will likely have less documentation, but I could
be wrong on this and there may be very good benefits. Comments appreciated.

~~~
blahi
To be honest with you, if you have to ask that question, you don't need SQL
Server.

In order not to mistake my comment with an attack (it really isn't) one reason
is tooling. Postgres doesn't have 1/10th of the tooling available for SQL
Server. Another is BI. There isn't a better BI stack out there than
Microsoft's. Also the price if very small compared to the competition and
licensing costs are dwarfed by implementation costs, in general. So no, SQL
Server is not expensive at all. Also the documentation is actually very, very
good.

~~~
jdright
But you need to reboot on install, updates and uninstall, all these operations
that can take up to two hours for no reason. And the express edition is capped
at 10gb db. So, no, SQL server is nothing better than alternatives at least if
you aren't in the big ones and DBA is your job.

~~~
jdright
Nice, downvoted for what? facts?

This is a fact, I work with this thing for about 5 years (this is my karma)
and there is not a single day where this doesn't cause a problem or makes
somebody to lose 3-5 hours of work.

We have about 3000 people and this is overkill for our needs.

You know what the reason? Because people say that it is awesome, then a naive
engineer decide to use it basically due to this propaganda in a LOCAL but
central piece of our pipeline (something that SQLite would fit perfectly!) and
then everything after becomes a problem.

Now we're stuck with it to day and nobody can change without a lot of work and
trouble. I'm basically one of the people responsible in a strike team to fix
SQL server issues in production.

~~~
clappski
I have to say, I work for a bulge bracket bank ran entirely (well, mostly) on
MSSQL 2008/2012, and I don't think I've ever had any issues with it, apart
from the one set of DBs that someone decided to turn into a backend for an
object store that seemingly didn't know anything about database design.

~~~
jdright
Yes, but as I said in my comment our use case is nothing like a Bank. See,
using SQLExpress to build a desktop LOCAL database doesn't look like a smart
move.

------
serguzest
T-SQL is the poorest rdbms language ever existed. Microsoft didn't bother to
implement very simple string, datetime functions for 15 years where Postgresql
is very rich in that department. So please don't speak about how microsoft
tooling is rich.

~~~
blahi
ruh-roh, master-master replication, multithreaded eexecution, vacuuming
tables, in-memory OLTP. Yes postgres is cutting edge and without blame. Stay
away from the evil SQL Server, nothing to be gained there.

~~~
serguzest
What about true MVCC?

~~~
UK-AL
READ_COMMITTED_SNAPSHOT?

~~~
serguzest
It uses tempdb for tracking versions, it is not mvcc in the core

[https://news.ycombinator.com/item?id=12693127](https://news.ycombinator.com/item?id=12693127)

~~~
UK-AL
Just because it does it in tempdb, doesn't mean its not MVCC. That's an
implementation detail.

~~~
serguzest
In postgres (and probably in others aswell), MVCC implemented in Btree storage
level. there is an overhead to write tempdb.

~~~
anarazel
Btrees in postgres have no visibility information, MVCC is implemented on the
heap level.

------
cm2187
What's the benefit over giving a VM to a developer? What does a developer gets
from setting up a SQL Server in a container that he doesn't get from setting a
SQL server in a VM?

~~~
benjaminwootton
Reduced boot time, lower overhead, deployment speed, consistent environments,
better resource utilisation, security, flexible isolation, better clustering
options, no VMWare licensing fees, image signing workflows & a few more...

~~~
cm2187
\- Reduced boot time: I assume this is the case, and it is certainly desirable
for firing up a new instance of a web server, but does that really apply to a
SQL database? I can only think of marginal use cases.

\- lower overhead, better resource utilisation: agree

\- deployment speed: agree

\- consistent environments: a standard docker image is not adding anything
over a standard VM image.

\- security: I am not a specialist but I doubt containers offer the same level
of hardware enforced separation that VM offer

\- flexible isolation: what do you have in mind?

\- better clustering options: but the SQL server software itself is doing the
clustering? Otherwise you will end up with inconsistent datasets

But what I don't understand is the concept of a standard container image. That
means this only applies to scenario with static data in the database? Unless
this is for database sharding, where you fire up a new empty database to
extend a database pool?

~~~
tracker1
IIRC Containers in windows are full hyperv containers, so you do get full vm
isolation[0].

I would imagine that this would be _much_ more for testing, as it allows for
an isolated, empty db for each load. Beyond that, if you're doing a completely
containerized infrastructure. Though I would submit that if you're doing
windows containers, odds are you're either internally publishing or publishing
to azure, so for production, dedicated SQL server or azure sql would likely be
better options.

[0] [https://msdn.microsoft.com/en-
us/virtualization/windowsconta...](https://msdn.microsoft.com/en-
us/virtualization/windowscontainers/about/faq)

~~~
windowsworkstoo
FYI you can choose to use Hyper-V containers (in which case, yes, docker is
effectively orchestrating complete VM's) or use the new Container
implementation, which is basically filesystem and registry isolation

------
sztwiorok
Docker is the best thing since sliced bread!

From their latest newsletters it appears that they intensified cooperation
with MS. Hope it does a good turn!

~~~
tracker1
I'd love to see MS's efforts on the linux subsystem bake to a point where
Window's container system can support linux containers, which will bring a
_MUCH_ more rich ecosystem of possibilities.

------
ashtavakra
All this is nice, but once the SQL Server database crosses a certain size,
there are things one needs to do like separating transaction logs, data files,
tempdb files to separate disks for acceptable performance. I am not sure how
that will work with SQL Server inside a container.

~~~
karma_fountain
Good for development environments though. Probably don't want to be running
SQL Express for large databases anyway.

~~~
NKCSS
It's limited to 10GB; so even if you wanted to, it won't :)

~~~
windowsworkstoo
Trivial to sub the express edition for developer edition and you are away

~~~
NKCSS
You know that's not allowed, right? Dev can only be used locally on your own
machine, never to run anything other people can access.

~~~
windowsworkstoo
Yes, why else would you be running SQL in a container for if not for
dev....10GB is fuck all, and it's nice having multiple versions of a large
test (or sanitized prod) backup available locally, which can easily be greater
than 10GB

~~~
partisan
"fuck all" \- Absolutely nothing at all, the most extreme degree of nothing.

------
andrewchambers
Docker on windows complicates things prematurely. So many moving parts to
configure. In fact, i think the same thing about docker to begin with, but if
i was using docker, i would just use linux.

------
scotty79
Is express still limited to 10gb databases?

