Note: i never really considered putting oracle in kubernetes to be a technical problem; since you can pass a “raw” block device from a distributed block storage.
I consider it to be a licensing nightmare as the normal oracle license means you’ll need to license every single vCPU on the cluster.
The express edition used here has some relatively anaemic usage limits which you could brush up against very quickly:
“Oracle Database 18c Express Edition automatically constrains itself to the following resource restrictions;
2 CPU threads;
2 GB of RAM;and
12 GB of user data.”
Still, it’s cool, but I would caution anyone against introducing an oracle dependency.
If, like me, you at some point need to support Oracle coming from Postgres there are a few annoyances you should be aware of:
- No boolean type. Different folks will choose T/F chars, Y/N chars or 0/1 integers.
- Strings are not nullable. An empty string and a null string are the same thing.
- Date also has time.
By default, you end up with some very annoying bugs. Expect to actually change the way some of your columns work.
That is quite weird.. but I don't really understand it actually. Isn't the best way to store a boolean to literally store 1(bit)? More than 0 and 1 isn't needed right?
I'm just guessing but a CHAR would be 4 byte if it's Unicode and an INTEGER also right?
So you're telling me there's really no way to store just one or a few bits?
Oh my goodness, this is an awful idea. Oracle just runs hosted Exadata for OCI last I checked.
RAC requires shared block storage and L2 private network. Cloud SDNs and storage require gross hacks with horrible performance consequences. Even “modern” virtualization is painful, but can work.
Oracle isn’t going to fix all the bare-metal spaghetti assumptions in their clustered DB stack, and has been pretty clear about that.
This could be useful for throwaway dev/test environments. Or maybe for apps that aren’t performance intensive or critical that are in “maintenance mode” and folks want to lift-and-shift. But they’ll probably spend more time on that than fixing/replacing/retiring the app. And all will require smaller data sets than what I see with big company legacy systems.
And typically those systems are using Oracle to access data populated by another system, which makes me die a little inside.
Pretty clearly a play to get big companies into GCP contracts, more than anything real.
It’s to sell to execs who want to do the cool thing without paying to fix the old thing. ahem Thomas Kurian cough.
Kubernetes has a large ecosystem of network storage drivers which provide replication for non-HA applications.
That said - it is entirely possible to run local storage for applications that provide their own replication. We run an LVM local storage provisioner for our in-cluster Postgres (orchestrated by Patroni). This gives us all sorts of snapshotting and resizing that you would find in network storage while having the performance of locally attached NVMEs
Would love to see Google throw this sort of effort at something other than Oracle. The Zalando crew have done an amazing job with Patroni and their Postgres operator. But having Google’s resources could really elevate in-cluster databases to the mainstream.
Stay tuned. A lot of the tech behind El Carro can be extracted into a generic controller and serve as the foundation for other databases including Postgres.
dijit|4 years ago
I consider it to be a licensing nightmare as the normal oracle license means you’ll need to license every single vCPU on the cluster.
The express edition used here has some relatively anaemic usage limits which you could brush up against very quickly:
“Oracle Database 18c Express Edition automatically constrains itself to the following resource restrictions;
2 CPU threads; 2 GB of RAM;and 12 GB of user data.”
Still, it’s cool, but I would caution anyone against introducing an oracle dependency.
gravypod|4 years ago
spullara|4 years ago
- No boolean type. Different folks will choose T/F chars, Y/N chars or 0/1 integers. - Strings are not nullable. An empty string and a null string are the same thing. - Date also has time.
By default, you end up with some very annoying bugs. Expect to actually change the way some of your columns work.
sureglymop|4 years ago
I'm just guessing but a CHAR would be 4 byte if it's Unicode and an INTEGER also right?
So you're telling me there's really no way to store just one or a few bits?
zepolen|4 years ago
salmo|4 years ago
RAC requires shared block storage and L2 private network. Cloud SDNs and storage require gross hacks with horrible performance consequences. Even “modern” virtualization is painful, but can work.
Oracle isn’t going to fix all the bare-metal spaghetti assumptions in their clustered DB stack, and has been pretty clear about that.
This could be useful for throwaway dev/test environments. Or maybe for apps that aren’t performance intensive or critical that are in “maintenance mode” and folks want to lift-and-shift. But they’ll probably spend more time on that than fixing/replacing/retiring the app. And all will require smaller data sets than what I see with big company legacy systems.
And typically those systems are using Oracle to access data populated by another system, which makes me die a little inside.
Pretty clearly a play to get big companies into GCP contracts, more than anything real.
It’s to sell to execs who want to do the cool thing without paying to fix the old thing. ahem Thomas Kurian cough.
unknown|4 years ago
[deleted]
jandrewrogers|4 years ago
qeternity|4 years ago
That said - it is entirely possible to run local storage for applications that provide their own replication. We run an LVM local storage provisioner for our in-cluster Postgres (orchestrated by Patroni). This gives us all sorts of snapshotting and resizing that you would find in network storage while having the performance of locally attached NVMEs
qeternity|4 years ago
foobarbazetc|4 years ago
kelseyhightower|4 years ago