Getting Your Database Onboard with DevOps
Oren Eini, CEO and founder of Hibernating Rhinos, has more than 20 years of experience in the development world with a strong focus on the Microsoft and .NET ecosystem. Recognized as one of Microsoft’s Most Valuable Professionals since 2007, Oren is also the author of Inside RavenDB. He frequently speaks at industry conferences such as DevTeach, JAOO, QCon, Oredev, NDC, Yow! and Progressive.NET.
To stay competitive, release cycles must be as agile a process as possible. According to the 2017 State of DevOps Report, organizations that effectively utilize DevOps principles can achieve almost 50 times more frequent software deployments than their competitors. The database serves as the foundation of your software, but traditional databases are as bendable as cement. Modern databases, however, provide more flexibility for DevOps teams to realize their goals.
The question for IT managers to consider is: What are the more malleable qualities of a database that give my DevOps team something to work with?
Get started quickly: Classic databases can take a lot of time to get into production, costing organizations time and valuable resource. Organizations need time to migrate their data, get started and scale out. To compress the release cycle, you need a database that sports an effective setup wizard that avoids having to pour through 100 pages of their “getting started” documentation, provides instant scalability and can get you from planning to production in an acceptable time frame.
A foundation made of rubber: The form, scale and depth of information organizations can take in is evolving too fast to be chained to a “set and forget” style of classifying your most important asset.
Relational databases require users to define a schema for their data as the very first thing they do. This is the worst possible time to cement your systems, when you know least about your project. Making changes to this schema is possible, but it’s awkward and far from easy. Too much time needs to be spent on making sure that schema changes are versioned, deployed, and managed.
This creates a strong incentive to avoid changing the schema, turning the need to become agile into an obstacle to getting the most out of your information. Changing the schema puts the breaks on the velocity of your release cycle in a relational database. If you have technical issues and need support, it can feel like running out of gas while on the freeway.
Why Should You Have to Choose Between Agility and Efficiency?
A schema-less database lets users change the very foundations of their platform instantly. The next release can be remolded to take in more focused data without wasting time rebuilding half of a user’s application. This gives users the best version faster, and at the same time benefits organizations by giving them better means to grow.
Scalability in both directions: For any application, there are seasonal peaks and valleys in traffic and overall usage. Any retail app needs to expand its capacity for Black Friday, while most educational offerings can contract a little for the summer. Organizations need something that can quickly adapt. The right database lets users scale out fast enough to keep the next release on schedule. This can also save money if you are on the cloud and have to pay for the memory you use, even if it is idle.
Dynamic indexing: When a new release is created, users create new queries to their data. As a result, they have to create new indexes to speed up the queries. A database with dynamic indexing will always use an index for every query. It employs self-learning by automatically setting an index up, using an existing one, or updating an existing one. This saves the development team the time needed to make new indexes. The alternative is slower queries or putting up an unnecessary obstacle to your next release by having someone analyze each and every query made.
Technical issues are the landmines of the DevOps process. You never know where they are and when they go off, there will be damage. If everything is native, you only need to go to one place to resolve your issues. That can save lots of time and effort. If you have a solution using third-party components, you might need to go to several places for help, often hearing the support engineer say, “This is not our problem. Talk to the people who developed the other component.”
Multiple nodes for multiple versions: A distributed database cluster lets you pass the baton while both of you are running. On a database cluster of multiple nodes, you can incrementally deploy your application, updating the data you store to the database along with the old versions of your application. It will work just fine with the new data, not missing a beat or dropping any datum to the floor. It’s a great way to test out what’s working and efficiently switch over to the next version.
In memory testing: A database should have the ability to run tests in isolated in-memory mode. You can create a database in-memory, and it will act like a database gone live without touching the disk. Data won’t be persisted. This lets you set up tests, perform them, and do it as many times as you need quickly and efficiently. Testing while still in flight is a database must for a well-oiled DevOps process.
Application developers are looking at every part of the release cycle for ways to increase the velocity at which their applications are brought to market. Where traditional databases were classically untouchable for enhancement, today’s modern database — which is schemaless, instantly scalable, and distributed — provides new advantages in staying ahead of the competition.
Feature image via Pixabay.