We just returned from the Percona Live Open Source Database Conference 2018. It’s the premier open source database event for individuals and businesses that develop and use open source database software. Here’s a bit about what we learned at the conference.
MongoRocks deprecated in 3.6 and removed in 4.0
MongoRocks is being deprecated in future versions of 3.6. It is still accessible in current versions but there are caveats to be aware of https://t.co/duhKYPFqhv
— Percona (@Percona) May 1, 2018
Yes, MongoRocks is deprecated in Percona Server for MongoDB 3.6 and it will be fully removed in the next major version of Percona Server for MongoDB. When using Percona Server for MongoDB 3.6 with MongoRocks, the feature compatibility version is set to 3.4. Therefore 3.6 features, such as retryable writes and causal consistency, cannot be used. Additionally, read concern majority may produce unreliable results.
No more MMAP
The next version of MongoDB (version 4.0) will most likely be implemented on the WiredTiger engine. Therefore, MMAPv1 is most likely going to be deprecated in 4.0. This makes it impossible for MongoRocks to follow. It seems that in MongoDB 4.0 is going to use WiredTiger exclusively from a storage engine perspective.
How we feel about it
We have mixed feelings about this. MongoRocks is an engine based on LSM tree, a data structure that allows fast writes. It’s ideal for write-intensive workloads with point queries. WiredTiger has an LSM implementation but it’s not yet exposed to the pluggable API. We hope this engine will be exposed in order to get the benefits of LSM tree when the workload allows it.
Running MongoRocks in prod?
If you’re running MongoRocks in production and you want to use the latest version of MongoDB, you will need to change your storage engine to WiredTiger. Converting a MongoRocks replica set to a WiredTiger replica set is simple. You need to stop a secondary, change the engine configuration on the config file, wipe the data directory and then start the secondary. The initial sync will convert the secondary to WiredTiger. Repeat the same process for all secondaries. When it’s done, perform a step down and convert the ex-Primary in the same way.
We’re always available to help change storage engines and perform upgrades. If you’re an existing customer, contact our support team. If you’re not a customer yet, we’re happy to talk to you about this as well. Reach out to our database experts.
MongoDB Sessions in 3.6
MongoDB 3.6 brings in the notion of sessions. This is very important because this concept and ability to have sessions is what allows other important new features to exist. With the concept and ability of sessions there wouldn’t be retryable writes or extended killSession and ops capabilities. By enforcing the concept and viability of a session, it allows things such as retryable writes to occur. A session can be thought of as the time that an application connects and engages to the database until it finishes its designated task and then disconnects. During this session, a transaction can occur in its entirety or failover during any blips and reattach to the same session.
MongoDB has introduced their concept of retryable writes. Not having the ability to identify and retry failed writes automatically has long been a complaint when using MongoDB for applications that are heavily write dependent. Additional application code and logic have been required to identify application-level exceptions and errors then perform an application level retry for each failed attempt.
Now the application drivers can perform the first round of retries automatically behind the scenes. This feature is currently limited to operations that change only a single document, not multi-document operations. See all of the details in the MongoDB documentation.
Transactions are coming in MongoDB 4.0
Beginning with MongoDB 4.0 (due out this summer per MongoDB Inc.), transactions with ACID compliancy (Atomicity, Consistency, Isolation, Durability) will be available for replica sets only. Transactional capability for sharded instances will follow shortly thereafter in version 4.2. What this really refers to is the ability to have transactions across multiple documents without having to write complex application-level code to ensure data consistency and integrity. This will likely open up other target market areas or niche markets where ACID compliance similar to what is available with relational databases is needed. Think banking or financial applications.
Keep this in mind when designing any new apps that you expect to roll out in the next few months as this behavior will be very different than what we have had available to us before.
Two additional takeaways for MongoDB
First, there is now a community version of Compass. The community version of Compass improves the developer experience when working with MongoDB. It gives developers the flexibility to work with databases, collections, and documents using a GUI rather than a third-party GUI or MongoDB shell. Having the ability build, run, and optimize queries with a visual explain plan can prevent problematic queries from reaching production.
Second, MongoDB now supports network restrictions in their user access documents. This is important because in the past MongoDB has faced issues with security related to authentication. Now when authentication is enabled, you also have the ability to restrict user access to an IP or a range of IPs. This provides an additional layer of protection to your databases and collections.
Dikang Gu, Software Engineer at Facebook gave a great talk about how Instagram merged Cassandra with the RocksDB storage engine to create Rocksandra. Before they merged the two, they pushed Cassandra to its limits but the bottleneck always seemed to be JVM garbage collection. RocksDB is written in C++ so it doesn’t suffer with the garbage collection of Java. The performance results they demonstrated were impressive. They achieved better compression ratio and even more importantly, better performance. In some cases they got 400% better performance. Next up for them, more features based on the Cassandra features and a pluggable storage engine API for C*.
View the slides from this Percona talk
There seems to be a renewed interest in Postgres
We’ve heard about a renewed interest in Postgres from our clients over the last few months as well and have been looking at some of the improvements made there. Good to see that others are hearing the same. Percona announced it has decided to support Postgres.
Jon Hyman’s talk on Redis
We were really interested in the talk that Jon Hyman (Braze) gave on Redis. It was a very interesting to learn how Braze uses Redis to scale different components of their business. One of the most interesting parts of this presentation describes how the combination of MongoDB and Redis scales real time analytics workloads.
ObjectRocket presentations at Percona Live 2018
Three of our DBAs presented at Percona Live: Kimberly Wilkins, Jason Terpko, and Antonios Giannopoulos.
Triggers in MongoDB
Many of our existing customers migrate from relational databases, like MySQL, to MongoDB. Beyond the schema design challenges, some trivial RDBMS functionality, like triggers, do not exist in MongoDB. Our presentation is about how to workaround the missing piece of the puzzle. We presented three ways to implement triggers in MongoDB with examples and consideration for each case.
Additionally, we highlight the introduction of Change Streams in 3.6 that can remove the complexity of triggering event based on an operation that occurred. We provide a detailed explanation and a walk through of Change Streams.
Authentication with Percona Server for MongoDB and MongoDB Enterprise
In this presentation, Jason provides external central authentication options you may not know existed and how to configure those external authentication options. Authentication options were specific to Percona Server for MongoDB and MongoDB Enterprise. With MongoDB Enterprise, you can also implement external authorization based on user groups.
A Seat at the Blockchain and Cryptocurrency Table for NoSQL Database Technologies
Upcoming blog series: Blockchain and NoSQL related info coming soon.
Kimberly Wilkins has been a member of the Percona Speakers Selection Committee for the past three Percona Live Database Performance Conferences. This year, there were 345 sessions to grade. Kimberly also helps select speakers for a variety of relational (MySQL, Postgres, etc.) and non-relational NoSQL topic areas.
While preparing the slide deck for this year’s Percona, she realized that this was such a popular topic of interest across a wide swath of database technologies and groups that there should be a series of blogs. With that in mind, we will place the slides for the initial blockchain-related talk along with a series of short blog posts around blockchain and cryptocurrency topics. Specifically, how these technologies can work together with NoSQL databases to provide many different types of solutions both on-chain and off. Stay tuned!