 Well, I am the organizer actually of this meet-up and I wanted to present this project of mine, which is like a side project I'm doing right now, which is a work in progress. But I started very small and then it became bigger and bigger and I thought it was time to give it a go and show to people what I've been doing and hopefully get some help from some people who are knowledgeable in databases or Golang or whatever. So how it started, I use Golang mainly for my backend development and mostly I'm using MySQL. So I told myself why not benchmark whatever I'm using every day and see what's the optimal solution to do whatever I do. So I just set the usual assumptions. So I use Google Cloud because I'm used to it. There's no reason why I could have used AWS, no reason. Latest Golang version, VM. So I tested either on virtual machines. So all one virtual CPU, almost 4GB RAM and no SSD, normal disk. But also in my local machine. I test with around 10,000 requests per second and 50 concurrent requests. This is customizable of course. And my goal was to, so I started very small with a simple schema with two tables and my goal is to be able to test different schemas always small to make sure that it doesn't become too complicated and also pluggable DBs. So I started with MySQL and then it was very nice and then I told myself why that's already pretty good, it's kind of working. So I started with just one small schema that I will show you later and MySQL 5.6 I think. And then I told myself, yeah, why not compare with PerconaDB and MariaDB which are binary compatible MySQL because it will not add me much work and they are both available in containers. So Percona is 5.7, MariaDB is 10.3 I think I used. And then I told myself, well, why not use also Postgres because everybody is talking about it and it's like cool to have another database system in there. I then had to adapt of course the creation and the SQL scripts but it's very similar so it was not so difficult. And with the Golang interfaces it kind of makes it very easy to do that. And then somebody told me wait, why don't you use Oracle because in my company we use Oracle and then that was a very painful decision because Oracle needs specific libraries in C and Java I think there's dependencies of course Oracle and there's only Oracle XE11 available on Docker Hub. But it was available so I also added that then my Microsoft also released SQL Server for Linux and it's available also on Docker Hub so let's go for it so I also of course tuned the scripts for Oracle and Linux Server SQL Server for Linux, sorry then SQLite because it's everybody in SQLite is very similar to MySQL and then why not as far as I was in all that and then there's one very recent project that a lot of people are talking about which is CockroachDB and basically it's a RDBMS but cloud native and I wanted to know how far and how it compared actually to the other RDBMS and it's 100% Golang so I was very happy to use it. Then I told myself well nobody uses that actually so let's compare it also to hosted MySQL and GCP so Google Cloud because Google Cloud gives you access to all providers Amazon as well of MySQL hosted and recently they also added Postgres on Google Cloud so I also added it so I think that's it yes but I didn't stop there I told you I started very small but I grew so much and then I told myself okay I know Swarm I know Kubernetes so let's compare both of them as well and see how all these containerized databases behave in either Kubernetes or Swarm in the same setup so unfortunately I didn't have the time to test on Swarm on Google Cloud because it was not very convenient and I didn't have the time simple as that then here are the first results that I have so this is as I said a very simple two tables it's basically one way of doing things which is actually very bad but that's another story I just wanted to benchmark two table entity one and basically each time you change the status of the entity one you save the status and so for all this I tried to test for all the things that I just said except Cockroach GB which unfortunately failed actually I'm going to talk to you the other one so I implemented it also in another way to see which one was faster and on Kubernetes so I've got all the results on Kubernetes on Swarm for all the databases I got the throughput the minimal time the maximum time the median standard deviation number of errors because I was surprised but there are a lot of errors actually so throughput is transaction per second mean time is nanosecond I should perhaps turn it into something more readable no but it's basically a simple so for the insert it's a this for this one is one insert so this is a crude statement so create an update so the create will for this schema specifically really insert in status first get the idea of the status and then insert into the second table so that's to insert for the create and for the update it's a one insert and then one update and below I have a select for a specific status so I select one entity one with a specific status and this second one is just a select by primary key for now I don't think I have enough unfortunately I don't think I have enough done enough tests and enough requests to have a very very reliable way of saying for my setup for what I do every day this is like for example I see you see the blue which is Percona Percona is really the best I cannot say that right now I don't think I have done enough tests but it was very interesting to say that there are a lot of differences for sure SQLite obviously is a lot faster for our selects because it's local it's not on the network so it gives then we can just remove it actually sometimes I have a Linux a scale server that behaves like a lot better than the others as well the previous one so that's on SWARM but the problem is that it's on local sorry that's Kubernetes and on local it's also a lot better but that's normal because my local is my MacBook Pro the number of errors is that it was actually very surprising SQLite I'm not surprised too much but PostgreSQL gave me a lot of 3 hours out of 10,000 it's not so bad but selects were pretty bad for Oracle for this time and any questions on this one? what kind of errors did you get? mostly locks or timeouts I timeout at 500 milliseconds so have you compared, have you tried benchmark without containers and with what? so yes it's a if you look at Kubernetes I have compared with Kubernetes latest that is I have a GCP MySQL which is not contained that's the error sorry it's not a very good representation and it's actually not that great for this example for now I didn't see much difference I was expecting something a lot better but not really for now what GCP offers more than what in my simple setup right now is a high availability that's something I didn't do yet but I'm planning to do machine without containers and running inside a container but that's what it does right because I compare MySQL or let's say Percona 5.6 within a container so that's this one that's the blue one and the Google Cloud MySQL which is not a container database it's a hosted database from Google Cloud is it your question? 10,000 I do 10,000 10,000 inserts or 10,000? 10,000 inserts 10,000 updates 10,000 selects how many such tests did you do? 10 but I didn't average yet so I need to do a lot more that's what I'm saying it's a work in progress don't take these results as something that you should follow that's for sure I need to do a way more test now but now that's my setup is done it's going to be a lot easier so everything is automated so each time I want to I modify something I just have one comment to run and then it runs all the tests on Google Cloud did you answer your question? actually just to find out what's the overhead the overhead of the container I will like the overhead maybe some potential I will overhead not even sure I actually I'm pretty sure Google I read that Google actually my sequel is also the one that they provide is also containerized so there's not so many different and I think anyway comparing the database performance to the IO you will never see anything yeah probably not yeah definitely not as well but I mean the database performance is so bad compared to what the IO could really impact on the results but it would be interesting anyway to see after I do more tests how it behaves any other question on this one? so right now I do it just inside the container but same also that's on my roadmap to use in Kubernetes stateful sets and persistent disk so that I can have I mean the next step would be high availability and to have high availability I'm pretty sure I will have to use a persistent disk maybe not for Cockroach DB I'm not sure yet hopefully not the one big result here actually sorry it was on the other page is that you see that Cockroach DB doesn't appear in any of my tests because they just went out for 1.0 and I could not finish the test it was a lot slower and I couldn't even reach the end of the test after 1 or 2 hours so I think in terms of request they are not there yet hopefully very soon I've asked them to look at what could be wrong but hopefully we can have it very soon I think that would be a great improvement for storage within containers and so what's next as I said better stability because my tests sometimes are not so reliable use cluster DBs so Galera cluster Cockroach DB used as a cluster with ProxySQL probably try to see if SSD as an impact or not so much and of course optimize the DB configurations because I know that there can be a lot of differences according to the RAM you set in the configuration or the cache you set as well and also if people are interested to help and contribute to this to one specific implementation let it be Postgres or MySQL or whatever you know it would be quite great my repository is here so if you are interested to contribute I'll be glad any questions what is your performance of different databases in fact containers on the database performance to the lot of play but my goal was to not really know if containers slow down or so it was really to find out the easiest and probably cheapest as well way to do basically a simple backend with a database and also considering how much hardware I have what is probably the best database I could use I was hoping at that time to be able to use CodecruzDB but it seems it's not ready yet but in the future I'll definitely look into it I also wanted to know if when Enterprise uses Oracle or SQL Server if it's really much better or if it's like very similar so basically we are doing database which one or not but containers allow me to make it easy I don't think Oracle is supported with Docker it's not that well it's supported with containerized I think it's LXD but not the Docker probably yeah it's not the official image that's for sure on any way I don't think a lot of people are using Oracle XE but maybe I'm wrong I'm not sure I think this might be one of the Enterprise announcements that I've mentioned there is on the Docker store there are licensed images so Docker is focused on so there's Docker Hub open source mainly like license managers built into the Hub so they can license images to people and I think Oracle is one of the they are using it but I'm not sure if it's officially supported but in the Docker store there's definitely some text Oracle XE is just for what you think pretty much I guess the cost is so just impossible to afford anyway for normal companies yeah ok